串口日志分析、通过日志定位简单问题
- 一、串口日志是什么
- 二、串口工具与接线
-
-
- [2.1 常用工具](#2.1 常用工具)
- [2.2 串口接线(必须正确,否则无日志/乱码)](#2.2 串口接线(必须正确,否则无日志/乱码))
- [2.3 串口参数(必须一致)](#2.3 串口参数(必须一致))
-
- 三、日志等级(一眼判断严重程度)
- 四、正常启动日志
-
-
- [4.1 正常日志示例(ESP32/STM32通用)](#4.1 正常日志示例(ESP32/STM32通用))
- [4.2 正常日志特征](#4.2 正常日志特征)
-
- 五、真实工作案例
-
- [案例1:设备反复自动重启 → 看门狗复位(最高发)](#案例1:设备反复自动重启 → 看门狗复位(最高发))
- 案例2:日志突然中断、设备死机(静默死机)
- 案例3:串口乱码(90%新手遇到)
- 案例4:WiFi连接失败(密码错误/认证超时)
- 案例5:文件系统损坏,开机失败
- [案例6:长期运行内存泄漏 → 越跑越卡最后死机](#案例6:长期运行内存泄漏 → 越跑越卡最后死机)
- [案例7:Hard Fault(硬件异常/指针错误)](#案例7:Hard Fault(硬件异常/指针错误))
- 案例8:欠压重启(电源硬件问题)
- 六、串口日志万能分析流程
- 七、总结
一、串口日志是什么
串口(UART)是嵌入式设备最基础、最稳定、最便宜 的调试接口。
设备上电、启动、初始化、运行、报错、死机、重启,所有底层行为都会打印串口日志。
测试工程师90%的问题都靠串口日志定位:
- 设备反复重启
- 开机失败
- WiFi/蓝牙连不上
- 运行越久越卡
- 死机无响应
- 乱码
- 文件系统损坏
二、串口工具与接线
2.1 常用工具
Windows:SSCOM、XCOM、串口调试助手
Linux/Mac:minicom、screen、SSCOM for Linux
下面用**SSCOM(最常用)**真实界面演示:

2.2 串口接线(必须正确,否则无日志/乱码)
USB转TTL → 设备
- GND ↔ GND(必须接!否则乱码)
- TX ↔ RX
- RX ↔ TX
- 5V/3.3V 不要接!会烧板
2.3 串口参数(必须一致)
- 波特率:115200(最常见),其次 9600、38400
- 数据位:8
- 停止位:1
- 校验位:None
- 流控:None

三、日志等级(一眼判断严重程度)
所有嵌入式日志都分等级:
| 等级 | 标识 | 含义 | 测试处理 |
|---|---|---|---|
| DEBUG | DEBUG | 调试信息,量产关闭 | 不用管 |
| INFO | INFO | 正常运行 | 正常 |
| WARN | WARN | 警告,潜在问题 | 必须记录 |
| ERROR | ERROR | 功能失败 | 严重,必须修 |
| FATAL | FATAL | 死机/崩溃 | 最高优先级 |
四、正常启动日志
4.1 正常日志示例(ESP32/STM32通用)

日志内容:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
[INFO] Bootloader V2.0.1 start
[INFO] Chip: ESP32-WROOM-32, 4MB Flash
[INFO] System clock: 240MHz
[INFO] UART init 115200 OK
[INFO] GPIO/I2C/SPI init OK
[INFO] WiFi init success
[INFO] BLE init success
[INFO] File system mount OK
[INFO] Main task started
[INFO] Heartbeat: 1
[INFO] Heartbeat: 2
4.2 正常日志特征
- 无 ERROR/WARN/FATAL
- 所有外设初始化 OK
- 持续打印 心跳(Heartbeat)
- 不会反复从头启动(无自动重启)
五、真实工作案例
案例1:设备反复自动重启 → 看门狗复位(最高发)
现象
运行几分钟自动重启,循环往复。
日志内容
[INFO] Heartbeat: 120
[INFO] I2C read sensor...
[FATAL] Watchdog Reset!
[INFO] Bootloader start...
分析
- Watchdog Reset = 看门狗超时复位
- 卡死在 I2C read sensor → 主线程卡住,没喂狗
原因
- I2C设备无应答,程序死等
- 长任务阻塞,喂狗代码没执行
解决
- I2C加超时机制
- 长循环里定期喂狗
案例2:日志突然中断、设备死机(静默死机)
现象
日志停住,按键/网络无响应,只能断电重启。
日志内容
[INFO] SPI Flash write start
[INFO] Write addr: 0x08000000
[INFO] Writing data...
<<< 日志停在这里,无输出 >>>
分析
- 卡在 SPI Flash write → SPI总线挂死
- 无报错、无重启 → 静默死机
原因
- Flash硬件损坏
- SPI时序错误
- 写Flash时未关中断导致死锁
解决
- 换Flash测试
- 加SPI读写超时
- 写Flash前关闭中断
案例3:串口乱码(90%新手遇到)
现象
全是乱码,看不到正常文字。

原因(按概率)
- 波特率不匹配(设备115200,工具9600)
- GND没接(干扰)
- 数据位/校验位不匹配
解决
- 波特率依次试:115200 → 9600 → 38400
- 固定 8N1
- 必须接 GND
案例4:WiFi连接失败(密码错误/认证超时)
现象
能搜到WiFi,但连不上。
日志内容
[INFO] WiFi scan OK, found 8 APs
[INFO] Connect SSID: OfficeWiFi
[ERROR] Password check fail
[ERROR] Auth timeout, disconnect
分析
- Password check fail → 密码错误
- Auth timeout → 路由器WPA3,设备只支持WPA2
解决
- 核对密码
- 路由器改为 WPA2-PSK
- 靠近路由器(RSSI > -70dBm)
案例5:文件系统损坏,开机失败
现象
反复开关机后,开机卡在启动界面,配置丢失。
日志内容
[INFO] Mount /fatfs...
[ERROR] FATFS mount failed
[WARN] Flash partition corrupted
[INFO] Enter recovery mode
分析
- FATFS mount failed → 文件系统挂载失败
- Flash partition corrupted → 分区损坏
原因
- 异常断电(写数据时突然掉电)
- Flash坏块
解决
- 格式化文件系统
- 重新烧录固件
- 增加掉电保护机制
案例6:长期运行内存泄漏 → 越跑越卡最后死机
现象
刚上电正常,几小时后卡顿,最后死机重启。
日志内容
[INFO] Malloc 1024 OK
[INFO] Malloc 1024 OK
...(重复上千次)
[ERROR] Malloc fail! No free RAM
[WARN] System memory: 99% used
分析
- Malloc fail → 内存耗尽
- 只 malloc 不 free → 内存泄漏
解决
- 找到未释放内存,加 free
- 改用静态数组,减少动态内存
案例7:Hard Fault(硬件异常/指针错误)
现象
突然崩溃重启,日志报 Hard Fault。
日志内容
Guru Meditation Error: Core 0 panic'ed (StoreProhibited)
PC: 0x400d1234, PS: 0x00060d30
Backtrace: 0x400d1234:0x3ffbe5a0
分析
- Hard Fault = 指针错误、栈溢出、非法访问内存
- C语言常见:野指针、数组越界、栈溢出
解决
- 查代码指针操作
- 增大栈大小
- 检查数组边界
案例8:欠压重启(电源硬件问题)
现象
一开继电器/电机就重启,空载正常。
日志内容
[FATAL] Brownout Reset: Voltage drop detected
System voltage: 2.9V, Threshold: 3.3V
分析
- Brownout Reset = 欠压复位
- 电源带载能力不足,硬件问题
解决
- 更换更大功率电源
- 增加电容滤波
六、串口日志万能分析流程
- 先找 ERROR/WARN/FATAL/Reset
- 定位报错前最后一行日志 → 问题就在这个模块
- 看时间戳 :
- 上电就错 → 初始化问题
- 运行一段时间错 → 内存/看门狗/稳定性
- 对比正常日志:差异点就是故障点
- 区分软硬件 :
- HardFault/Watchdog → 软件
- Brownout → 硬件电源
七、总结
-
Watchdog Reset 是什么?
看门狗超时复位,主线程卡死、没喂狗。
-
日志突然中断无报错?
SPI/I2C总线挂死,静默死机。
-
串口乱码先查什么?
波特率 → GND接线 → 数据位/校验位。
-
Hard Fault 原因?
野指针、数组越界、栈溢出。