以下是基于 VS Code + CMake + J-Link 开发 STM32 的完整教程。
用VS Code写代码,用RTT看数据,用J-Link烧录调试
一、安装 PC 端软件
核心工具包推荐 STM32CubeCLT ,它是 ST 官方提供的命令行工具集,一次性包含了 GCC-ARM 编译器、CMake、Ninja 和 OpenOCD。
下载页面:
bash
https://www.st.com.cn/zh/development-tools/stm32cubeclt.html
- STM32CubeMX 6.11.0 以上:支持直接生成 CMake 工程
- STM32CubeCLT 1.15.0 以上:包含 CMake、Ninja、GCC-ARM 工具链
- SEGGER J-Link 软件包:J-Link 驱动和 GDB Server,官网下载安装
安装后验证:
bash
arm-none-eabi-gcc --version
cmake --version
ninja --version
JLinkGDBServer --version
二、安装 VS Code 插件
| 插件 | 用途 |
|---|---|
ms-vscode.cpptools |
C/C++ 核心支持 |
ms-vscode.cmake-tools |
CMake 构建工具集成 |
twxs.cmake |
CMake 语法高亮 |
marus25.cortex-debug |
Cortex-M 调试核心,必须 |
dan-c-underwood.arm |
ARM 汇编高亮 |
zixuanwang.linkerscript |
链接脚本高亮 |
一键安装命令:
bash
code --install-extension ms-vscode.cpptools
code --install-extension ms-vscode.cmake-tools
code --install-extension twxs.cmake
code --install-extension marus25.cortex-debug
code --install-extension dan-c-underwood.arm
code --install-extension zixuanwang.linkerscript
三、用 CubeMX 生成 CMake 工程
- 打开 CubeMX,新建项目选择 MCU 型号
- 配置引脚、时钟树
- Project Manager → Toolchain / IDE 选择 CMake
- 建议 Code Generator 勾选
Generate peripheral initialization as a pair of .c/.h files per peripheral - 点击 GENERATE CODE,生成包含
CMakeLists.txt的工程
四、在 VS Code 中编译
- VS Code 打开生成的工程文件夹
- CMake Tools 插件自动检测
CMakeLists.txt,选择arm-none-eabi-gcc作为 Kit - 点击底部状态栏 Build 按钮或按 F7 编译
终端编译:
bash
cd build
ninja
五、配置 J-Link 调试
在 .vscode/launch.json 中配置:
json
{
"version": "0.2.0",
"configurations": [
{
"name": "J-Link Debug",
"cwd": "${workspaceFolder}",
"executable": "${workspaceFolder}/build/你的工程名.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "jlink",
"serverpath": "C:/Program Files/SEGGER/JLink/JLinkGDBServerCL.exe",
"device": "STM32F407VG", // 替换为实际型号
"interface": "swd",
"runToEntryPoint": "main",
"armToolchainPath": "C:/Program Files (x86)/Arm GNU Toolchain/bin"
}
]
}
serverpath 指向 J-Link GDB Server 的实际路径。如果连接多个 J-Link,添加 "serialNumber": "你的序列号"。
六、下载与仿真
- 下载 :按 F5 启动调试,自动烧录
.elf文件 - 调试:断点、单步、查看变量/寄存器全部支持
- SVD 文件 (可选):指定
svdFile路径后可查看外设寄存器值
如需单独烧录 .bin:
bash
JLinkExe -device STM32F407VG -if SWD -speed 4000 -CommanderScript download.jlink
download.jlink 内容:
loadfile build/工程名.bin 0x08000000
r
g
exit
七、生成 .bin 文件
在根目录 CMakeLists.txt 末尾添加:
cmake
add_custom_command(
TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
COMMAND arm-none-eabi-objcopy -O binary $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_PROJECT_NAME}.bin
COMMENT "Generating .bin file"
)