打印

闪灯实验求帮助……

[复制链接]
1201|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-12-23 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pi, IO, GPIO, gp, rc
用的mini板和库函数做的闪灯实验,刚上电时,会出现在几下LED的闪烁周期不对的情况。过了一会儿就正常了,并且一直都没有出现问题。用的库函数(3、5版本)代码如下:

int main(void)
{
STM32_CLK_Init();           //IO clock enable
Port_Init();            //IO mode initialize

while(1)
{

     u32    i;

     GPIO_ResetBits(GPIOA,GPIO_Pin_8);      //I/O port reverse
     GPIO_SetBits(GPIOD,GPIO_Pin_2);

     for(i=1000000;i>0;i--);                          //delay

     GPIO_SetBits(GPIOA,GPIO_Pin_8);         //I/O port reverse
     GPIO_ResetBits(GPIOD,GPIO_Pin_2);

     for(i=1000000;i>0;i--);                          //delay
  }
}
//--------------------------时钟初始化------------------------------------------------------------------

void STM32_CLK_Init(void)
{
    RCC_DeInit();
    RCC_HSEConfig(RCC_HSE_OFF);       //disable HSE
    RCC_HSICmd(ENABLE);         //enable HSI
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //
    RCC_PLLCmd(ENABLE);         //enable PLL
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);    //hsi as system clock
    if(RCC_GetSYSCLKSource()!=0x00)
    {
         RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);   //hsi as system clock
    }
    RCC_HCLKConfig(RCC_SYSCLK_Div1);     //AHB clock
    RCC_PCLK1Config(RCC_HCLK_Div2);      //APB1 clock is HCLK/2
    RCC_PCLK2Config(RCC_HCLK_Div1);      //APB2 clock is HCLK
    RCC_ITConfig(RCC_IT_LSIRDY|RCC_IT_LSERDY|RCC_IT_HSIRDY|RCC_IT_HSERDY|RCC_IT_PLLRDY,DISABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);
}            

//----------------------------------------IO口初始化-------------------------------------------------------
void Port_Init(void)
{
    GPIO_InitTypeDef GPIOA_InitStruct;
    GPIO_InitTypeDef GPIOD_InitStruct;

    GPIOA_InitStruct.GPIO_Pin=GPIO_Pin_8;
    GPIOA_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
    GPIOA_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

    GPIO_Init(GPIOA,&GPIOA_InitStruct);     //initialize PA8

    GPIOD_InitStruct.GPIO_Pin=GPIO_Pin_2;
    GPIOD_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
    GPIOD_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

    GPIO_Init(GPIOD,&GPIOD_InitStruct);     //initialize PD2
}



沙发
gcxzhz| | 2013-12-23 10:36 | 只看该作者
刚开机的时候 正在初始化话 两到3秒后稳定后就好的

使用特权

评论回复
板凳
SLHSu37| | 2013-12-23 11:34 | 只看该作者
用USB-232供的电?我感觉貌似和这个 USB-232 有关系,使用LCD的时候会更明显

使用特权

评论回复
地板
ahuzjh| | 2013-12-23 12:01 | 只看该作者
void Port_Init(void)
{
    GPIO_InitTypeDef GPIOA_InitStruct;
    GPIO_InitTypeDef GPIOD_InitStruct;

    GPIOA_InitStruct.GPIO_Pin=GPIO_Pin_8;
    GPIOA_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
    GPIOA_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

    GPIO_Init(GPIOA,&GPIOA_InitStruct);     //initialize PA8

    GPIOD_InitStruct.GPIO_Pin=GPIO_Pin_2;
    GPIOD_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
    GPIOD_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

    GPIO_Init(GPIOD,&GPIOD_InitStruct);     //initialize PD2
//个人觉得可以在这个函数的最后面根据你的硬件情况,关闭LED。
}

使用特权

评论回复
5
拿起书本| | 2013-12-23 15:19 | 只看该作者
感觉跟时钟有关系,你在操作LED之前加点延时。库函数程序看不懂


使用特权

评论回复
6
jjjkkk00| | 2013-12-24 11:33 | 只看该作者
....
for(i=1000000;i>0;i--);

....
GPIOA_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;

//延时的时间大约是多少?需要估算一下。与IO的配置是否冲突?时钟方面的原因可能高些。

使用特权

评论回复
7
huangfeng33| | 2013-12-24 20:13 | 只看该作者
这是串口一键下载电路干扰STM32的复位引起的,你上电以后,按复位就OK了。

使用特权

评论回复
8
lanseshuijing| | 2013-12-24 20:24 | 只看该作者
5楼正解

使用特权

评论回复
9
zeluo| | 2013-12-24 20:46 | 只看该作者
应该还是时钟的问题  楼主  这个  应该是这样的   帮你顶顶   再看看别人的意见

使用特权

评论回复
10
huzi2099| | 2013-12-25 00:00 | 只看该作者
同意时钟问题,电容和晶振不合适,你换内部时钟试试就可以确定了

使用特权

评论回复
11
jxmzzr|  楼主 | 2013-12-25 10:35 | 只看该作者
多谢楼上各位朋友的热心帮助,搞定,按复位键搞定。结贴了,祝各位朋友圣诞开心。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