打印

STM32上电复位与软复位有什么不同啊……

[复制链接]
2863|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-6-11 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32, rc, ip, IO, ck
我有一个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();
     
沙发
trumpxp| | 2013-6-11 19:59 | 只看该作者
个人觉得  硬件复位更加可靠  个人的理解

使用特权

评论回复
板凳
jxmzzr| | 2013-6-12 14:37 | 只看该作者
从STM32的复位结构看,不管是看门狗复位,还是上电复位以及软件复位什么的,都是一样的

LZ这情况,看一下复位电路的焊接,如果有以太网芯片的话,好好也查一下它的复位的情况

使用特权

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

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