0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式开发调试神器全解析:JTAG、SWD、串口打印

信盈达 2025-11-24 19:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式代码只是第一步,调试才是决定项目能不能顺利推进的关键。

MCU 不跑?外设不响应?代码跑飞?

没有合适的调试手段,排查问题就像摸黑找路。

本文带你搞懂三大调试利器 ——JTAG、SWD、串口打印。不仅对比优缺点,还提供实战操作步骤 + 代码示例,让你学完就能上手。

一、JTAG —— 复杂系统的“放大镜”

原理与特点

  • 接口:4~5 根信号线(TDI、TDO、TCK、TMS,可选 TRST)
  • 功能:单步运行、断点、寄存器查看、内存读写
  • 应用:Cortex-A、FPGA、复杂 SoC

Keil/MDK 操作步骤

  1. 接入 J-Link / ULINK 调试器
  2. 打开Project → Options → Debug,选择JTAG 调试
  3. 编译工程,点击Download烧写固件
  4. 按F5进入调试,支持:
  • 单步运行(F10/F11)
  • 查看寄存器
  • 内存监视

OpenOCD 命令行示例

  1. openocd-f interface/jlink.cfg-f target/stm32f4x.cfg

进入 GDB 调试:

  1. arm-none-eabi-gdb build/firmware.elf
  2. (gdb)target remote localhost:3333
  3. (gdb)monitor reset halt
  4. (gdb)load
  5. (gdb)continue

小贴士:JTAG 引脚多,布线复杂,注意避免长线和交叉走线导致信号干扰。

二、SWD —— MCU 调试的首选

原理与特点

  • 接口:2 根线(SWDIO、SWCLK)
  • 功能:断点、寄存器访问、内存修改
  • 应用:STM32、NXP、Nordic 等 Cortex-M

Keil/MDK 操作步骤

  1. 接入 ST-LINK
  2. Project → Options → Debug → ST-Link Debugger
  3. Utilities → 选择Use ST-LINK作为编程
  4. 按F5进入调试,支持断点、变量观察

代码断点示例

  1. intmain(void){
  2. HAL_Init();
  3. MX_GPIO_Init();
  4. intcounter=0;
  5. while(1){
  6. counter++;// 在这里设置断点,调试时观察 counter 值变化
  7. }
  8. }

小贴士:用 SWD 调试时,可以结合ITM/SWO 输出,打印实时日志而不占用 UART

三、串口打印 —— 最接地气的调试方式

原理与特点

  • UART 将变量、状态输出到上位机
  • 本质:调试日志(printf 调试)
  • 应用:逻辑验证、状态监控、无调试器场景

实现步骤

  1. MCU 初始化 UART(波特率 115200 常见)
  2. fputc重定向printf
  3. 打开串口调试助手(SSC/Putty/Termite),选择对应 COM 口
  4. 查看输出调试日志

代码示例

  1. #include"stdio.h"
  2. intfputc(intch,FILE*f){
  3. HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,HAL_MAX_DELAY);
  4. returnch;
  5. }
  6. intmain(void){
  7. HAL_Init();
  8. MX_USART1_UART_Init();
  9. intvalue=42;
  10. printf("Debug: value = %d\r\n",value);
  11. while(1){
  12. HAL_Delay(1000);
  13. printf("Loop running...\r\n");// 在串口助手中观察输出
  14. }
  15. }

小贴士:打印过多可能改变程序时序(海森堡效应),建议只保留关键日志。

四、三者对比表

调试方式接口线数功能范围优点缺点典型应用
JTAG4~5 根全面(断点、寄存器、内存)功能齐全,标准化引脚多,速度一般SoC、FPGA 调试
SWD2 根MCU 调试引脚少,速度快仅限 Cortex-MSTM32、Cortex-M
串口打印2 根程序流程、变量输出简单直观占资源,功能有限基础逻辑调试

五、如何选择?

  • 开发初期逻辑验证→ 串口打印
  • 常规 MCU 调试→ SWD
  • 复杂系统/SoC/FPGA→ JTAG

最佳实践:组合使用

  • SWD 断点调试
  • 串口打印关键日志
  • JTAG 处理复杂系统问题

总结

  • JTAG功能最全,适合复杂系统
  • SWD精简高效,MCU 调试首选
  • 串口打印简单直接,快速验证逻辑

