欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

stm32如何执行软复位_stm32 上电复位 跟软复位有什么区别

发布时间:2025/4/16 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 stm32如何执行软复位_stm32 上电复位 跟软复位有什么区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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如何执行软复位_stm32 上电复位 跟软复位有什么区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。