STM32 的启动过程主要分为以下几个阶段:
1. 硬件复位
当 STM32 上电或发生复位事件(如按下复位按键、看门狗复位等)时,硬件系统会进入复位状态。此时,芯片内部的各类寄存器被设置为复位默认值,时钟处于停止或初始状态,为启动做准备。
2. 选择启动模式
STM32 通过BOOT0和BOOT1引脚的电平组合来确定启动模式,常见启动模式有:
1.从用户闪存启动:BOOT0 = 0,BOOT1 = 0 。这是最常用模式,用户程序存储在内部闪存中,芯片从这里读取代码并执行,适合正常运行阶段。
2.从系统存储器启动:BOOT0 = 1,BOOT1 = 0 。芯片从系统存储器启动,这里固化了厂商的 Bootloader 程序,可用于通过串口等方式下载用户程序到内部闪存,用于程序烧录更新。
3.从内置 SRAM 启动:BOOT0 = 1,BOOT1 = 1 。芯片从内部 SRAM 启动,可用于调试,断电后 SRAM 数据丢失,一般不用于正式运行。
3. 执行启动代码
1.向量表初始化:启动时,首先从指定启动地址(依据启动模式确定)读取向量表。向量表包含了中断向量地址,如复位中断、外部中断等,为中断处理做准备。
2.初始化系统时钟:配置系统时钟源(如 HSI、HSE 等)、设置分频系数等,确定系统运行时钟频率,这是芯片正常运行的基础。
3.初始化变量:将数据段(已初始化的全局变量和静态变量)从 Flash 搬运到 RAM 中,将 BSS 段(未初始化的全局变量和静态变量)清零。
4. 跳转到用户代码
完成上述初始化后,程序跳转到用户代码的入口地址(一般是main函数),开始执行用户编写的应用程序代码,进入正常工作阶段。