欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

stm32 上电复位 跟软复位有什么区别

更新时间: 2014-01-05 03:14:53 责任编辑: Author_N1

 

stm32 上电复位 和软复位有什么区别。
我有一个lwip的程序,
1.上电跑不正确。
2.上电同时按下复位键,跑也不正确。
3.上电跑不正确。跑一会按下复位键。再跑一次正确。
4跑一会儿,软复位。再跑能正确。代码如下。


const u16*  pBuffer = (const u16*)0x0803fc00;   
  RCC_ClocksTypeDef RCC_Clocks;
   
  /* Setup STM32 clock, PLL and Flash configuration) */
  SystemInit();

  /* Enable USART2 clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);


  /* Enable ETHERNET clock  */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |
                        RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);

  /* Enable GPIOs and ADC1 clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
                         RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO |
 RCC_APB2Periph_ADC1, ENABLE);

  ADC_Configuration();

   NVIC_Configuration();  
     GPIO_Configuration();
     

if( *pBuffer==0)//第一次起跑,复位。
{

  FLASH_Unlock();
    FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
 FLASH_ErasePage(0x0803fc00);
  FLASH_ProgramHalfWord((0x0803fc00 ),1);
     FLASH_Lock();
 SCB->AIRCR =0X05FA0000|(u32)0x04;
}
else//第二次起跑,不复位。
{
 
    FLASH_Unlock();
    FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
 FLASH_ErasePage(0x0803fc00);
  FLASH_ProgramHalfWord((0x0803fc00 ),0);
     FLASH_Lock();
  
  
}
  

这样程序能正确执行。
5.同一个程序程序跑两遍,不正确。

const u16*  pBuffer = (const u16*)0x0803fc00;   
  RCC_ClocksTypeDef RCC_Clocks;
   
  /* Setup STM32 clock, PLL and Flash configuration) */
  SystemInit();

  /* Enable USART2 clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);


  /* Enable ETHERNET clock  */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |
                        RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);

  /* Enable GPIOs and ADC1 clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
                         RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO |
 RCC_APB2Periph_ADC1, ENABLE);

  ADC_Configuration();

   NVIC_Configuration();  
     GPIO_Configuration();

//跑两遍
     const u16*  pBuffer = (const u16*)0x0803fc00;   
  RCC_ClocksTypeDef RCC_Clocks;
   
  /* Setup STM32 clock, PLL and Flash configuration) */
  SystemInit();

  /* Enable USART2 clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);


  /* Enable ETHERNET clock  */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |
                        RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);

  /* Enable GPIOs and ADC1 clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
                         RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO |
 RCC_APB2Periph_ADC1, ENABLE);

  ADC_Configuration();

   NVIC_Configuration();  
     GPIO_Configuration();
     

太恶搞了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:53
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20066/
本文WWW.DOC100.NET DOC100.NET版权所有。