91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式開(kāi)發(fā)調(diào)試神器全解析:JTAG、SWD、串口打印

信盈達(dá) ? 2025-11-24 19:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式代碼只是第一步,調(diào)試才是決定項(xiàng)目能不能順利推進(jìn)的關(guān)鍵。

MCU 不跑?外設(shè)不響應(yīng)?代碼跑飛?

沒(méi)有合適的調(diào)試手段,排查問(wèn)題就像摸黑找路。

本文帶你搞懂三大調(diào)試?yán)?——JTAG、SWD、串口打印。不僅對(duì)比優(yōu)缺點(diǎn),還提供實(shí)戰(zhàn)操作步驟 + 代碼示例,讓你學(xué)完就能上手。

一、JTAG —— 復(fù)雜系統(tǒng)的“放大鏡”

原理與特點(diǎn)

  • 接口:4~5 根信號(hào)線(TDI、TDO、TCK、TMS,可選 TRST)
  • 功能:?jiǎn)尾竭\(yùn)行、斷點(diǎn)、寄存器查看、內(nèi)存讀寫
  • 應(yīng)用:Cortex-A、FPGA、復(fù)雜 SoC

Keil/MDK 操作步驟

  1. 接入 J-Link / ULINK 調(diào)試器
  2. 打開(kāi)Project → Options → Debug,選擇JTAG 調(diào)試
  3. 編譯工程,點(diǎn)擊Download燒寫固件
  4. 按F5進(jìn)入調(diào)試,支持:
  • 單步運(yùn)行(F10/F11)
  • 查看寄存器
  • 內(nèi)存監(jiān)視

OpenOCD 命令行示例

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

進(jìn)入 GDB 調(diào)試:

  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 引腳多,布線復(fù)雜,注意避免長(zhǎng)線和交叉走線導(dǎo)致信號(hào)干擾。

二、SWD —— MCU 調(diào)試的首選

原理與特點(diǎn)

  • 接口:2 根線(SWDIO、SWCLK)
  • 功能:斷點(diǎn)、寄存器訪問(wèn)、內(nèi)存修改
  • 應(yīng)用:STM32、NXP、Nordic 等 Cortex-M

Keil/MDK 操作步驟

  1. 接入 ST-LINK
  2. Project → Options → Debug → ST-Link Debugger
  3. Utilities → 選擇Use ST-LINK作為編程
  4. 按F5進(jìn)入調(diào)試,支持?jǐn)帱c(diǎn)、變量觀察

代碼斷點(diǎn)示例

  1. intmain(void){
  2. HAL_Init();
  3. MX_GPIO_Init();
  4. intcounter=0;
  5. while(1){
  6. counter++;// 在這里設(shè)置斷點(diǎn),調(diào)試時(shí)觀察 counter 值變化
  7. }
  8. }

小貼士:用 SWD 調(diào)試時(shí),可以結(jié)合ITM/SWO 輸出,打印實(shí)時(shí)日志而不占用 UART。

三、串口打印 —— 最接地氣的調(diào)試方式

原理與特點(diǎn)

  • UART 將變量、狀態(tài)輸出到上位機(jī)
  • 本質(zhì):調(diào)試日志(printf 調(diào)試)
  • 應(yīng)用:邏輯驗(yàn)證、狀態(tài)監(jiān)控、無(wú)調(diào)試器場(chǎng)景

實(shí)現(xiàn)步驟

  1. MCU 初始化 UART(波特率 115200 常見(jiàn))
  2. fputc重定向printf
  3. 打開(kāi)串口調(diào)試助手(SSC/Putty/Termite),選擇對(duì)應(yīng) COM 口
  4. 查看輸出調(diào)試日志

代碼示例

  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. }

小貼士:打印過(guò)多可能改變程序時(shí)序(海森堡效應(yīng)),建議只保留關(guān)鍵日志。

四、三者對(duì)比表

