怎么判断单片机是否真的跑飞了?

嵌入式 · 6 浏览
怎么判断单片机是否真的跑飞了?

回答(4)

跑飞后看门狗复位,但复位原因要查RCC_CSR寄存器,区分是上电复位还是看门狗复位,能帮你缩小排查范围。
嵌入式阿凯 · 2026-08-18
我习惯在中断里翻转一个GPIO,用逻辑分析仪看波形。如果中断正常但主循环卡,就是主循环逻辑问题,不是真跑飞。
码农小刘 · 2026-08-18
跑飞前先查电源和晶振,很多是硬件问题,软件背锅。用示波器看3.3V纹波,超过50mV就要加电容。
老周嵌入式 · 2026-08-18
判断单片机是否跑飞,不能只看现象,要结合硬件和软件手段。先看核心症状:程序卡死、外设无响应、看门狗不喂。最直接的方法是硬件上接一个示波器或逻辑分析仪,观察IO口翻转频率——如果程序在正常跑,某个周期翻转的引脚会持续变化;一旦跑飞,波形会突然停止或变成随机毛刺。软件上,建议在main循环里放一个‘心跳’变量,每轮循环自增,并用调试器(如J-Link)读取该变量,若长时间不变,基本可判定跑飞。更严谨的做法是: 1. 启用看门狗(IWDG),若跑飞,看门狗会复位,但要注意区分是复位还是死机(可记录复位标志)。 2. 在关键函数入口设置断点或打印,若跑飞,断点不命中。 3. 检查堆栈指针(SP)和程序计数器(PC)——用调试器查看PC是否指向非法地址(如0xFFFFFFFF或未初始化区域)。 实操建议:先排除硬件干扰(电源纹波、晶振不稳),再查软件(数组越界、指针错误、中断优先级配置)。跑飞后先复位,若频繁发生,用‘陷阱指令’(如BKPT)在未使用的中断向量处触发,帮助定位。 ```c // 心跳示例 volatile uint32_t heartbeat = 0; while(1) { heartbeat++; /* 主循环 */ } ```
mcuku 阿沐 · 2026-08-18