vscode + Jlink 一键调试stm32 单片机程序
安装交叉编译工具链
stm32采用 交叉编译工具链 arm-none-eabi-xxx, 下载之后解压,压缩包内部结构如下图:
目录下的bin 就是交叉编译工具链的可执行文件地址
将压缩包拷贝到C盘,并将该交叉编译工具链的路径添加到环境变量PATH中
在 powershell 中执行 arm-none-eabi-5.4.1-gcc.exe --version 有如下打印则表示安装正确
安装 x-pack 构建工具
xPack Windows Build Tools 是一个专为Windows环境设计的软件包,能用来在 windows 下构建交叉编译程序。安装该工具之后,设置环境变量,终端中可以使用make 工具构建代码。
安装 JLink 工具
Jlink 工具是一款广泛用于调试单片机程序的调试工具,官网下载安装好后,设置环境变量,在终端中可以运行程序。
JLink 有一系列工具,其中 JFlash 可以用于读写单片机中的falsh,用于下载执行程序,JLinkGDBServer.exe 和 JlinkDGBServerCL.exe 分别是图形界面的调试服务端程序和命令行调试服务端程序。其中 JFlash 可以使用命令行下载程序,使用方法为:JFlash.exe -openprjC:\stm32f405zg.jflash -openD:\path\base_app_test.bin,8010000 -auto -startapp -exit -jflashlogdownload
gnu-debuger 插件
gnu-debuger 插件是一款轻量化单片机程序调试插件,其借助 arm-none-eabi-gdb.exe 和 JlinkDGBServerCL.exe两个工具,实现单片机程序的一键下载调试。
一键安装好插件之后,在工作空间中新增一个launch.json 文件,在文件中添加如下的配置:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "gnu-debugger",
"request": "launch",
"name": "GNU debugger",
"program": "${workspaceFolder}\\path\\run_test.elf",
"toolchain": "",
"client": "arm-none-eabi-gdb.exe",
"server": "JLinkGDBServer",
"windows": {
"server": "JLinkGDBServerCL.exe",
},
"serverArgs": [
"-if", "SWD",
"-device", "STM32F407IG",
"-endian", "little",
"-speed", "1000",
"-port", "2331",
"-vd",
"-ir",
"-localhostonly", "1",
"-singlerun",
"-strict",
"-timeout", "0"
],
"serverPort": 2331,
"serverHost": "localhost",
"customVariables": [
"port0",
"port1",
"port2",
],
"autoRun": false,
"debugOutput": false
}
]
}
其中 type 指选用的调试器是 gnu-debuger; program 带调试信息的执行文件;toolchain 是交叉编译工具链的执行文件路径,因为之前已经将交叉编译工具链的路径添加到 Path环境变量中了,所以这里填空;client 是指选用的gdb调试器是arm-none-eabi-gdb.exe;server表示选用的gdb server ,这里采用 JLinkGDBServer ;windows 表示Windows系统中采用 JLinkGDBServerCL.exe 命行工具作为server程序;其他剩余参数都是 JLinkGDBServerCL.exe 的执行参数。
编译
使用 stm32 cube 生成的工程,在vscode 终端直接执行make,便可以根据makefile完成工程的编译。
一键启动调试
点击 左上角的 三角形,会下载程序到单片机中,点击执行会进入断点。
在终端的下方可以输入 gdb 的命令,比如 info breaks 可以查看所有的断点。delete 1 可以删除第一个断点。
在左上角输入 变量查看框内,可以切换变量值的显示形式,输入 0x 以16进制显示变量,输入 0b 以二进制显示变量,更多用法如下:
0b = binary
0o = octal
0d = decimal
0x = hexadecimal
0n = natural (back to GDB default output format)