調(diào)試方式接口線數(shù)功能范圍優(yōu)點(diǎn)缺點(diǎn)典型應(yīng)用
JTAG4~5 根全面(斷點(diǎn)、寄存器、內(nèi)存)功能齊全,標(biāo)準(zhǔn)化引腳多,速度一般SoC、FPGA 調(diào)試
SWD2 根MCU 調(diào)試引腳少,速度快僅限 Cortex-MSTM32、Cortex-M
串口打印2 根程序流程、變量輸出簡(jiǎn)單直觀占資源,功能有限基礎(chǔ)邏輯調(diào)試

五、如何選擇?

  • 開(kāi)發(fā)初期邏輯驗(yàn)證→ 串口打印
  • 常規(guī) MCU 調(diào)試→ SWD
  • 復(fù)雜系統(tǒng)/SoC/FPGA→ JTAG

最佳實(shí)踐:組合使用

  • SWD 斷點(diǎn)調(diào)試
  • 串口打印關(guān)鍵日志
  • JTAG 處理復(fù)雜系統(tǒng)問(wèn)題

總結(jié)

  • JTAG功能最全,適合復(fù)雜系統(tǒng)
  • SWD精簡(jiǎn)高效,MCU 調(diào)試首選
  • 串口打印簡(jiǎn)單直接,快速驗(yàn)證邏輯

