STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

This skill should be used when setting up or fixing an STM32 project's debug environment in VS Code/CodeBuddy - configuring DAPLink (CMSIS-DAP) + OpenOCD for flashing and debugging, creating openocd.cfg / launch.json / tasks.json, dealing with breakpoints that cannot be set or that jump to another line, disabling gray inline parameter-name hints (e.g. GPIOx:, GPIO_Pin:), or troubleshooting STM32 HAL interrupts (TIM update interrupt, ADC injected JEOC interrupt) that never fire. 用于配置/修复 STM32 工程的调试环境:DAPLink+OpenOCD 烧录调试、断点无法下(需 -O0)、关闭灰色参数名内联提示,以及 HAL 定时器更新中断/ADC 注入中断不触发的排查。

一句话选型结论

按资料字段整理

STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_b4771e4d/stm32-daplink-debug-setup
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_b4771e4d仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791685894
正文体量10.1 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

10.1 KB
模型实际读到的说明书原文,来自技能仓库

STM32 DAPLink Debug Setup(STM32 调试环境配置)

概述

在 Windows 的 VS Code / CodeBuddy 中配置并排障 STM32 调试工具链:DAPLink(CMSIS-DAP)仿真器 +
OpenOCD + Cortex-Debug,并处理最常见的影响调试体验的两个设置问题(灰色参数名内联提示、
因优化导致无法下断点的代码行)。

本技能附带可直接复制的模板(assets/)与深入的排障手册(references/troubleshooting.md)。

快速开始

按顺序执行检查清单;工程中已有的步骤先核实再跳过,不要凭空假设。

  1. 确认芯片型号、调试接口(SWD 引脚)与 ELF 输出路径。
  2. 配置 DAPLink + OpenOCD → 见 任务 1
  3. 关闭内联参数提示 → 见 任务 2
  4. 让 Debug 构建可断点(-O0)→ 见 任务 3

任务 1 — 配置 DAPLink + OpenOCD

把 assets/openocd.cfg 复制到工程根目录,把 assets/vscode/launch.json +
assets/vscode/tasks.json 复制到工程的 .vscode/ 目录,然后按需修改:

占位内容 含义
${workspaceFolder} VS Code 内置变量,保持原样
<CHIP> 例如 STM32F103RET6;按系列修改 openocd.cfg 的目标文件(target/stm32f1x.cfg、stm32f4x.cfg 等)
<ELF> 编译产物 ELF 的相对路径,例如 build/Debug/app.elf
openocd / gdb 路径 模板默认写裸命令名(依赖 PATH);探测不到时按 工具路径探测 一节找到后填绝对路径

一键"编译 → 烧录 → 运行"

assets/vscode/tasks.json 的 Build and Flash (run) 任务即此模式,已实测可用:

  • dependsOn: "Build (Debug)" 先自动编译,随后 program <ELF> verify reset exit 烧录;
  • verify 校验通过后 reset 复位芯片,目标直接开始运行,无需手动操作;
  • 任务已设 "group": { "kind": "build", "isDefault": true },按 Ctrl+Shift+B 即一键
    编译+烧录+运行;命令面板 Tasks: Run Build Task 等效;
  • 仅编译的任务(Build (Debug))保留但不再占用默认 build 组。

以下是真实故障中总结的硬性规则,不要违反:

  • 所有 OpenOCD 任务必须用 "type": "process" + args 数组。 用 "type": "shell" 时,
    PowerShell(pwsh -Command)会吃掉 -c "program x.elf verify reset exit" 的引号,
    OpenOCD 会报 Unexpected command line argument: <elf>。
  • 优先依赖 PATH 探测,探测不到再用绝对路径。 模板先用裸命令名引用 openocd /
    arm-none-eabi-gdb。VS Code 缓存的是编辑器启动时的环境快照,之后才安装或加入 PATH
    的工具在它的终端里不可见(即使新开的系统 PowerShell 能找到)。此时要么重启 VS Code,
    要么按 工具路径探测 一节定位后把绝对路径填进 launch.json(serverpath / gdbPath)
    和 tasks.json(command)。
  • 编辑器/工具进程找不到、但用户终端里能跑时,读注册表 PATH。 编辑器派生的进程拿到
    的是过期 PATH 快照,且 OpenOCD 可能被装在非常规位置(实战案例:
    D:\sys\zhuomian\ODrive\openocd-v0.12.0-i686-w64-mingw32\bin\openocd.exe,为 ODrive
    项目装的,常规目录搜索全部落空)。此时直接读注册表里最新的用户/系统 PATH 逐目录命中,
    见 工具路径探测 第 3 步。
  • 仿真器的 NRST 未接线时必须用 reset_config none。 若配置成
    reset_config srst_only srst_nogate connect_assert_srst 且 NRST 没接,
    reset halt 会报 Error: timed out while waiting for target halted。
  • 不要在 program ... reset exit 之后追加其他 -c 命令 —— OpenOCD 在 exit 处已
    关闭,后面的命令静默不执行。烧录与探测分两次调用。
  • adapter speed 从 1000 起步,连接稳定后再提高(4000~10000)。
  • 国产兼容芯片(CKS32、APM32 等)IDCODE 不同,放开 set CPUTAPID 0x2ba01477。

写代码前先验证配置:

& "<openocd>" -f openocd.cfg -c "exit"

预期输出:Cortex-M3 r1p1 processor detected、starting gdb server ... on 3333,
且没有 timed out while waiting for target halted。

然后烧录:

& "<openocd>" -f openocd.cfg -c "program <ELF> verify reset exit"

预期输出:** Programming Finished ** / ** Verified OK ** / ** Resetting Target **。

