M3/M4/M7内核复位后,做的第一件事:
- 从地址0x00000000处取出堆栈指针MSP的初始值,该值就是栈顶地址。
- 从地址0x00000004处取出程序计数器指针PC的初始值,该值是复位向量。
芯片厂商可能会把0x00000000和0x00000004地址映射到其它的地址!
STM32启动模式
在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。
当使用仿真器下载程序时,用第一种模式即可。
当使用串口下载程序时,用第二种模式。
STM32启动过程
- 初始化MSP:从0x08000000获取
- 初始化PC:从0x08000004获取
- 设置堆栈大小:Heap_size、Stack_size
- 初始化中断向量表:__Vectors
- 调用初始化函数:(可选的),如调用:SystemInit函数
- 调用__main:标准C库函数,执行一系列设置,最终调用main函数
Reset_Handler定义在启动文件中,由汇编语言编写
堆栈简介
内存 | 作用 |
---|---|
栈 | 编译器自动分配和释放,存放函数参数,局部变量等 |
堆 | 程序员分配和释放,如malloc、calloc、realloc等 |
函数局部变量较多,嵌套关系复杂时,需加大栈大小(Stack_size)。文章来源:https://uudwc.com/A/v0dWj
STM32启动过程图解
文章来源地址https://uudwc.com/A/v0dWj