1. 调试基础与环境搭建:常用调试工具介绍(JTAG/SWD)、IDE调试环境配置(Keil/IAR)、调试器与目标板连接

调试,说白了就是给嵌入式系统「看病」。你写好了代码,下载到板子上,结果灯不亮、电机不转、串口没输出——这时候就得靠调试工具来「问诊」了。

我个人习惯,拿到一个新项目,第一件事不是写代码,而是先把调试环境搭稳。环境没搭好,后面出了问题你都不知道是代码的锅还是工具的锅。

1.1 调试接口:JTAG 与 SWD

调试器和目标板之间怎么通信?目前主流就两种:JTAG 和 SWD。

特性 JTAG SWD
引脚数 5 根(TMS、TCK、TDI、TDO、nTRST) 2 根(SWDIO、SWCLK)
速度 最高可达几十 MHz 与 JTAG 相当,略低
调试能力 支持边界扫描,可测试 PCB 互联 仅支持调试功能
硬件占用 占用引脚多,适合大型 FPGA/CPLD 引脚少,适合 MCU
主流调试器 J-Link、ST-Link、ULINK J-Link、ST-Link、DAP-Link

你想想看,现在的 MCU 封装越来越小,引脚越来越金贵。SWD 只用两根线就能搞定调试,省下来的引脚可以接传感器、控制外设,何乐而不为?

我的经验: 除非你需要用边界扫描做 PCB 测试,否则 SWD 是更优选择。我在一个 STM32F103 项目上,硬是把 JTAG 的 5 根线改成了 SWD 的 2 根线,省出来的 3 个 GPIO 刚好接了一个 I²C 屏幕。

1.2 调试器选型与连接

调试器就是电脑和目标板之间的「翻译官」。常见的调试器有 J-Link、ST-Link、DAP-Link、ULINK 等。选哪个?看你的芯片和预算。

  • J-Link:SEGGER 出品,兼容性最好,速度最快。支持几乎所有 ARM Cortex 内核芯片。我手头常备一个 J-Link Plus,用了五年没出过问题。
  • ST-Link:ST 官方调试器,专为 STM32 系列优化。便宜,但只支持 ST 芯片。
  • DAP-Link:ARM 官方开源方案,成本极低,适合批量产线使用。
  • ULINK:Keil 官方调试器,与 MDK 集成度最高,但价格偏高。

连接调试器和目标板时,有几点要特别注意:

  1. 接线顺序:先接 GND,再接 SWDIO/SWCLK,最后接 VCC(如果调试器需要供电)。
  2. 线长控制:SWD 信号线不要超过 20cm,否则高速通信时容易出错。
  3. 上拉电阻:SWDIO 和 SWCLK 引脚通常需要 10kΩ 上拉电阻,部分调试器内置了,但有些没有。
我曾经踩过的坑: 有一次调试一块新板子,J-Link 死活连不上。折腾了半天,最后发现是 SWD 线太长(大概 30cm),信号衰减导致通信不稳定。换成 10cm 的杜邦线,一次就识别了。所以,线越短越好,别图省事。

1.3 IDE 调试环境配置(Keil / IAR)

环境配置是新手最容易卡住的地方。我见过太多人花了一整天装软件、配驱动,结果还是连不上调试器。其实步骤很简单,按顺序来就行。

Keil MDK 配置步骤

  1. 安装 Keil MDK 和对应芯片的 Pack 包(如 STM32F1xx_DFP)。
  2. 连接调试器到电脑,安装驱动(J-Link 驱动或 ST-Link 驱动)。
  3. 打开工程,点击 Project → Options for Target → Debug。
  4. 在「Use」下拉框中选择对应的调试器(如 J-Link / J-TRACE Cortex)。
  5. 点击 Settings,确认调试器已识别,SWD 模式,速度建议先选 1MHz(稳定后再调高)。
  6. 切换到 Flash Download 标签,勾选「Reset and Run」,这样下载完程序后芯片自动运行。

IAR EWARM 配置步骤

  1. 安装 IAR Embedded Workbench for ARM。
  2. 打开工程,右键项目名 → Options → Debugger。
  3. 在「Setup」标签的「Driver」下拉框中选择调试器(如 J-Link/J-Trace)。
  4. 点击 Download 标签,勾选「Use flash loader(s)」和「Override default.board file」。
  5. 回到 Debugger → J-Link/J-Trace → Connection,选择 SWD 接口,速度建议 1MHz。
关键检查点: 配置完成后,点击「OK」保存。然后按 Ctrl+F5(Keil)或 Ctrl+D(IAR)进入调试模式。如果看到汇编窗口或反汇编窗口,说明连接成功。如果弹出错误提示,八成是驱动没装好或接线有问题。

1.4 调试器与目标板连接实战

理论说完了,咱们来点实际的。下面是一个标准的 SWD 连接示意图:

SWD 调试连接示意图 调试器 J-Link / ST-Link USB 连接电脑 目标板 MCU (STM32/其他) SWD 接口 SWDIO (数据) SWCLK (时钟) GND (地) 连接注意事项 1. 先接 GND,再接 SWDIO/SWCLK,最后接 VCC(可选) 2. 信号线长度 ≤ 20cm,建议使用屏蔽线或双绞线 3. 如果调试器不供电,目标板需独立供电

实际连接时,我一般会准备一个 4 针的杜邦线排插,把 SWDIO、SWCLK、GND、VCC 分别标好颜色。红色 VCC、黑色 GND、黄色 SWCLK、白色 SWDIO——这是我的习惯,你也可以按自己的来,但一定要统一,不然接错线烧了芯片就麻烦了。

警告: 千万不要在目标板上电的情况下插拔调试器!我有个同事,为了省事,带电插拔了一次,结果调试器的 SWDIO 引脚直接烧了。正确的做法是:先断开目标板电源,插好调试器,再上电。

1.5 常见连接故障排查

环境搭好了,调试器也连上了,但 IDE 就是识别不到芯片。别急,按下面的清单排查:

  • 驱动问题:打开设备管理器,看调试器是否出现在「通用串行总线设备」或「J-Link」条目下。如果有个黄色感叹号,重装驱动。
  • 接线问题:用万用表量一下 SWDIO 和 SWCLK 到 MCU 引脚的连通性。我遇到过杜邦线内部断了的奇葩情况。
  • 供电问题:目标板必须独立供电,或者调试器提供 3.3V 输出。电压不够,芯片不工作。
  • 复位问题:部分芯片需要外部复位电路。如果 nRST 引脚悬空,调试器可能无法连接。
  • SWD 引脚复用:有些芯片的 SWD 引脚默认被 GPIO 或其他功能占用了。需要检查芯片的 Option Bytes 或 Boot 配置。
我的排查习惯: 先用 J-Link Commander(命令行工具)测试连接。输入 connect 命令,如果能看到芯片 ID,说明硬件没问题,问题出在 IDE 配置上。如果连 ID 都读不到,那肯定是硬件或接线的问题。

嗯,调试基础这部分就这些。环境搭好了,后面才能安心做断点、看变量、分析堆栈。别嫌麻烦,前期多花十分钟把环境搞稳,后面能省下几个小时甚至几天的时间。