任务 2 — 关闭内联参数提示(Inlay Hints)

实参前插入的灰色 GPIOx: / GPIO_Pin: 文字是 Inlay Hint(内联提示),由 clangd
语言服务器渲染,只影响显示、不影响编译。

加到工程的 .vscode/settings.json(想对所有工程生效则加到用户设置):

// off(关闭)| on(开启)| offUnlessPressed(按住 Ctrl+Alt 时显示)
"editor.inlayHints.enabled": "off"

editor.inlayHints.enabled 是编辑器级总开关,与具体语言服务器无关。若提示仍在,
执行 Developer: Reload Window。

若使用微软 C/C++ 扩展(cpptools)而非 clangd,用它自己的开关:
C_Cpp.inlayHints.parameters.enabled、C_Cpp.inlayHints.autoDeclarationTypes.enabled、
C_Cpp.inlayHints.functionLikeReturnTypes.enabled。

任务 3 — 让 Debug 构建可断点(-O0)

症状:在一条看起来很普通的语句上下断点,断点被静默挪到函数的收尾大括号处。

原因:该语句没有 DWARF 行表条目——编译器把它当作死代码删除了。典型触发场景:
值赋给局部变量后用 (void)val; 丢弃;优化等级高于 -O0(-Og 就足够触发)。

修改工具链文件(如 cmake/starm-clang.cmake、cmake/gcc-arm-none-eabi.cmake):

set(CMAKE_C_FLAGS_DEBUG   "-O0 -g3")   # 原为 "-Og -g3"
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")

然后重新编译并重新烧录 —— 调试器从 ELF 里读行表,ELF 是旧的断点位置就是旧的。

用行表确认修复效果:

$od = "<arm-none-eabi-objdump>"
$out = & $od --dwarf=decodedline <ELF>
# 收集目标源文件 CU 的 (行号 -> 地址) 条目

凡是能下断点的行都会有自己的地址。注意 (void)val; 这类空语句在任何优化等级下都
不产生指令,其断点永远顺延到下一行。

想让某个值在任何优化等级下都可观察,把它存到文件作用域的 volatile 变量,而不是
被丢弃的局部变量:

volatile uint32_t adc1_val;

工具路径探测

模板用裸命令名(openocd、arm-none-eabi-gdb、cmake、ninja)引用工具并依赖
PATH。先在目标机器上定位工具,然后:把目录加入 PATH(推荐,之后重启 VS Code),
或把绝对路径填入 launch.json(serverpath / gdbPath / 可选 svdFile)、
tasks.json(command)。

# 1) 已在 PATH 中 → 无需处理,裸命令名直接可用
Get-Command openocd, arm-none-eabi-gdb, cmake, ninja -ErrorAction SilentlyContinue

# 2) 不在 PATH → 搜索常见安装位置
Get-ChildItem "C:\Program Files", "C:\Program Files (x86)", "C:\openocd", "$env:USERPROFILE" `
  -Recurse -Depth 4 -Filter openocd.exe -ErrorAction SilentlyContinue |
  Select-Object -ExpandProperty FullName

# 3) 用户终端里能跑、但常规位置搜不到 → 读注册表里最新的用户/系统 PATH
#    (编辑器进程的 PATH 快照可能过期,注册表里才是当前真实值)
$dirs = ([Environment]::GetEnvironmentVariable('Path','User') + ';' +
         [Environment]::GetEnvironmentVariable('Path','Machine')).Split(';') |
        Where-Object { $_ }
$dirs | ForEach-Object {
    $p = Join-Path $_ 'openocd.exe'
    if (Test-Path $p) { $p }
}

ST 工具链 gdb 的典型位置(STM32CubeMX CMake / st-arm-clang 工程,可直接填 gdbPath):

%USERPROFILE%\AppData\Local\stm32cube\bundles\gnu-gdb-for-stm32\<版本>\bin\arm-none-eabi-gdb.exe

值得直接检查的固定位置:

工具 常见位置
OpenOCD (xPack) ~\AppData\Roaming\xPacks\openocd\*\bin\openocd.exe
OpenOCD (PlatformIO) ~\.platformio\packages\tool-openocd\bin\openocd.exe
OpenOCD (手动解压) 任意位置,如 D:\tools\openocd\bin\openocd.exe
GNU ARM 工具链(gdb/objdump) 工具链的 bin\ 目录
ST 自带工具链 ~\AppData\Local\stm32cube\bundles\{st-arm-clang,ninja,cmake,gnu-gdb-for-stm32}\<版本>\bin
CMSIS-SVD 文件 ~\AppData\Local\stm32cube\packs\STMicroelectronics\<dfp>\<版本>\SVD\

CMSIS-SVD 等)的绝对路径可直接填入上述位置。

构建时若 shell 的 PATH 缺编译工具链,临时补上缺失的目录:

$env:Path = "<st-arm-clang>\bin;<ninja>\bin;" + $env:Path
cmake --build build/Debug

资源

  • assets/openocd.cfg — DAPLink + STM32 的 OpenOCD 模板(含排障注释)
  • assets/vscode/launch.json — Cortex-Debug 启动配置(servertype: openocd)
  • assets/vscode/tasks.json — 编译 / 烧录 / 擦除 / 服务器任务(type: process)
  • references/troubleshooting.md — STM32 HAL 中断陷阱与修复方法

常见问题

5 问
答案由本站依据条目字段整理
STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_b4771e4d/stm32-daplink-debug-setup。安装方式为未标注。装完刷新技能列表或重开客户端。

STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

STM32 DAPLink Debug Setup(DAPLink+OpenOCD 调试环境配置)用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。