需要在flash中添加bootloader的话,需要对flash进行分区,即bootloader区和app区(程序运行区),主要记录在 Keil 平台和 STM32CubeIDE平台 上的中断向量表偏移配置,以偏移 0x2800
为例,即预留10k大小的空间给bootloader
Keil
修改flash起始地址
打开工程魔术棒,Target→IROM1,填入flash起始地址为 0x8000000
偏移 0x2800
后的 0x8002800
,芯片flash大小是 256k(0x40000)
,需要减掉偏移量 0x2800
之后是 0x3D800
修改中断向量表偏移
打开 system_stm32f1xx.c
文件(注意该工程由 CubeMX 配置而来),在其96行左右的宏定义 USER_VECT_TAB_ADDRESS
默认是注释掉的,把注释删了,在98行有这个宏的定义判断
如果程序要运行在SRAM则取消101行注释并修改SRAM的相关偏移量,否则则是使用下面flash相关的宏配置,110行中断向量的偏移量和Flash起始位置偏移量是一样的为
0x00002800U
编译工程后进入Debug调试模式,打开内存监视器,在
0x8000000
地址开始都是 0xFF
(无数据写入时都默认是 0xFF
),这里还没写入bootloader,所以可见程序烧录后不在 0x8000000
地址上
找到监视器上地址
0x8002800
的内容,可看到烧录的固件在flash的 0x8002800
地址,当bootloader中跳转PC指针到 0x8002800
地址时,将运行app程序
STM32CubeIDE
修改flash起始地址
打开链接脚本文件 STM32F103VCTX_FLASH.ld
,基本都是 *.ld 结尾的文件,在FLASH一行修改 ORIGIN
flash起始地址为 0x8002800
,LENGTH
是FLASH剩余长度,原256k,给了10k bootloader,剩下246k
修改中断向量表偏移
同样是打开 system_stm32f1xx.c
文件,取消宏 USER_VECT_TAB_ADDRESS
的注释,修改偏移量为 0x00002800U
进行编译烧录,然后打开 Build Analyzer → Memory Regions
查看FLASH的使用情况,可以看到起始地址为 0x8002800
,大小246KB,包括程序使用大小和剩余大小