在 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市场页面,而是存储在本地、通过扩展的界面进入,如下图所示。

按上文提到的教程安装扩展包之后,我们已经可以正常构建,得到 elf 文件。但该扩展包仅支持 ST Link 与 J-Link,想要使用 CMSIS-DAP 需要一些额外的步骤。
设置步骤
首先下载OpenOCD的预构建版本,我使用的是官网推荐的xPack OpenOCD。下载后解压,并将 ./bin 添加到环境变量的 Path 中,如下图所示

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

VS Code自动在文件夹中创建了 .\vscode\launch.json,我们需要对该文件的 serverExe、serverParameters、serverPort 项进行修改。修改后完整的 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 文档中的描述,这个扩展包支持多种调试方式,我还是先这样用着了,剩下的之后再研究吧。

浙公网安备 33010602011771号