STM32启动流程
核心逻辑:上电→硬件加载 MSP→执行 Reset_Handler→初始化环境→进入 main ()
-
上电复位
芯片上电或复位后,硬件自动执行:- 程序计数器(PC)被强制设为 0x00000000(中断向量表首地址)。
- 从向量表第一个条目读取数据,赋值给主堆栈指针(MSP),确定栈顶初始地址(栈用于函数调用和局部变量存储)。
-
执行复位中断服务程序
从向量表第二个条目获取复位中断服务程序(Reset_Handler) 的入口地址,PC 跳转到该程序执行(这是启动的核心步骤)。复位中断服务程序直接按顺序执行以下操作:- 配置系统时钟(如 PLL 倍频、总线分频等)。
- 将 Flash 中存储的全局变量初始值复制到 RAM。
- 将 RAM 中未初始化的全局变量清零。
-
C 库初始化
调用__libc_init_array()
,完成全局对象构造、标准库初始化等工作,为 C 语言程序运行做准备。 -
进入用户程序
最终跳转到main()
函数,开始执行用户编写的应用代码。
一、 Flas 分区、程序跳转及环境初始化。
通过以下步骤,可实现从 B 区到 A 区的安全、稳定跳转,保证 A 区程序独立运行。
嵌入式程序的起始执行逻辑通常遵循 “向量表” 规则,向量表的第一个元素是栈顶地址,第二个元素是复位中断服务程序的入口地址(即程序开始执行的地址)。
1. 读取 A 区向量表第一个元素(即0x08005000 A区的栈顶地址),将此作为MSP 寄存器的