從零開始在家開發 IoT: OpenOCD 與 GDB 協作指南

OpenOCD 與 GDB 協作指南

適用環境:ARM Cortex-M(STM32U595)+ ST-Link,透過 SWD 連線。

本文說明 OpenOCD 是什麼、它與 GDB 如何分工、openocd.cfg 定義了哪些東西,以及在不同硬體變更下需要改寫或更換哪些部分。


1. OpenOCD 是什麼

OpenOCD(Open On-Chip Debugger)是一座。晶片上有除錯介面(SWD / JTAG),但 PC 上的工具(GDB)只會講網路 / socket,兩者語言不通,OpenOCD 夾在中間做翻譯:

  • 一邊透過 USB 跟除錯器硬體(ST-Link)溝通,由 ST-Link 去驅動晶片上的 SWD 接腳。
  • 另一邊在 PC 上開一個 GDB server (預設 TCP 3333)與命令埠(Telnet 4444),讓上層工具連進來下指令。

它能做的事:暫停 / 恢復 CPU、讀寫暫存器與記憶體、設中斷點、把韌體燒進 Flash、控制 reset 腳位。這些底層動作 GDB 自己做不到,全部委託 OpenOCD 執行。


2. OpenOCD 與 GDB 如何協作

關鍵協定是 GDB Remote Serial Protocol(RSP)。GDB 不直接操作目標,而是透過一個 TCP 連線,把「讀記憶體」「設中斷點」這類請求送給一個 gdb server,OpenOCD 正好扮演那個 server。

分工原則:

  • GDB 負責「人類面」 :讀 ELF 知道符號、行號、變數型別,把 C 原始碼對應到機器位址,提供 breakstepprint 等指令。
  • OpenOCD 負責「硬體面」:真正去摸晶片------透過 ST-Link 操作 SWD。

整條鏈與資料流:
#mermaid-svg-8lLlUibx2gxWGMAf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8lLlUibx2gxWGMAf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8lLlUibx2gxWGMAf .error-icon{fill:#552222;}#mermaid-svg-8lLlUibx2gxWGMAf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8lLlUibx2gxWGMAf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8lLlUibx2gxWGMAf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8lLlUibx2gxWGMAf .marker.cross{stroke:#333333;}#mermaid-svg-8lLlUibx2gxWGMAf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8lLlUibx2gxWGMAf p{margin:0;}#mermaid-svg-8lLlUibx2gxWGMAf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8lLlUibx2gxWGMAf .cluster-label text{fill:#333;}#mermaid-svg-8lLlUibx2gxWGMAf .cluster-label span{color:#333;}#mermaid-svg-8lLlUibx2gxWGMAf .cluster-label span p{background-color:transparent;}#mermaid-svg-8lLlUibx2gxWGMAf .label text,#mermaid-svg-8lLlUibx2gxWGMAf span{fill:#333;color:#333;}#mermaid-svg-8lLlUibx2gxWGMAf .node rect,#mermaid-svg-8lLlUibx2gxWGMAf .node circle,#mermaid-svg-8lLlUibx2gxWGMAf .node ellipse,#mermaid-svg-8lLlUibx2gxWGMAf .node polygon,#mermaid-svg-8lLlUibx2gxWGMAf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8lLlUibx2gxWGMAf .rough-node .label text,#mermaid-svg-8lLlUibx2gxWGMAf .node .label text,#mermaid-svg-8lLlUibx2gxWGMAf .image-shape .label,#mermaid-svg-8lLlUibx2gxWGMAf .icon-shape .label{text-anchor:middle;}#mermaid-svg-8lLlUibx2gxWGMAf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8lLlUibx2gxWGMAf .rough-node .label,#mermaid-svg-8lLlUibx2gxWGMAf .node .label,#mermaid-svg-8lLlUibx2gxWGMAf .image-shape .label,#mermaid-svg-8lLlUibx2gxWGMAf .icon-shape .label{text-align:center;}#mermaid-svg-8lLlUibx2gxWGMAf .node.clickable{cursor:pointer;}#mermaid-svg-8lLlUibx2gxWGMAf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8lLlUibx2gxWGMAf .arrowheadPath{fill:#333333;}#mermaid-svg-8lLlUibx2gxWGMAf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8lLlUibx2gxWGMAf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8lLlUibx2gxWGMAf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8lLlUibx2gxWGMAf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8lLlUibx2gxWGMAf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8lLlUibx2gxWGMAf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8lLlUibx2gxWGMAf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8lLlUibx2gxWGMAf .cluster text{fill:#333;}#mermaid-svg-8lLlUibx2gxWGMAf .cluster span{color:#333;}#mermaid-svg-8lLlUibx2gxWGMAf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8lLlUibx2gxWGMAf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8lLlUibx2gxWGMAf rect.text{fill:none;stroke-width:0;}#mermaid-svg-8lLlUibx2gxWGMAf .icon-shape,#mermaid-svg-8lLlUibx2gxWGMAf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8lLlUibx2gxWGMAf .icon-shape p,#mermaid-svg-8lLlUibx2gxWGMAf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8lLlUibx2gxWGMAf .icon-shape .label rect,#mermaid-svg-8lLlUibx2gxWGMAf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8lLlUibx2gxWGMAf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8lLlUibx2gxWGMAf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8lLlUibx2gxWGMAf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PC (Ubuntu / VMware)
TCP 3333 (RSP)
USB
SWD (SWDIO + SWCLK)
GDB

