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 上电复位 跟软复位有什么区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写一副对子_挥毫泼墨写春联 西安街头年味
- 下一篇: 怎么关闭eureka的服务_Spring