本文以通用MCU(以STM32为主)为例,梳理从上电复位到运行用户程序的完整启动流程,整体分为上电复位、启动模式选择、向量表读取、系统初始化、进入用户程序、中断响应六大阶段。

1. 上电复位阶段
MCU上电或手动按下复位键时,内部复位电路实时监测供电电压。待电压达到工作阈值且电压稳定后,向CPU发送复位信号,避免电压波动导致CPU执行异常指令。该阶段会强制CPU恢复初始状态,保证启动可靠性。
2. 启动模式选择
复位结束后,CPU检测硬件配置引脚电平(如STM32的BOOT0、BOOT1),判定程序读取的存储介质,确定启动地址:
- Flash启动:从内部Flash读取程序,为产品正式运行的常用模式;
- RAM启动:从内部RAM加载程序,多用于程序调试;
- 外设启动:通过串口、USB、SD卡等外部设备加载程序,常用于程序升级、批量烧录。
3. 向量表读取与复位中断
确定启动地址后,CPU从程序存储区起始位置读取中断向量表,完成两项核心配置:首先初始化主栈指针(MSP),再读取复位中断向量地址,随后跳转至复位中断服务程序(Reset_Handler)。向量表同时存储各类异常、外设中断入口,为后续中断响应提供地址依据。
4. 底层系统初始化
在复位中断服务程序中完成底层硬件初始化,为C语言运行搭建基础运行环境,主要包含:
- 初始化堆栈、配置RAM内存;
- 初始化C运行库,完成全局变量、静态变量初始化;
- 配置系统时钟,确定MCU工作主频;
- 初始化基础外设,如GPIO、串口、定时器等;
- 调用底层硬件初始化函数(如SystemInit)。
5. 跳转执行用户程序
底层初始化全部完成后,程序跳转至用户代码的main函数,正式执行用户应用程序。此时MCU完成启动流程,硬件外设正常工作,程序一般以死循环作为主体逻辑,可根据业务需求切换低功耗模式,等待触发各类事件。
6. 中断处理机制(运行阶段)
用户程序运行期间,若产生中断请求,MCU依据中断向量表自动跳转至对应中断服务函数(ISR)。硬件自动保存现场寄存器数据,中断处理完成后,恢复现场并返回主程序断点处继续执行,保障主程序运行不受中断干扰。
总结
MCU启动遵循复位→选启动模式→读向量表→底层初始化→进入main函数的固定流程,由硬件电路配合底层汇编代码完成初始化,最终交付控制权给用户程序,是嵌入式系统稳定运行的底层基础。推荐使用辉芒微MCU