符號 / 行號 / 中斷點
OpenOCD

gdb server / 翻譯橋
ST-Link

除錯器硬體
STM32U595

CPU / Flash / RAM

重點:GDB 永遠不直接碰晶片。 它只跟 OpenOCD 講話,OpenOCD 才負責真正操作硬體。

monitor 前綴

在 GDB 裡,monitor 開頭的指令表示「這條 GDB 不處理,原封不動轉給 OpenOCD 執行」。因此 monitor resetmonitor reset haltmonitor flash ... 都是 OpenOCD 的原生指令。

典型連線流程

bash 复制代码
# 終端機 1:啟動 OpenOCD,讓它讀 cfg
openocd -f openocd.cfg

# 終端機 2:啟動 GDB,連到 OpenOCD 開的 3333 埠
arm-none-eabi-gdb your_firmware.elf
(gdb) target extended-remote :3333
(gdb) monitor reset halt     # 轉給 OpenOCD 執行
(gdb) load                   # 燒進 Flash(實際由 OpenOCD 執行)
(gdb) break main
(gdb) continue

3. openocd.cfg 定義了哪些東西

openocd.cfg 本質是一份 Tcl 腳本 (所以有 ifsetproc),OpenOCD 啟動時逐行執行。它只在乎三件核心事:用哪個除錯器、走哪個傳輸協定、目標是哪顆晶片。以下使用 STM32u5x 的 cfg 分段說明。

3.1 選定除錯器與通訊協定

tcl 复制代码
adapter driver hla
hla_layout stlink
hla_device_desc "STLINK"
hla_vid_pid 0x0483 0x374e 0x0483 0x3748
  • hla = High Level Adapter。ST-Link 內部已封裝好 SWD 低階時序,OpenOCD 只需下高階命令。
  • hla_vid_pid 是 USB 廠商 / 產品 ID(0x0483 = STMicroelectronics)。列兩組是為相容不同代的 ST-Link(0x374e / 0x3748)。
tcl 复制代码
if { [info exists SERIAL_NO] } {
   hla_serial $SERIAL_NO
}

當電腦上插了多台 ST-Link 時,用 -c "set SERIAL_NO xxxx" 指定特定序號那一台。info exists 是「此變數有被設定才執行」的可選機制,本檔反覆使用。

3.2 記憶體與傳輸層

