DAPLink
2026-10-19
简介

DAPLink
立创·地阔星STM32F103C8T6开发板 + 双串口扩展底板
- 基于STM32F103C8实现的DAPLink调试器。
- 支持HID和WinUSB两种协议。
- 支持SWO打印和RTT打印。
- 支持JTAG和SWD两种调试方式。
- 支持两路CDC串口,搭配底板可使用232/485进行通信,并引出TTL信号。
- 上电自动枚举USB2.0,无单独引脚用于枚举。
硬件
- 核心板: 闲置的立创·地阔星STM32F103C8T6开发板
- 底板: LCEDA设计仅作为232/485功能扩展及type-A接口扩展,非必须
- 源码及镜像: https://github.com/blog-xiaopj/DAPLink
软件框架
工程采用 VSCode + CMake + OpenOCD 开发,详情参考环境搭建 工程搭建
- 标准库: STSW-STM32054
- 操作系统: FreeRTOS v11.3.0
- USB协议栈: CherryUSB
- 调试协议: CMSIS-DAP
调试口
| 功能 | 引脚 |
|---|---|
| SWDIO / TMS | PA4 |
| SWCLK / TCK | PA5 |
| JTDO | PA6 |
| TDI | PA7 |
| SWO(USART1_RX) | PA10 |
| nTRST | PA1(开漏,低有效) |
| nRESET | PB9(开漏,低有效) |
| LED | PC13 |
底板上短接 PA6(JTDO) 与 PA10(SWO),再接到调试座 TDO/SWO(ST-Link 式)。两脚必须保持输入,禁止配成输出。
虚拟串口(探针)
| CDC | 外设 | 引脚 |
|---|---|---|
| UART1 RS232 | USART2 | PA2 TX / PA3 RX |
| UART2 RS485 | USART3 | PB10 TX / PB11 RX |
三套固件
CMake BOARD_TYPE | 目录 | 用途 |
|---|---|---|
DAP_HID | Application/DAP_HID | 探针:HID + 两路 CDC + SWO |
DAP_WINUSB | Application/DAP_WINUSB | 探针:WinUSB + 两路 CDC + SWO |
RTT | Application/RTT | 目标板:LED + RTT / SWO / USART2 |
不要混烧:HID/WinUSB 烧到当调试器的那块板,RTT 烧到被调试的目标板。
VS Code 任务
生成 / 编译
| 任务 | 作用 |
|---|---|
cmake dap_hid | 生成 DAP HID 工程 |
cmake dap_winusb | 生成 DAP WinUSB 工程 |
cmake rtt | 生成目标演示工程 |
make | 编译当前 build/(默认构建) |
rebuild dap_hid | 清目录 + cmake HID + make |
rebuild dap_winusb | 清目录 + cmake WinUSB + make |
rebuild rtt | 清目录 + cmake RTT + make |
rebuild * 会先 clean 整个 build/,再生成对应工程。切换 HID / WinUSB / RTT 时用 rebuild,不要只 make。
下载
| 任务 | 作用 |
|---|---|
download by stlink-dap | 用 ST-Link 烧本板(写探针固件时用) |
download by cmsis-dap | 用 CMSIS-DAP 烧目标(探针已当调试器之后) |
均烧写 build/firmware.bin → 0x08000000,并依赖 make。适配器脚本在 script/stlink-dap.cfg、script/cmsis-dap.cfg、script/jlink.cfg。
日志(旁路,不复位)
| 任务 | 作用 |
|---|---|
rtt | 连 127.0.0.1:9090,打印 RTT 通道 0 |
swo | 连 127.0.0.1:9091,解码 ITM port 0 |
launch.json 里 Cortex-Debug 的 rttConfig / swoConfig 默认关掉,避免调试启动时抢 OpenOCD。需要日志时单独跑上面两个任务。
Cortex-Debug 配置走 script/cmsis-dap.cfg(默认 SWD)。
命令行
依赖:arm-none-eabi-gcc、CMake ≥ 3.17、MinGW Make、OpenOCD。
mkdir build && cd build
cmake -G "MinGW Makefiles" .. -DBOARD_TYPE=DAP_HID
make -jBOARD_TYPE 还可为 DAP_WINUSB 或 RTT。
典型流程
rebuild dap_hid(或dap_winusb)→download by stlink-dap,把探针变成 CMSIS-DAP。rebuild rtt→download by cmsis-dap,给目标烧演示固件。- 目标跑起来后执行任务
rtt或swo看打印。
目标日志(BOARD_TYPE=RTT)
Application/RTT/main.c:
#define PRINT_SWO 1
#define PRINT_RTT 1
#define PRINT_UART 1| 通道 | 目标引脚 | 说明 |
|---|---|---|
| RTT | 无额外脚 | 读 SRAM,SWD / JTAG 都可以 |
| SWO | PB3 | 仅 SWD;swo_init() 会关 JTAG 以释放 PB3 |
| UART | PA2 TX / PA3 RX | 115200 8N1;RX 会打成 RX: ... |
SWO 接线:目标 PB3 → 探针 PA10,共地。波特率须与固件一致(默认 1 MHz):
SWO_BAUDRATE_HZscript/swo.cfg的-pin-freq- 若打开
launch.json的swoConfig,还要改swoFrequency
JTAG 与 SWO 共用 PB3,不能同时用。JTAG 调试请把 PRINT_SWO 设为 0,改用 RTT;cmsis-dap.cfg 里改为 transport select jtag。若上次 SWD+SWO 后扫不到 JTAG,先复位目标。
UART 接线:USB-TTL RX ← PA2,TX → PA3,共地。
目录
Application/
DAP_HID/ CMSIS-DAP v1 HID
DAP_WINUSB/ CMSIS-DAP v2 WinUSB
RTT/ 目标演示
common/ UART / SWO USART / USB port
Middleware/
CMSIS-DAP/ ARM CMSIS-DAP
CherryUSB/ USB 协议栈
FreeRTOS-Kernel/
script/ OpenOCD、链接脚本、rtt_view / swo_view
.vscode/ 按工程拆分的任务、调试、IntelliSense