STM32微控制器中BootRAM地址在中断向量表中的作用探究
STM32F103C8T6中断向量表中BootRAM地址的解析
你看到的0xF108F85F不是普通的函数地址,它是STM32F1系列内置Bootloader里的RAM启动验证魔术数,下面拆解你的疑问:
触发机制
- 当你把STM32的BOOT引脚配置为RAM启动模式(BOOT1=1、BOOT0=0)时,芯片上电后不会直接运行SRAM里的代码,而是先进入内置的系统Bootloader。
- Bootloader会自动读取中断向量表的最后一个表项(也就是你代码里标注
@0x108的位置):如果这个位置的值是0xF108F85F,它就判定SRAM中存在合法的用户程序,直接跳转到SRAM起始地址(0x20000000)执行;如果值不匹配,Bootloader就会停留在自身交互模式(比如等待串口下载程序)。
实际作用
- 这个值本质是个"通行证"——用来告知Bootloader:"SRAM里的程序有效,无需拦截,直接放行执行"。它本身不是可执行代码,Bootloader仅做值的校验,不会去执行该地址的内容。
为何放在中断向量表末尾
- STM32F1中等密度设备(比如F103C8T6)的中断向量表固定为0x108字节大小,对应66个表项:1个栈顶地址+65个异常/中断处理函数。把这个魔术数放在末尾,既不会占用正常中断处理函数的位置,又能让Bootloader快速定位到校验点。
- 这是ST官方Bootloader的内部约定,属于未公开的厂商细节,所以你在公开的参考手册、数据手册里查不到相关说明——这类内容大多来自逆向分析或内部技术文档。
内容的提问来源于stack exchange,提问作者strigidie




