微控制器调试中常见的硬件和软件陷阱
微控制器固件冻结:心跳 LED 停止闪烁,UART 控制台无响应。经典症状。别慌——系统地检查堆栈跟踪、日志和外设。罪魁祸首往往是简单问题:连接器里的杂物、引脚冲突或配置错误。
硬件陷阱:从杂物到焊接失误
Telematics 板卡为 CAN 网络开发:汽车无法启动,启动电机空转无用。三小时诊断——故障源于 OBD-II 连接器:一片金属箔屑短路了三个引脚。清除杂物后问题解决。
密集板卡布局使用 Tag-Connect:编程连接器因旁边的 Traco Power 稳压器而无法访问。夹子无法扣紧——手指够不着。解决办法:找手指细的同事帮忙,或重新设计布局。
USB 供电闪烁并断开。排除 BLE/UWB 导致的电压下垂嫌疑。罪魁祸首:故障的 USB-A 插座——完全插入时失去接触,拉出半毫米就能工作。教训:坚持使用高质量线缆和连接器。
SWD 连接通过转台滑环使用 90 厘米长缆线时掉线。数据包无法通过。短的 12 厘米缆线正常工作。最后用飞线编程板卡。
引脚冲突与调试
JTAG/SWD 无法启动:'No device found'。固件批量脚本要求通过 STM32 ST-LINK Utility 手动复位。原因:PA13 (TMS/SWDIO) 上的 LED。SWD 引脚 (PA13, PA14) 不能用作 GPIO。将 LED 移到 PA15 后调试恢复。
带 FC7300 的板卡:J-Link 显示橙色(复位状态),J-Flash 报告 'Could not download file'。MCU 回流无济于事。临时修复:更换 USB 端口或编程器。
MCU 配置与引导加载器
CC26x2 断电重启后挂起,尽管在调试器下正常工作。原因:最后 Flash 页的客户配置扇区未写入。对于 TI CC26x4,先用 SmartFR Flash Programmer 2 刷入 blinky_backdoor_select_btn26x2.bin,然后刷自己的固件。
STM32F413ZGJ6 引导加载器无法跳转到应用:向量表中的 MSP 检查超过 128 kB。MCU 有 320 kB RAM,但引导加载器是为 STM32F205VC 构建的。Cortex-M4/M3 兼容性掩盖了这个 bug 五年之久。
静电与可靠性
为期一周的测试:RAM 中的日志被触摸时产生的 ESD 火花擦除。解决:用 NVRAM 或 SD 卡存日志。
音频与外设
来自 BT1026 (Bluetooth Classic) 的 I2S:在 nRF5340 上声音沙哑。WS 为 50 kHz,但 FSC-BT1026C 模块采样率仅到 48 kHz——零值导致沙哑。修复:让 BT1026 作 I2S 主设备。
电路设计失误
忘了给 MCU 上电——一根废线修好了。或者 Ethernet PHY 晶振用 23 MHz 而非 25 MHz:自动协商失败。Olimex-STM32-H407:固件中晶振 12 MHz 而非 25 MHz,导致 UART 乱码。
SPI-NAND W25M02GV 原型:侧边引脚在洞洞板上短路了热垫。回流到绿色 PCB 后修复。
VNQ7E100AJ 高侧驱动器:开路负载时假电流读数 (V_SENSEH 上拉)。ADC 误判为过载。ECU 修订版换芯片。
FPU 与库错误
Cortex-M33 上的 snprintf() 因浮点格式化时的 FPU 问题崩溃到 Default Handler。
关键经验
- 在将 SWD/JTAG 引脚指定为 GPIO 前先检查。
- 刷自定义固件前配置好 TI MCU 客户扇区。
- 日志使用 ESD 保护和 NVRAM。
- 原型验证晶振和连接器。
- 仔细读数据手册:开路检测等特性可防假触发。
— Editorial Team
暂无评论。