在 VS Code 中使用 STM32Cube for Visual Studio Code + OpenOCD + CMSIS-DAP (DAPLInk) 烧录、调试 STM32

前言

众所周知,ST官方的软件对 CMSIS-DAP / DAP Link 的支持一直很差,想在 STM32CubeIDE 使用 CMSIS-DAP 比较麻烦。这一次也差不多,但得益于ST官方提供的 STM32Cube Debug Generic GDB Server 扩展,CMSIS-DAP 也算是有了在官方扩展包STM32Cube for Visual Studio Code中上桌的机会。

尽管这个插件在市场中的评分只有3.4,但经过不断更新,它已经可以实现用免费软件替代传统的 Keil + VS Code + Embedded IDE (EIDE) 的方案,可以作为一个开发 STM32 的选择。关于这个扩展包的基本配置,我推荐 B 站 UP 主 keysking 的教程 爽!手把手教你用VSCode开发STM32【大人,时代变啦!!!】

另外,这个扩展包的文档不在 ST 的官网,不在VS Code市场页面,而是存储在本地、通过扩展的界面进入,如下图所示。

Snipaste_2025-09-11_18-31-59

按上文提到的教程安装扩展包之后,我们已经可以正常构建,得到 elf 文件。但该扩展包仅支持 ST Link 与 J-Link,想要使用 CMSIS-DAP 需要一些额外的步骤。

设置步骤

首先下载OpenOCD的预构建版本,我使用的是官网推荐的xPack OpenOCD。下载后解压,并将 ./bin 添加到环境变量的 Path 中,如下图所示

Snipaste_2025-09-11_18-45-37

回到VS Code。在活动栏中,切换到运行和调试标签页(或使用快捷键 Ctrl+Shift+D),选择 创建 launch.json 文件 ,在弹出的列表中选择STM32Cube: Generic GDB Server,如下图所示。

Snipaste_2025-09-11_18-54-40

VS Code自动在文件夹中创建了 .\vscode\launch.json,我们需要对该文件的 serverExeserverParametersserverPort 项进行修改。修改后完整的 launch.json 文件如下。

// launch.json
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "stgdbtarget",
            "request": "launch",
            "name": "STM32Cube: STM32 Launch Generic GDB Server",
            "origin": "snippet",
            "cwd": "${workspaceFolder}",
            "preBuild": "${command:st-stm32-ide-debug-launch.build}",
            "program": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}",
            "gdb": "${command:st-stm32-ide-debug-launch.get-gdb-executable}",
            "deviceName": "${command:st-stm32-ide-debug-launch.get-device-name}",
            "deviceCore": "${command:st-stm32-ide-debug-launch.get-core-name}",
            "deviceTrustzone": "${command:st-stm32-ide-debug-launch.get-trustzone-status}",
            "serverExe": "openocd", // 修改
            "serverParameters": [
                "-f",
                "interface/cmsis-dap.cfg",
                "-f",
                "target/stm32f0x.cfg"
            ], // 按需修改
            "serverHost": "localhost",
            "serverPort": "3333", // 默认为3333
            "serverCwd": "",
            "runEntry": "main",
            "imagesAndSymbols": [
                {
                    "imageFileName": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}",
                    "imageOffset": "",
                    "symbolFileName": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}",
                    "symbolOffset": ""
                }
            ]
        }
    ]
}

其中的serverParameters一项由你的调试器和芯片决定,可以在下载的 OpenOCD 的目录中找到这些文件。

根据上文视频评论区中大佬的提示,如果不想修改这两项,还可以安装 openocd-tools扩展。按照说明设置完成后会在工程目录中生成 openocd.cfg,之后可将serverParameters一项改为

"serverParameters": [
],

也就是可以少修改一项。

最后,将 CMSIS-DAP 连接到电脑,点击开始调试(F5),就可以正常调试了。

按照 STM32Cube for Visual Studio Code 文档中的描述,这个扩展包支持多种调试方式,我还是先这样用着了,剩下的之后再研究吧。

posted @ 2025-09-11 19:16  GongYeSUDA  阅读(714)  评论(0)    收藏  举报