熟练掌握并灵活组合三者,能让你的调试效率飞跃提升,少走弯路。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JTAG
    +关注

    关注

    6

    文章

    411

    浏览量

    74622
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1103

    浏览量

    49853
  • SWD
    SWD
    +关注

    关注

    1

    文章

    59

    浏览量

    12576
  • 串口打印
    +关注

    关注

    0

    文章

    11

    浏览量

    3312
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式开发调试经验分享

    嵌入式开发过程中的一点调试经验嵌入式开发最麻烦的在现场调试过程中或实际运营过程中出现问题很难定位。我在实际开发过程中一点经验分享给大家
    发表于 11-05 08:15

    嵌入式开发putty串口打印乱码编码格式问题

    目录嵌入式开发putty串口打印乱码编码格式问题波特率设置错误嵌入式开发putty串口打印乱码在
    发表于 11-05 09:10

    基于ARM的嵌入式开发

    基于ARM的嵌入式开发:华清远见/孙天泽基于ARM的嵌入式开发内容有:ARM简介,基于ARM的嵌入式产品,ARM架构,基于ARM的嵌入式开发
    发表于 10-04 08:49 83次下载

    嵌入式JTAG调试方法步骤

    嵌入式JTAG调试方法步骤 嵌入式系统JTAG调试步骤1. 将PC与
    发表于 03-01 16:24 34次下载

    嵌入式开发

    嵌入式开发就是指在嵌入式操作系统下进行开发嵌入式Linux是以Linux为基础的嵌入式作业系统。这里提供了
    发表于 12-20 13:21
    <b class='flag-5'>嵌入式开发</b>

    嵌入式软件的打印调试信息的方法

    在我们的嵌入式开发中,常常把printf重定向到MCU的串口外设,再配合上位机界面软件,通过打印调试信息的方式来调试我们的
    的头像 发表于 04-04 17:35 3831次阅读

    嵌入式开发的产品有哪些_嵌入式开发的流程

    本文主要阐述了嵌入式开发的产品,其次介绍了嵌入式开发的流程。
    发表于 08-31 15:38 1.2w次阅读

    下载调试接口SWDJTAG的区别

    作为嵌入式工程师,下载调试器都应该知道,但你真正了解其 SWDJTAG 接口的含义和区别吗? 1、什么是下载调试器 简单来说,下载
    的头像 发表于 11-28 11:44 5528次阅读

    嵌入式开发(一):嵌入式开发新手入门

    嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到嵌入式板卡,程序在嵌入式
    发表于 10-14 10:58 79次下载
    <b class='flag-5'>嵌入式开发</b>(一):<b class='flag-5'>嵌入式开发</b>新手入门

    嵌入式开发资料免费分享

    嵌入式开发资料免费分享嵌入式工程师经验分享:如何学习嵌入式开发截取文档部分学习嵌入式工程师经验分享的资料分享给大家,文档上从、嵌入式系统的概
    发表于 10-21 11:07 47次下载
    <b class='flag-5'>嵌入式开发</b>资料免费分享

    嵌入式开发过程中的一点调试经验

    嵌入式开发过程中的一点调试经验嵌入式开发最麻烦的在现场调试过程中或实际运营过程中出现问题很难定位。我在实际开发过程中一点经验分享给大家
    发表于 11-02 18:06 15次下载
    <b class='flag-5'>嵌入式开发</b>过程中的一点<b class='flag-5'>调试</b>经验

    嵌入式开发putty串口打印乱码

    目录嵌入式开发putty串口打印乱码编码格式问题波特率设置错误嵌入式开发putty串口打印乱码在
    发表于 11-02 18:21 12次下载
    <b class='flag-5'>嵌入式开发</b>putty<b class='flag-5'>串口</b><b class='flag-5'>打印</b>乱码

    嵌入式开发(一):嵌入式开发新手入门(转载后续需要修改补充)

    嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到嵌入式板卡,程序在嵌入式
    发表于 11-02 20:06 17次下载
    <b class='flag-5'>嵌入式开发</b>(一):<b class='flag-5'>嵌入式开发</b>新手入门(转载后续需要修改补充)

    嵌入式开发串口通讯方案

    嵌入式开发中,经常会用到串口通讯。面对不同应用场景,需要不同的方案。
    的头像 发表于 05-23 11:48 3028次阅读

    jtag接口和swd接口区别

    jtag接口和swd接口区别 JTAG (Joint Test Action Group) 接口和 SWD (Serial Wire Debug) 接口是两种用于
    的头像 发表于 12-07 15:29 8768次阅读