描述
写嵌入式代码只是第一步,调试才是决定项目能不能顺利推进的关键。
MCU 不跑?外设不响应?代码跑飞?
没有合适的调试手段,排查问题就像摸黑找路。
本文带你搞懂三大调试利器 —— JTAG、SWD、串口打印。不仅对比优缺点,还提供实战操作步骤 + 代码示例,让你学完就能上手。
一、JTAG —— 复杂系统的“放大镜”
原理与特点
- 接口:4~5 根信号线(TDI、TDO、TCK、TMS,可选 TRST)
- 功能:单步运行、断点、寄存器查看、内存读写
- 应用:Cortex-A、FPGA、复杂 SoC
Keil/MDK 操作步骤
- 接入 J-Link / ULINK 调试器
- 打开 Project → Options → Debug,选择 JTAG 调试
- 编译工程,点击 Download 烧写固件
- 按 F5 进入调试,支持:
OpenOCD 命令行示例
- openocd -f interface/jlink.cfg -f target/stm32f4x.cfg
进入 GDB 调试:
- arm-none-eabi-gdb build/firmware.elf
- (gdb) target remote localhost:3333
- (gdb) monitor reset halt
- (gdb) load
- (gdb)continue
小贴士:JTAG 引脚多,布线复杂,注意避免长线和交叉走线导致信号干扰。
二、SWD —— MCU 调试的首选
原理与特点
- 接口:2 根线(SWDIO、SWCLK)
- 功能:断点、寄存器访问、内存修改
- 应用:STM32、NXP、Nordic 等 Cortex-M
Keil/MDK 操作步骤
- 接入 ST-LINK
- Project → Options → Debug → ST-Link Debugger
- Utilities → 选择 Use ST-LINK 作为编程器
- 按 F5 进入调试,支持断点、变量观察
代码断点示例
- int main(void){
- HAL_Init();
- MX_GPIO_Init();
-
- int counter =0;
- while(1){
- counter++;// 在这里设置断点,调试时观察 counter 值变化
- }
- }
小贴士:用 SWD 调试时,可以结合 ITM/SWO 输出,打印实时日志而不占用 UART。
三、串口打印 —— 最接地气的调试方式
原理与特点
- UART 将变量、状态输出到上位机
- 本质:调试日志(printf 调试)
- 应用:逻辑验证、状态监控、无调试器场景
实现步骤
- MCU 初始化 UART(波特率 115200 常见)
- 在 fputc 重定向 printf
- 打开 串口调试助手(SSC/Putty/Termite),选择对应 COM 口
- 查看输出调试日志
代码示例
- #include"stdio.h"
-
- int fputc(int ch,FILE*f){
- HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1, HAL_MAX_DELAY);
- return ch;
- }
-
- int main(void){
- HAL_Init();
- MX_USART1_UART_Init();
-
- int value =42;
- printf("Debug: value = %d\r\n", value);
-
- while(1){
- HAL_Delay(1000);
- printf("Loop running...\r\n");// 在串口助手中观察输出
- }
- }
小贴士:打印过多可能改变程序时序(海森堡效应),建议只保留关键日志。
四、三者对比表
| 调试方式 | 接口线数 | 功能范围 | 优点 | 缺点 | 典型应用 |
|---|
| JTAG | 4~5 根 | 全面(断点、寄存器、内存) | 功能齐全,标准化 | 引脚多,速度一般 | SoC、FPGA 调试 |
| SWD | 2 根 | MCU 调试 | 引脚少,速度快 | 仅限 Cortex-M | STM32、Cortex-M |
| 串口打印 | 2 根 | 程序流程、变量输出 | 简单直观 | 占资源,功能有限 | 基础逻辑调试 |
五、如何选择?
- 开发初期逻辑验证 → 串口打印
- 常规 MCU 调试 → SWD
- 复杂系统/SoC/FPGA → JTAG
最佳实践:组合使用
- SWD 断点调试
- 串口打印关键日志
- JTAG 处理复杂系统问题
总结
- JTAG 功能最全,适合复杂系统
- SWD 精简高效,MCU 调试首选
- 串口打印 简单直接,快速验证逻辑
熟练掌握并灵活组合三者,能让你的调试效率飞跃提升,少走弯路。
打开APP阅读更多精彩内容