tcl 复制代码
set WORKAREASIZE 0x30000
transport select "hla_swd"
set CHIPNAME stm32u595
source [find target/stm32u5x.cfg]
  • WORKAREASIZE(192 KB):晶片上可當「工作區」的 RAM。燒 Flash 時 OpenOCD 把燒錄演算法丟進這塊 RAM 由 CPU 自己跑,比逐字寫快得多。
  • transport select "hla_swd":選用 SWD(2 線),而非 JTAG。
  • set CHIPNAME:給目標取名。
  • source [find target/stm32u5x.cfg](最關鍵):載入官方 STM32U5 系列設定,定義真正的 target、CPU 核心(Cortex-M33)、Flash 驅動。本檔只是外層包裝,真正的晶片知識在這份官方 target 檔裡。

3.3 重置設定

tcl 复制代码
reset_config srst_only srst_nogate
  • srst_only:只用 System Reset 腳(NRST),不用 trst(SWD 用不到)。
  • srst_nogate:晶片被按在 reset 時,除錯介面仍可用------可在程式開跑前先連上、設中斷點。
tcl 复制代码
if { [info exists CONNECT_ASSERT_SRST]} {
    reset_config connect_assert_srst
}

救命用可選項:晶片因 option byte 設錯或程式跑飛而連不上時,用 -c "set CONNECT_ASSERT_SRST 1" 讓 OpenOCD 一連上就按住 reset,趁壞程式還沒跑時搶進去。

3.4 RTOS 與遠端除錯

tcl 复制代码
if { [info exists RTOS_FREERTOS]} {
    $_TARGETNAME configure -rtos FreeRTOS
}
bindto 0.0.0.0
  • RTOS 可選項:開啟後 GDB 能看到各 thread(thread-aware debugging)。
  • bindto 0.0.0.0:讓 server 監聽所有網卡,而非只 localhost。在 VMware 客體裡開發時若要從主機或他機連入 GDB server 即需此行(代價:對網路開放除錯埠,需注意安全)。

3.5 SWO / ITM 即時日誌

tcl 复制代码
proc enable_swo {CHIPNAME SWO_PORT} {
    $CHIPNAME.tpiu configure -protocol uart
    $CHIPNAME.tpiu configure -traceclk 160000000 -pin-freq 12000000
    $CHIPNAME.tpiu configure -output :$SWO_PORT
    $CHIPNAME.tpiu enable
    itm port 0 on
}
if { [info exists SWO_PORT] } {
    enable_swo $_CHIPNAME $SWO_PORT
}
  • SWO 是 Cortex-M 的單向輸出線,韌體可透過 ITM 高速吐 log,不佔用 UART。
  • traceclk 160000000:必須吻合實際核心時脈(160 MHz)。
  • -output :$SWO_PORT:把 trace 導到 TCP 埠,用 -c "set SWO_PORT xxxx" 啟用。

3.6 重置時的速度調整

tcl 复制代码
$_TARGETNAME configure -event reset-start { adapter speed 125 }
$_TARGETNAME configure -event reset-end   { adapter speed 4000 }

事件鉤子:reset 過程中時脈尚未穩定,降到 125 kHz 較可靠;reset 結束、時脈鎖定後拉到 4 MHz 全速,加快燒錄與除錯。


4. 何時需要改寫或更換 cfg

核心分界 :openocd.cfg 只描述「如何連上主控 IC、控制核心、燒 Flash」,完全不關心應用層 GPIO、外設晶片、SPI 走哪幾支腳------那些是韌體 / 板級的事。

4.1 決策流程

