赞
踩
STM32启动模式(自举模式)
M3/M4/M7内核复位后的第一件事:
1:从地址0x0000 0000处取出堆栈指针MSP的初始值,这个值就是栈顶地址。
2:从地址0x0000 0004处取出程序计数器指针PC的初始值,这个值是复位向量。
对于H1系列:在系统复位后,SYSCLK的第四个上升沿,BOOT引脚的值会被锁存。
BOOT1 | BOOT0 | 启动模式 | 0x00000000映射地址 | 0x00000004映射地址 |
---|---|---|---|---|
x | 0 | 主闪存存储器 | 0x08000000 | 0x08000004 |
0 | 1 | 系统存储器 | 0x1FFFF000 | 0x1FFFF004 |
1 | 1 | 内置SRAM | 0x20000000 | 0x20000004 |
通过判断BOOT引脚的连接情况识别启动模式,如设置为BOOT0 = 0 ,BOOT1 = x 时,选择主闪存存储器,把0x08000000映射到0x00000000,从0x08000000获取MSP的初始值,这个值就是栈顶地址;从0x08000004获取PC的初始值,这个值是复位向量。此时程序会立刻去执行Reset_Handler。
Reset_Handler函数在启动文件startup_stm32f103xe.s中定义
Reset_Handler函数介绍:
EXPORT: 标明全局属性,可被外部调用
IMPORT: 申明来自外部文件,类extern
PROC: 定义子程序
ENDP:表示子程序结束
WEAK:弱定义
Reset_Handler中执行了两个程序,SystemInit 和__main。首先会调用 SystemInit 函数来初始化系统时钟等参数。在__main函数中,会初始化内核的寄存器,划分堆空间(如果使用到的话)和栈空间。最后会调用main()函数执行用户写的代码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。