CMake + VS Code + J-Link

以下是基于 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
  1. STM32CubeMX 6.11.0 以上:支持直接生成 CMake 工程
  2. STM32CubeCLT 1.15.0 以上:包含 CMake、Ninja、GCC-ARM 工具链
  3. 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 工程

  1. 打开 CubeMX,新建项目选择 MCU 型号
  2. 配置引脚、时钟树
  3. Project Manager → Toolchain / IDE 选择 CMake
  4. 建议 Code Generator 勾选 Generate peripheral initialization as a pair of .c/.h files per peripheral
  5. 点击 GENERATE CODE,生成包含 CMakeLists.txt 的工程

四、在 VS Code 中编译

  1. VS Code 打开生成的工程文件夹
  2. CMake Tools 插件自动检测 CMakeLists.txt,选择 arm-none-eabi-gcc 作为 Kit
  3. 点击底部状态栏 Build 按钮或按 F7 编译

终端编译:

bash 复制代码
cd build
ninja

.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"
)
相关推荐
电子元器件选型哥40 分钟前
组串电流检测和MPPT电流检测,到底有什么区别?
单片机·嵌入式硬件·硬件工程师·电子元器件·器件选型
Freak嵌入式1 小时前
树莓派 Pico GPIO 深度解析:从 MCU 架构到寄存器控制,底层原理与实践指南
java·开发语言·科技·单片机·嵌入式硬件·架构
Freak嵌入式1 小时前
实战对比:用 mpremote/Putty/MobaXterm 连接树莓派 Pico REPL,谁更省心?
java·大数据·开发语言·科技·单片机·嵌入式硬件
Freak嵌入式2 小时前
告别死循环!Pico 外部中断控制 LED,比轮询高效 100 倍
java·开发语言·stm32·单片机·嵌入式硬件
AOI小白新手上路2 小时前
江科协51单片机入门:新建第一个Keil工程,点亮第一个LED(含完整代码)
stm32·单片机·51单片机
736c13 小时前
STM32-FLASH 11
stm32·单片机
Zhang.Yi14 小时前
STM32-ADC
stm32·单片机·嵌入式硬件
Messy create17 小时前
【储能系统三大核心】
网络·stm32·单片机·算法·能源
Nomarsgo17 小时前
生产车间产线巡检解决方案:基于联控 Lionconit PTC-1006 工业手持平板电脑打造移动化、数字化车间巡检终端
单片机·嵌入式硬件·电脑