#mermaid-svg-wvRjRfzJYHeVn3B6{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wvRjRfzJYHeVn3B6 .error-icon{fill:#552222;}#mermaid-svg-wvRjRfzJYHeVn3B6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wvRjRfzJYHeVn3B6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .marker.cross{stroke:#333333;}#mermaid-svg-wvRjRfzJYHeVn3B6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wvRjRfzJYHeVn3B6 p{margin:0;}#mermaid-svg-wvRjRfzJYHeVn3B6 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .cluster-label text{fill:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .cluster-label span{color:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .cluster-label span p{background-color:transparent;}#mermaid-svg-wvRjRfzJYHeVn3B6 .label text,#mermaid-svg-wvRjRfzJYHeVn3B6 span{fill:#333;color:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .node rect,#mermaid-svg-wvRjRfzJYHeVn3B6 .node circle,#mermaid-svg-wvRjRfzJYHeVn3B6 .node ellipse,#mermaid-svg-wvRjRfzJYHeVn3B6 .node polygon,#mermaid-svg-wvRjRfzJYHeVn3B6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .rough-node .label text,#mermaid-svg-wvRjRfzJYHeVn3B6 .node .label text,#mermaid-svg-wvRjRfzJYHeVn3B6 .image-shape .label,#mermaid-svg-wvRjRfzJYHeVn3B6 .icon-shape .label{text-anchor:middle;}#mermaid-svg-wvRjRfzJYHeVn3B6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .rough-node .label,#mermaid-svg-wvRjRfzJYHeVn3B6 .node .label,#mermaid-svg-wvRjRfzJYHeVn3B6 .image-shape .label,#mermaid-svg-wvRjRfzJYHeVn3B6 .icon-shape .label{text-align:center;}#mermaid-svg-wvRjRfzJYHeVn3B6 .node.clickable{cursor:pointer;}#mermaid-svg-wvRjRfzJYHeVn3B6 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .arrowheadPath{fill:#333333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wvRjRfzJYHeVn3B6 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wvRjRfzJYHeVn3B6 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wvRjRfzJYHeVn3B6 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wvRjRfzJYHeVn3B6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .cluster text{fill:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 .cluster span{color:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wvRjRfzJYHeVn3B6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wvRjRfzJYHeVn3B6 rect.text{fill:none;stroke-width:0;}#mermaid-svg-wvRjRfzJYHeVn3B6 .icon-shape,#mermaid-svg-wvRjRfzJYHeVn3B6 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wvRjRfzJYHeVn3B6 .icon-shape p,#mermaid-svg-wvRjRfzJYHeVn3B6 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wvRjRfzJYHeVn3B6 .icon-shape .label rect,#mermaid-svg-wvRjRfzJYHeVn3B6 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wvRjRfzJYHeVn3B6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wvRjRfzJYHeVn3B6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wvRjRfzJYHeVn3B6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是

同 STM32 系列

不同型號
跨 STM32 系列
換廠商

(如 MediaTek)
硬體 / 配置改了什麼?
只改 GPIO 配置

或外接晶片?
cfg 不用改

(注意 SWO traceclk / NRST 拉線)
換不同的

主控 IC?
改 CHIPNAME

  • WORKAREASIZE
    改 source target 檔

  • WORKAREASIZE + traceclk
    重寫 cfg

或改用其他工具鏈

4.2 三種情況對照

cfg 區段 情況 1:同晶片改腳位 情況 2:換 STM32 型號 情況 3:換廠商 IC
adapter / hla_vid_pid(除錯器) 不動 不動(仍用 ST-Link) 多半要換或重寫
transport select hla_swd 不動 通常不動 看新晶片支援 SWD/JTAG
source target/stm32u5x.cfg 不動 同系列不動,跨系列必改 重寫或不適用
set CHIPNAME 不動 改 / 重寫
WORKAREASIZE 不動 依新 RAM 調整 重寫
reset_config srst 看板子 NRST 拉線 可能要調 重寫
SWO traceclk 若主頻變則要改 改成新核心頻率 重寫或不適用

4.3 各情況說明

