首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-10-12 
stm32 上电复位 和软复位有什么区别。我有一个lwip的程序,1.上电跑不正确。2.上电同时按下复位键,跑也不正确

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();
     

太恶搞了。


[解决办法]
你好,我最近在捣鼓STM32, GPIOD>CRL&=0XFFFFF0FF; GPIOD->CRL
[解决办法]
=0X00000300;比如说这两句是对PD2的一些设置,但是如果我要设置PD3呢?应该怎样写啊?也就是说我没有理解这两个0XFFFFF0FF,0X00000300的意思。希望你能帮助我解决这个困惑谢谢!!!期待你的回复。

热点排行