寫嵌入式代碼只是第一步,調試才是決定項目能不能順利推進的關鍵。
MCU 不跑?外設不響應?代碼跑飛?
沒有合適的調試手段,排查問題就像摸黑找路。
本文帶你搞懂三大調試利器 ——JTAG、SWD、串口打印。不僅對比優(yōu)缺點,還提供實戰(zhàn)操作步驟 + 代碼示例,讓你學完就能上手。
一、JTAG —— 復雜系統(tǒng)的“放大鏡”
原理與特點
Keil/MDK 操作步驟
- 單步運行(F10/F11)
- 查看寄存器
- 內存監(jiān)視
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進入調試,支持斷點、變量觀察
代碼斷點示例
- intmain(void){
- HAL_Init();
- MX_GPIO_Init();
- intcounter=0;
- while(1){
- counter++;// 在這里設置斷點,調試時觀察 counter 值變化
- }
- }
小貼士:用 SWD 調試時,可以結合ITM/SWO 輸出,打印實時日志而不占用 UART。
三、串口打印 —— 最接地氣的調試方式
原理與特點
- UART 將變量、狀態(tài)輸出到上位機
- 本質:調試日志(printf 調試)
- 應用:邏輯驗證、狀態(tài)監(jiān)控、無調試器場景
實現(xiàn)步驟
- MCU 初始化 UART(波特率 115200 常見)
- 在fputc重定向printf
- 打開串口調試助手(SSC/Putty/Termite),選擇對應 COM 口
- 查看輸出調試日志
代碼示例
- #include"stdio.h"
- intfputc(intch,FILE*f){
- HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,HAL_MAX_DELAY);
- returnch;
- }
- intmain(void){
- HAL_Init();
- MX_USART1_UART_Init();
- intvalue=42;
- printf("Debug: value = %d\r\n",value);
- while(1){
- HAL_Delay(1000);
- printf("Loop running...\r\n");// 在串口助手中觀察輸出
- }
- }
小貼士:打印過多可能改變程序時序(海森堡效應),建議只保留關鍵日志。
四、三者對比表
| 調試方式 | 接口線數(shù) | 功能范圍 | 優(yōu)點 | 缺點 | 典型應用 |
|---|---|---|---|---|---|
| JTAG | 4~5 根 | 全面(斷點、寄存器、內存) | 功能齊全,標準化 | 引腳多,速度一般 | SoC、FPGA 調試 |
| SWD | 2 根 | MCU 調試 | 引腳少,速度快 | 僅限 Cortex-M | STM32、Cortex-M |
| 串口打印 | 2 根 | 程序流程、變量輸出 | 簡單直觀 | 占資源,功能有限 | 基礎邏輯調試 |
五、如何選擇?
- 開發(fā)初期邏輯驗證→ 串口打印
- 常規(guī) MCU 調試→ SWD
- 復雜系統(tǒng)/SoC/FPGA→ JTAG
最佳實踐:組合使用
- SWD 斷點調試
- 串口打印關鍵日志
- JTAG 處理復雜系統(tǒng)問題
總結
- JTAG功能最全,適合復雜系統(tǒng)
- SWD精簡高效,MCU 調試首選
- 串口打印簡單直接,快速驗證邏輯
熟練掌握并靈活組合三者,能讓你的調試效率飛躍提升,少走彎路。
-
JTAG
+關注
關注
6文章
411瀏覽量
74579 -
嵌入式開發(fā)
+關注
關注
18文章
1101瀏覽量
49823 -
SWD
+關注
關注
1文章
59瀏覽量
12563 -
串口打印
+關注
關注
0文章
11瀏覽量
3312
發(fā)布評論請先 登錄
嵌入式開發(fā)調試經(jīng)驗分享
嵌入式開發(fā)putty串口打印亂碼編碼格式問題
基于ARM的嵌入式開發(fā)
嵌入式開發(fā)
嵌入式軟件的打印調試信息的方法
嵌入式開發(fā)的產(chǎn)品有哪些_嵌入式開發(fā)的流程
下載調試接口SWD和JTAG的區(qū)別
嵌入式開發(fā)(一):嵌入式開發(fā)新手入門
嵌入式開發(fā)資料免費分享
嵌入式開發(fā)過程中的一點調試經(jīng)驗
嵌入式開發(fā)putty串口打印亂碼
嵌入式開發(fā)(一):嵌入式開發(fā)新手入門(轉載后續(xù)需要修改補充)

嵌入式開發(fā)調試神器全解析:JTAG、SWD、串口打印
評論