stm32 上电复位 和软复位有什么区别。

xujianxiang xujianxiang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有一个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();


太恶搞了。
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
xujianxiang
单片机/工控 27,522 成员 28,796 内容