STM32 启动过程解析
1、 通过 boot 引脚设置可以将中断向量表定位于 SRAM 区,即起始地址为 0x2000000,同
时复位后 PC 指针位于 0x2000000 处;
2、 通过 boot 引脚设置可以将中断向量表定位于 FLASH 区,即起始地址为 0x8000000,同
时复位后 PC 指针位于 0x8000000 处;
3、 通过 boot 引脚设置可以将中断向量表定位于内置 Bootloader 区,本文不对这种情况做
论述;
而 Cortex-M3 内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中
断入口向量地址,这样在 Cortex-M3 内核复位后,会自动从 起始地址的下一个 32 位空间取
出复位中断入口向量,跳转执行复位中断服务程序。对比 ARM7/ARM9 内核,Cortex-M3
内核则是固定了中断向量表 的位置而起始地址是可变化的。
有了上述准备后,下面以 STM32 的 2.02 固件库提供的启动文件“stm32f10x_vector.s”为
模板,对 STM32 的启动过程做一个简要而全面的解析。
程序清单一:
;文件“stm32f10x_vector.s”,其中注释为行号
DATA_IN_ExtSRAM EQU 0 ;1
Stack_Size EQU 0x00000400 ;2
AREA STACK, NOINIT, READWRITE, ALIGN = 3 ;3
Stack_Mem SPACE Stack_Size ;4
__initial_sp ;5
Heap_Size EQU 0x00000400 ;6
AREA HEAP, NOINIT, READWRITE, ALIGN = 3 ;7
__heap_base ;8
Heap_Mem SPACE Heap_Size ;9
__heap_limit ;10
THUMB ;11
PRESERVE8 ;12
IMPORT NMIException ;13
IMPORT HardFaultException ;14
IMPORT MemManageException ;15
IMPORT BusFaultException ;16
IMPORT UsageFaultException ;17
IMPORT SVCHandler ;18
IMPORT DebugMonitor ;19
IMPORT PendSVC ;20
IMPORT SysTickHandler ;21
IMPORT WWDG_IRQHandler ;22
IMPORT PVD_IRQHandler ;23
IMPORT TAMPER_IRQHandler ;24
IMPORT RTC_IRQHandler ;25
IMPORT FLASH_IRQHandler ;26
合嵌电子科技公司
评论1