本教程默认你是零基础新手,会尽量把每一步写清楚。你可以一边看一边操作,不需要先掌握完整理论。
一、教程简介
本教程讲解 死机复位排查。教程按零基础方式编写,每一步都尽量说明“为什么做、在哪里点、做完看什么现象”。
【此处配图:死机复位排查 整体流程图】
二、目录导航
- 前置准备
- 基础概念说明
- 详细步骤
- 参数设置说明
- 注意事项和避坑要点
- 新手易错点
- 常见问题 FAQ
- 总结
- 温馨提示
三、前置准备
你需要准备:
ext 串口日志、调试器、示波器、能复现问题的设备
建议先创建一个单独的工程文件夹,把资料、代码、截图和调试日志都放进去。这样后面排查问题不会乱。
四、基础概念说明
在正式操作前,先记住三个原则:
- 先跑通最小功能:不要一开始就加很多复杂功能。
- 每一步都要验证现象:能编译、能下载、能输出日志,才继续下一步。
- 遇到错误先看日志:不要凭感觉改代码。
五、详细步骤
步骤 1:判断是复位还是卡死
操作流程: 给程序开机第一行加日志,例如 LOGI(“BOOT”, “start”)。
需要填写或设置的参数: 每次上电和复位都打印。
做完以后看什么: 问题发生后,如果又看到 BOOT start,说明设备复位了。
避坑提醒: 不要一上来就改代码,先判断现象。
【此处配图:死机复位排查 - 判断是复位还是卡死 操作截图】
步骤 2:打印复位原因
操作流程: 在 main 初始化早期调用 print_reset_reason。
需要填写或设置的参数: 检查 IWDG、PIN、POR、BOR 等复位标志。
做完以后看什么: 串口输出 watchdog reset 或 power reset。
避坑提醒: 读取后要清除复位标志,否则下次判断不准。
【此处配图:死机复位排查 - 打印复位原因 操作截图】
步骤 3:记录最后一条日志
操作流程: 串口助手打开保存日志功能。
需要填写或设置的参数: 文件名写 问题日期_设备编号.log。
做完以后看什么: 问题发生后能找到最后一条正常日志。
避坑提醒: 没有日志就很难判断卡在哪个模块。
【此处配图:死机复位排查 - 记录最后一条日志 操作截图】
步骤 4:HardFault 停住现场
操作流程: 在 HardFault_Handler 里写 while(1),不要自动复位。
需要填写或设置的参数: 调试器连接后暂停 CPU。
做完以后看什么: 能看到调用栈和 PC 地址。
避坑提醒: 发布版可以复位,调试版一定要保留现场。
【此处配图:死机复位排查 - HardFault 停住现场 操作截图】
步骤 5:检查任务栈
操作流程: FreeRTOS 打开 vApplicationStackOverflowHook。
需要填写或设置的参数: 在 hook 里打印任务名。
做完以后看什么: 栈溢出时能看到具体任务。
避坑提醒: 栈不够会表现成随机 HardFault。
【此处配图:死机复位排查 - 检查任务栈 操作截图】
步骤 6:检查外设超时
操作流程: 搜索 HAL_MAX_DELAY 和 while 等待语句。
需要填写或设置的参数: 把无限等待改成 100ms 或 1000ms 超时。
做完以后看什么: 外设异常时能返回错误,而不是卡死。
避坑提醒: I2C 设备掉线时最容易无限等。
【此处配图:死机复位排查 - 检查外设超时 操作截图】
步骤 7:示波器看电源和复位脚
操作流程: 探头接 VDD 和 NRST,设置下降沿触发。
需要填写或设置的参数: VDD 档位 500mV/div,时基 1ms/div 起步。
做完以后看什么: 问题瞬间 VDD 不应跌到芯片复位阈值以下。
避坑提醒: 万用表看不出瞬态掉电,必须用示波器。
【此处配图:死机复位排查 - 示波器看电源和复位脚 操作截图】
步骤 8:整理证据定位模块
操作流程: 把复位原因、最后日志、调用栈、波形截图放到同一个文件夹。
需要填写或设置的参数: 按时间命名,例如 2026-01-04_reset_case01。
做完以后看什么: 能明确怀疑模块,而不是泛泛说“死机”。
避坑提醒: 一次只改一个怀疑点,改完复测。
【此处配图:死机复位排查 - 整理证据定位模块 操作截图】
六、参数设置说明
常见参数建议:
| 参数 | 新手建议 |
|---|---|
| 串口波特率 | 115200 |
| 工程路径 | 使用英文路径 |
| 日志等级 | 调试阶段打开 INFO 和 ERROR |
| 超时时间 | 外设通信必须设置超时 |
七、注意事项和避坑要点
- 不要跳步骤:嵌入式调试最怕前面没跑通,后面越改越乱。
- 保留日志:每次失败都保存错误信息。
- 先确认硬件:接线、供电、下载器、串口工具都要检查。
- 不要把真实密钥提交到仓库:涉及云平台或 Wi-Fi 密码时尤其注意。
- 修改前先备份:新手建议每完成一小步就提交一次 Git。
八、新手易错点
- 工程路径包含中文或空格。
- 参数照抄但没有根据自己的芯片或开发板修改。
- 编译失败还继续下载。
- 串口线 TX/RX 接反。
- 忘记看开发板供电电压。
九、常见问题 FAQ
Q1:我完全没有基础,可以直接做吗?
可以。你只需要按步骤操作,每一步完成后确认现象。如果某一步失败,先不要继续。
Q2:教程里的参数和我的开发板不一样怎么办?
以你的开发板原理图和芯片手册为准。教程里的参数是示例,不是所有板子都完全相同。
Q3:遇到编译错误怎么办?
先看第一条 error,不要只看最后一行。很多后面的错误都是第一条错误引起的。
Q4:为什么要预留图片?
教程网页发布时可以把实际软件截图、接线图、波形图放到【此处配图】位置,读者会更容易跟着做。
十、总结
本教程的核心不是让你背概念,而是让你按步骤跑通一个真实小项目。新手学习嵌入式时,最重要的是 小步操作、及时验证、保留日志、逐项排查。
十一、温馨提示
如果你是第一次做 死机复位排查,请不要追求一次成功。嵌入式学习的正确节奏是:做一步、看现象、保存记录、再做下一步。只要你能把失败现象记录清楚,问题就已经解决了一半。