在以前,ST对DAP-link的支持几乎没有。在以前的stm32cubeide中很难去使用daplink进行调试。然而在ST更新了stm32cubeide for vscode插件后,为daplink等调试器添加了STM32Cube: Launch Generic GDB Server,通过配置openocd,让vscode中使用daplink调试器的使用变得非常简单。
以下是使用daplink调试stm32的步骤:

1. 准备

首先确保stm32cbeide插件已经正常安装,并且能够正常的编译项目。插件的安装可以直接在VS Code插件界面搜索STM32CubeIDE for Visual Studio Code安装即可,会自动将所有的依赖项一并安装。虽然现在版本的插件还无法将调试或编译进行单独运行。但在调试配置正确前还是可以进行编译的。

2. 安装openocd

由于DAP-link调试器需要openocd的支持,所以我们需要下载openocd并解压到目录,并将其添加到系统环境变量Path中,我使用的版本是xPack OpenOCD。可以从https://github.com/xpack-dev-tools/openocd-xpack/releases 下载对应系统的版本,解压后将bin目录添加到环境变量Path中。
环境变量

2. 配置launch.json

在VS Code中打开项目,按下F5进入调试界面,在最开始会提示创建一个launch.json文件,点击后在弹出的对话框中选择STM32Cube: STM32 Launch GDB即可(或者是STM32Cube: Launch Generic GDB Server)。

如果选择的是前者,vscode会在后面多生成一段STM32Cube: Launch GDB Client的配置,这个我们用不到可以直接删除。


软件会自动生成大部分配置。我们只需要修改serverExe serverParameters serverPort serverCwd这几项。
其中serverExe中要填入openocd.exe的文件位置,由于我们已经设置了环境变量,所以直接填入openocd.exe即可。
serverParameters中需要填入两个参数,参数的格式为:

1
2
3
4
    "serverParameters": [
"-f", "interface/cmsis-dap.cfg",
"-f", "target/stm32f4x.cfg"
]

其中第一个参数是调试器的配置文件,第二个参数是目标芯片的配置文件。由于我们使用的是DAP-link调试器,所以第一个参数是interface/cmsis-dap.cfg,第二个参数根据我们使用的芯片型号进行选择,这里我使用的是stm32f4系列,所以选择target/stm32f4x.cfg。这两个文件可以在openocd的安装目录下的openocd\scripts\interface和openocd\scripts\target目录下找到。
然后在serverPort中填入3333,这个端口号是openocd默认的GDB服务器端口号。
最后在serverCwd中填入openocd.exe所在的目录,因为openocd在运行时会在当前目录下寻找配置文件,所以需要将其设置为openocd.exe所在的目录。
配置完成后保存launch.json文件即可。
下面是一个完整的launch.json配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [

{
"type": "stgdbtarget",
"request": "launch",
"name": "STM32Cube: 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.exe",
"serverParameters": [
"-f",
"interface/cmsis-dap.cfg",
"-f",
"target/stm32f4x.cfg"
],
"serverHost": "localhost",
"serverPort": "3333",
"serverCwd": "D:\\SOFTWARE\\xpack-openocd-0.12.0-7\\bin",
"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": ""
}
]
}
]
}

配置完成后,按下F5即可开始调试。软件会自动编译、下载并启动调试。

上面的配置是我一知半解摸索出来的,不知道是否完全正确,但至少能够在我的电脑上正常使用daplink调试器进行调试了。我参考了https://www.cnblogs.com/gongye/articles/19086565 这篇文章,如果使用我的行不通可以看看这篇。