
擦除整片Flash后,将地址0x8004000改为0x8000000重新下载,就可以运行了。


你是不是做了全片擦除? 把0x8000000地址开始自带的boot代码给擦除掉了? 若擦除了boot, 把下载首地址从0x8004000改为0x8000000。。。。。让KEIL把下载app_hex放到0x8004000首地址,是因为0x8000000有boot代码上电后会跳入0x8004000执行app代码。
若全片擦除了boot代码,需把app下载地址改为0x8000000。。。。或先烧入boot程序,再把app代码下载到0x8004000即可。 这里KEIL下载地址不同,与有没有boot代码有关系
一、Boot代码的定义与作用
Boot代码(引导加载程序)是嵌入式系统中一段固化在非易失性存储器(如Flash)中的底层程序,其核心功能包括:
- 硬件初始化:配置时钟、内存控制器、外设等基础硬件模块
- 启动模式选择:根据硬件引脚或寄存器配置,决定从Flash、系统存储器(如STM32的BootLoader)或RAM启动
- 程序加载:将应用程序(App)从存储介质(如Flash、网络)加载到内存(如RAM)并跳转执行
- OTA升级支持:接收新固件并更新到App区域,同时校验数据完整性
在STM32等MCU中,Boot代码通常位于Flash的起始地址(如0x08000000
),占用少量扇区(如32KB),与用户App代码分区共存