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 上电复位 跟软复位有什么区别的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 写一副对子_挥毫泼墨写春联 西安街头年味
- 下一篇: 三位分节制顺口溜_1-3年级基础知识顺口