STM32 学习笔记—–STM32 的启动过程
STM32 的启动过程是一个精细而系统的流程,它涉及从芯片复位开始,到初始化系统、设置时钟、运行主程序等一系列步骤。下面详细介绍 STM32 启动过程的主要步骤。
1. Boot引脚设定
STM32 系列芯片有多个启动模式,这些模式是通过引脚(如 BOOT0 引脚)来设置的。具体的启动模式取决于 BOOT0 和 BOOT1 的状态。
通过引脚配置,MCU 会选择合适的启动模式,这一步骤主要在硬件层面进行,设置后程序开始执行。
2. 查找初始地址并初始化栈指针(SP)
当 STM32 启动时,程序会从一个固定的地址开始执行。这个地址通常是由芯片的向量表(Vector Table)决定的,向量表中存放的是各种中断、异常的入口地址,包括复位向量。
SP
)中。Reset_Handler
),并将程序执行流跳转到该地址。3. 复位程序(Reset_Handler)
在 STM32 启动后,CPU 会首先执行 Reset_Handler
函数。此函数的主要作用是完成一系列系统初始化操作,如:
.bss
段(未初始化的全局变量区)。C
运行时环境,为后续的 C 语言代码执行做准备。Reset_Handler
通常会调用 SystemInit
函数来完成一些基础的硬件配置,诸如系统时钟、外部时钟源初始化等。
4. 异常中断设置
在复位程序中,除了复位处理外,Reset_Handler
还会为中断控制器设置各类中断的初始状态,并使能相应的中断服务函数。
HardFault_Handler
是一个专门处理硬件故障的中断处理函数,它会在程序执行时出现不可恢复的错误(如除零错误或访问无效内存)时触发。5. 系统时钟初始化(SystemInit)
在 Reset_Handler
执行过程中,通常会调用 SystemInit()
函数来进行系统时钟的初始化。该函数的工作内容通常包括:
这些步骤确保 MCU 的时钟系统在程序执行前正确配置,从而为后续的代码执行提供稳定的时钟信号。
6. 调用 C 库初始化函数
在 Reset_Handler
或 SystemInit
之后,通常会调用 C 语言运行时初始化函数,如 _init()
,以便为 C 语言程序做好准备。这些初始化过程可能包括:
stdio
,为输入输出提供支持。7. 主函数(_main)
最后,Reset_Handler
会跳转到 C 语言的主函数 _main
,这是程序的入口点。此时,硬件和系统时钟已经准备就绪,C 库已初始化,栈指针也已经指向正确的位置,程序就可以开始执行了。
主函数 _main
通常是应用程序的入口,程序的实际逻辑、任务调度等都从这里开始。
总结
STM32 启动过程中的每一步都有其独特的作用,从硬件引脚设置、栈指针初始化,到异常中断设置、时钟初始化、C 库函数调用,最终跳转到 main
函数。这个过程确保了 MCU 在开始执行应用程序之前,所有硬件和系统资源都被正确初始化,保证了稳定的运行环境。
作者:青竹问道