在开发过程中,“MCU 上电不运行”是我们经常遇到的问题之一。但客户对此类问题的描述往往较为模糊,仅简单表示“产品不工作”或“怀疑 MCU 没有运行”,这给我们现场排查带来了较大的挑战。即便工程师到达现场,往往也无法迅速定位问题根因。
因此,本文总结了一些 MCU 上电后不运行的典型原因和系统性的排查方法,供大家参考和借鉴。
一、明确问题来源:软件还是硬件?
MCU 上电后不运行通常有两个主要方向:
软件故障或
硬件故障。我们建议首先判断问题属于哪一类,以便快速缩小排查范围。
软件常见原因:
- 时钟源切换失败
- 程序跑飞(如指针访问非法内存)
- 堆栈溢出
- 死循环或未触发 main 函数
硬件常见原因:
- VDD 或 VCAP 电源不稳定
- 上电波形缓慢(电源斜率不合规)
- 晶振不起振或参数不匹配
- 复位电路设计不合理
二、软件排查步骤
由于软件问题相对更容易验证,建议按如下步骤进行判断和验证:
1. 烧录最小功能测试程序
将客户程序擦除,烧录一个简单的测试代码(例如翻转某个 IO 口),再用示波器观察该 IO 是否有波形输出:
while (1) { HAL_GPIO_TogglePin(GPIOx, GPIO_PIN_y); HAL_Delay(100); }
- 若 IO 有输出波形,说明 MCU 正常运行,问题多半出在用户程序逻辑(如跑飞、死循环、时钟配置错误等)。
- 若无波形输出,需进一步排查硬件问题。
2. 观察看门狗复位情况
如果用户程序启用了独立看门狗(IWDG),则即使程序卡死或跑飞,看门狗仍能定期复位 MCU。此时可使用示波器观察 RESET 引脚是否存在周期性复位波形:
- 若存在周期性复位:说明程序已进入异常状态(如死循环或异常中断),并被 IWDG 自动复位。
- 若无复位波形:说明 MCU 可能未成功运行程序,大概率为硬件问题,如供电异常、晶振不起振等。
3. 手动复位测试
在 MCU 上电后,使用镊子短接 RESET 到 GND,然后松开,观察程序是否能够正常启动:
- 若每次手动复位都能使程序运行,说明 MCU 在上电瞬间外设(如时钟源、外部通信芯片)尚未准备好,导致程序初始化失败。
- 建议在系统初始化前加入一定的延时,例如:
for (volatile int i = 0; i < 100000; i++);
或使用 HAL_Delay(200) 延迟几百毫秒,确保系统稳定后再进行初始化。

三、硬件排查重点:电源与晶振
1. 晶振起振检测
使用高阻抗示波器检测晶振两端是否有振荡波形,并确认频率是否符合规格要求。同时检查晶振在 PCB 上的布局位置是否靠近 MCU 的 OSC 引脚。
一般建议晶振距离 OSC 引脚
不超过 20mm,距离越远,信号衰减和受干扰的风险越大,从而影响起振效果。
2. 电源稳定性检查
MCU 的 VDD 电源必须稳定可靠。需重点关注以下几个方面:
- 确认 3.3V 电源来源稳定,电压无跌落或噪声干扰;
- 按推荐设计为
每组 VDD-VSS 引脚分别布置退耦电容,一大(μF 级)一小(nF 级)各一颗,且尽量靠近布置;
- 切勿仅用一组退耦电容供给所有 VDD 引脚,这种做法虽然节省空间,但极易导致局部供电不稳,影响系统稳定性。
3. VCAP 电压波形判断(适用于 STM32F4/H7 等)
部分芯片(如 STM32F4/H7 系列)提供 VCAP 引脚用于输出内核供电电压(一般为 1.1~1.3V)。
可通过该引脚判断内核 LDO 是否工作正常:
- 正常情况下,VCAP 电压应为稳定的直流波形;
- 若波形上出现超过 50mV 的纹波,可能导致 MCU 无法正常启动或运行;
- 推荐在每个 VCAP 引脚外接 ≥2.2μF 的低 ESR 陶瓷电容,确保内核电压稳定。


其它MCU,像STM32G0/G4,它并没有外接VCAP,它的内核电压都是在芯片内部的,也就是说我们无法探测和改善它,这样就更应该注重外部VDD的供电环境了。
