stm32 上电复位 和软复位有什么区别。
我有一个lwip的程序,
1.上电跑不正确。
2.上电同时按下复位键,跑也不正确。
3.上电跑不正确。跑一会按下复位键。再跑一次正确。
4跑一会儿,软复位。再跑能正确。代码如下。
这样程序能正确执行。
5.同一个程序程序跑两遍,不正确。
太恶搞了。
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小系统板与开发版区别
使用altium designer软件,绘制的STM32F103RCT6的最小系统板 有flash 有稳压模块
STM32的实例教程
基本都是STM32实例介绍,对于初学者来看是十分好的,有利于学习STM32
STM32F107和STM32F105数据手册
STM32F107 STM32F105 数据手册 datasheet
详解STM32三种低功耗模式:对比及应用
按功耗由高到低排列,STM32具有运行、睡眠、停止和待机四种工作模式。上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择的低功耗模式。三种低功耗的模式说明如下图: 从表中可以看到,这三种低功耗模式层层递进,运行的时钟或芯片功能越来越少,因而功耗越来越低。 02 不同模式下软件工作方式的对比 1、睡眠模式:在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,CM4的外设全都还照常运行,在软件上表现为不再执行新的代码。这个状态会保留睡眠前的内核寄存器
STM32F101x和STM32F103x参考手册
STM32F101x和STM32F103x参考手册,提供了STM32的所有使用说明。是个好东西,


单片机/工控
