首先要了解,stm32的存储映射解构,解构如图:(该图来自官方手册)
在存储空间的开头是Alias区域,该部分就是用于存储的重映射。

重映射的选择是由Boot引脚来抉择的。

在程序复位启动时,程序一定先从0x00000000开始执行。这时alias区又映射其他的区域(例如flash)。这时候alias区就好像一个窗口,而被映射的存储区就是透过窗口看到的风景。
于是mcu指针先看到的是映射的0x08000000的flash区的中断向量表。即是
1.初始化msp指针。
2.执行reset_hanlder函数
在s启示文件中,我们能看到
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
这些语句定义了Reset中断函数的运行逻辑,可以看到。他首先执行了SystemInit函数,后续再执行了__main函数。
而当执行的函数所在的代码地址均在flash上,就好像alias区只是个引入人,当指针运行到相应区域后,这个引入人便失去了作用。