情況 1 --- 同顆 STM32,改腳位: 應用層 GPIO 重新分配在韌體裡,OpenOCD 看不到,cfg 不用動。三個例外需注意:(a) 若主頻改變,SWO 的 traceclk 要跟著改;(b) 若韌體把 SWDIO/SWCLK(PA13/PA14)重設成一般 GPIO,會連不上;© 若某板子沒把 NRST 拉到除錯接頭,srst_only 重置會失效,要改走軟體重置。

情況 2 --- 換 STM32 型號: 同系列(如 U575→U595)通常只改 CHIPNAMEWORKAREASIZE,因為 stm32u5x.cfg 涵蓋整個家族。跨系列(如換到 H7 / F4 / L4)則必須換 source 的 target 檔(決定核心型號、Flash 驅動),並調 WORKAREASIZE、SWO traceclk。只要仍用 ST-Link 走 SWD,adapter / transport 那幾行不動。

情況 3 --- 換廠商 IC: 等於換生態系。若仍是 ARM Cortex-M MCU,OpenOCD 可能用得上,但 adapter 與 target 幾乎要重寫;若是跑 Linux 的應用處理器,通常不用 OpenOCD ,改用原廠 SDK / JTAG 工具或晶片上的 gdbserver。OpenOCD 不是萬用除錯器,它是繞著「ST-Link + ARM 核心」這個組合配置的。

4.4 多產品線維護建議

把 cfg 拆成共用基底 + 板級覆寫 :共用的 adapter / transport 放 base 檔,各產品線只用命令列 -c "set CHIPNAME ..."-c "set WORKAREASIZE ..." 或各自的小 include 檔覆寫差異。cfg 裡那些 if {[info exists ...]} 正是為此鋪好的路。


名詞速查

名詞 說明
OpenOCD 連接除錯器與上層工具的橋,提供 gdb server
GDB 除錯器前端,負責符號 / 中斷點 / 原始碼對應
RSP GDB Remote Serial Protocol,GDB 與 OpenOCD 之間的協定
SWD Serial Wire Debug,2 線除錯介面(SWDIO + SWCLK)
HLA High Level Adapter,ST-Link 這類已封裝低階時序的除錯器模式
SWO / ITM 單向 trace 輸出 / 韌體高速 log 機制
srst System Reset,硬體 reset 腳(NRST)
WORKAREASIZE 燒錄時暫借的晶片 RAM 大小
Tcl(Tool Command Language) 被設計成「嵌進別的程式裡當設定 / 命令語言」用的。很多工具自己不想從頭發明一套設定語法,就直接內建一個 Tcl 直譯器,讓設定檔可以有變數、條件判斷、迴圈、函式
相关推荐
czy878747510 小时前
vscode编译make命令要修改stm32cubemx生成的STM32F103XX_FLASH.ld文件
ide·vscode·stm32
优信电子12 小时前
STM32/C51驱动 DHTC11 温湿度传感器
stm32·单片机·嵌入式硬件·c51·温湿度传感器·dhtc11·环境测量
2zcode15 小时前
基于STM32的多功能万年历电子闹钟设计与实现
stm32·单片机·嵌入式硬件
0南城逆流015 小时前
【STM32】RTT-Studio中HAL库开发教程十四:MSMART串口组件
stm32·单片机·嵌入式硬件
小慧102415 小时前
STM 32 TIM定时器(2)
stm32·单片机
无痕幽雨16 小时前
STM32实现MQTT及JSON包思路二
stm32·单片机·嵌入式硬件
風清掦16 小时前
【STM32学习笔记-14】WDG看门狗 - 14.2 WWDG窗口看门狗
笔记·stm32·单片机·嵌入式硬件·学习·fpga开发
m0_3771081418 小时前
stm32-SPI
stm32·单片机·嵌入式硬件
普中科技21 小时前
【普中STM32F1xx开发攻略--标准库版】-- 第 40 章 FSMC-TFTLCD 显示实验
stm32·单片机·嵌入式硬件·fsmc·开发板·tftlcd·普中科技