本教程默认你是零基础新手,会尽量把每一步写清楚。你可以一边看一边操作,不需要先掌握完整理论。

一、教程简介

本教程讲解 死机复位排查。教程按零基础方式编写,每一步都尽量说明“为什么做、在哪里点、做完看什么现象”。

【此处配图:死机复位排查 整体流程图】

二、目录导航

  1. 前置准备
  2. 基础概念说明
  3. 详细步骤
  4. 参数设置说明
  5. 注意事项和避坑要点
  6. 新手易错点
  7. 常见问题 FAQ
  8. 总结
  9. 温馨提示

三、前置准备

你需要准备:

ext 串口日志、调试器、示波器、能复现问题的设备

建议先创建一个单独的工程文件夹,把资料、代码、截图和调试日志都放进去。这样后面排查问题不会乱。

四、基础概念说明

在正式操作前,先记住三个原则:

  1. 先跑通最小功能:不要一开始就加很多复杂功能。
  2. 每一步都要验证现象:能编译、能下载、能输出日志,才继续下一步。
  3. 遇到错误先看日志:不要凭感觉改代码。

五、详细步骤

步骤 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
超时时间外设通信必须设置超时

七、注意事项和避坑要点

  1. 不要跳步骤:嵌入式调试最怕前面没跑通,后面越改越乱。
  2. 保留日志:每次失败都保存错误信息。
  3. 先确认硬件:接线、供电、下载器、串口工具都要检查。
  4. 不要把真实密钥提交到仓库:涉及云平台或 Wi-Fi 密码时尤其注意。
  5. 修改前先备份:新手建议每完成一小步就提交一次 Git。

八、新手易错点

  1. 工程路径包含中文或空格。
  2. 参数照抄但没有根据自己的芯片或开发板修改。
  3. 编译失败还继续下载。
  4. 串口线 TX/RX 接反。
  5. 忘记看开发板供电电压。

九、常见问题 FAQ

Q1:我完全没有基础,可以直接做吗?

可以。你只需要按步骤操作,每一步完成后确认现象。如果某一步失败,先不要继续。

Q2:教程里的参数和我的开发板不一样怎么办?

以你的开发板原理图和芯片手册为准。教程里的参数是示例,不是所有板子都完全相同。

Q3:遇到编译错误怎么办?

先看第一条 error,不要只看最后一行。很多后面的错误都是第一条错误引起的。

Q4:为什么要预留图片?

教程网页发布时可以把实际软件截图、接线图、波形图放到【此处配图】位置,读者会更容易跟着做。

十、总结

本教程的核心不是让你背概念,而是让你按步骤跑通一个真实小项目。新手学习嵌入式时,最重要的是 小步操作、及时验证、保留日志、逐项排查

十一、温馨提示

如果你是第一次做 死机复位排查,请不要追求一次成功。嵌入式学习的正确节奏是:做一步、看现象、保存记录、再做下一步。只要你能把失败现象记录清楚,问题就已经解决了一半。