熟練掌握并靈活組合三者,能讓你的調(diào)試效率飛躍提升,少走彎路。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JTAG
    +關(guān)注

    關(guān)注

    6

    文章

    415

    瀏覽量

    74951
  • 嵌入式開(kāi)發(fā)

    關(guān)注

    18

    文章

    1145

    瀏覽量

    50110
  • SWD
    SWD
    +關(guān)注

    關(guān)注

    1

    文章

    60

    瀏覽量

    12644
  • 串口打印
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    3339
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式開(kāi)發(fā)調(diào)試經(jīng)驗(yàn)分享

    嵌入式開(kāi)發(fā)過(guò)程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)嵌入式開(kāi)發(fā)最麻煩的在現(xiàn)場(chǎng)調(diào)試過(guò)程中或?qū)嶋H運(yùn)營(yíng)過(guò)程中出現(xiàn)問(wèn)題很難定位。我在實(shí)際開(kāi)發(fā)過(guò)程中一點(diǎn)經(jīng)驗(yàn)分享給大家
    發(fā)表于 11-05 08:15

    嵌入式開(kāi)發(fā)putty串口打印亂碼編碼格式問(wèn)題

    目錄嵌入式開(kāi)發(fā)putty串口打印亂碼編碼格式問(wèn)題波特率設(shè)置錯(cuò)誤嵌入式開(kāi)發(fā)putty串口打印亂碼在
    發(fā)表于 11-05 09:10

    基于ARM的嵌入式開(kāi)發(fā)

    基于ARM的嵌入式開(kāi)發(fā):華清遠(yuǎn)見(jiàn)/孫天澤基于ARM的嵌入式開(kāi)發(fā)內(nèi)容有:ARM簡(jiǎn)介,基于ARM的嵌入式產(chǎn)品,ARM架構(gòu),基于ARM的嵌入式開(kāi)發(fā)。
    發(fā)表于 10-04 08:49 ?83次下載

    嵌入式JTAG調(diào)試方法步驟

    嵌入式JTAG調(diào)試方法步驟 嵌入式系統(tǒng)JTAG調(diào)試步驟1. 將PC與
    發(fā)表于 03-01 16:24 ?34次下載

    嵌入式開(kāi)發(fā)

    嵌入式開(kāi)發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),嵌入式Linux是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng)。這里提供了
    發(fā)表于 12-20 13:21
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>

    嵌入式軟件的打印調(diào)試信息的方法

    在我們的嵌入式開(kāi)發(fā)中,常常把printf重定向到MCU的串口外設(shè),再配合上位機(jī)界面軟件,通過(guò)打印調(diào)試信息的方式來(lái)調(diào)試我們的
    的頭像 發(fā)表于 04-04 17:35 ?4029次閱讀

    嵌入式開(kāi)發(fā)的產(chǎn)品有哪些_嵌入式開(kāi)發(fā)的流程

    本文主要闡述了嵌入式開(kāi)發(fā)的產(chǎn)品,其次介紹了嵌入式開(kāi)發(fā)的流程。
    發(fā)表于 08-31 15:38 ?1.2w次閱讀

    下載調(diào)試接口SWDJTAG的區(qū)別

    作為嵌入式工程師,下載調(diào)試器都應(yīng)該知道,但你真正了解其 SWDJTAG 接口的含義和區(qū)別嗎? 1、什么是下載調(diào)試器 簡(jiǎn)單來(lái)說(shuō),下載
    的頭像 發(fā)表于 11-28 11:44 ?5779次閱讀

    嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門

    嵌入式開(kāi)發(fā)環(huán)境及交叉編譯環(huán)境,開(kāi)發(fā)完成后,編譯得到bin文件,然后在Windows下將bin文件通過(guò)串口或網(wǎng)絡(luò)下發(fā)到嵌入式板卡,程序在嵌入式
    發(fā)表于 10-14 10:58 ?79次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>(一):<b class='flag-5'>嵌入式開(kāi)發(fā)</b>新手入門

    嵌入式開(kāi)發(fā)資料免費(fèi)分享

    嵌入式開(kāi)發(fā)資料免費(fèi)分享嵌入式工程師經(jīng)驗(yàn)分享:如何學(xué)習(xí)嵌入式開(kāi)發(fā)截取文檔部分學(xué)習(xí)嵌入式工程師經(jīng)驗(yàn)分享的資料分享給大家,文檔上從、嵌入式系統(tǒng)的概
    發(fā)表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>資料免費(fèi)分享

    嵌入式開(kāi)發(fā)過(guò)程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)

    嵌入式開(kāi)發(fā)過(guò)程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)嵌入式開(kāi)發(fā)最麻煩的在現(xiàn)場(chǎng)調(diào)試過(guò)程中或?qū)嶋H運(yùn)營(yíng)過(guò)程中出現(xiàn)問(wèn)題很難定位。我在實(shí)際開(kāi)發(fā)過(guò)程中一點(diǎn)經(jīng)驗(yàn)分享給大家
    發(fā)表于 11-02 18:06 ?15次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>過(guò)程中的一點(diǎn)<b class='flag-5'>調(diào)試</b>經(jīng)驗(yàn)

    嵌入式開(kāi)發(fā)putty串口打印亂碼

    目錄嵌入式開(kāi)發(fā)putty串口打印亂碼編碼格式問(wèn)題波特率設(shè)置錯(cuò)誤嵌入式開(kāi)發(fā)putty串口打印亂碼在
    發(fā)表于 11-02 18:21 ?12次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>putty<b class='flag-5'>串口</b><b class='flag-5'>打印</b>亂碼

    嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門(轉(zhuǎn)載后續(xù)需要修改補(bǔ)充)

    嵌入式開(kāi)發(fā)環(huán)境及交叉編譯環(huán)境,開(kāi)發(fā)完成后,編譯得到bin文件,然后在Windows下將bin文件通過(guò)串口或網(wǎng)絡(luò)下發(fā)到嵌入式板卡,程序在嵌入式
    發(fā)表于 11-02 20:06 ?17次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>(一):<b class='flag-5'>嵌入式開(kāi)發(fā)</b>新手入門(轉(zhuǎn)載后續(xù)需要修改補(bǔ)充)

    嵌入式開(kāi)發(fā)串口通訊方案

    嵌入式開(kāi)發(fā)中,經(jīng)常會(huì)用到串口通訊。面對(duì)不同應(yīng)用場(chǎng)景,需要不同的方案。
    的頭像 發(fā)表于 05-23 11:48 ?3231次閱讀

    jtag接口和swd接口區(qū)別

    jtag接口和swd接口區(qū)別 JTAG (Joint Test Action Group) 接口和 SWD (Serial Wire Debug) 接口是兩種用于
    的頭像 發(fā)表于 12-07 15:29 ?9159次閱讀