【保姆级】抛弃Keil!STM32 HAL库 + CMake + VSCode/CLion 优雅开发指南(附踩坑记录)
本文介绍了使用CMake配合STM32CubeMX搭建现代化STM32开发环境的方法。首先详细说明了工具链的下载与安装,包括ARM GNU Toolchain、CMake、Ninja、OpenOCD等核心工具,并强调环境变量配置的重要性。接着指导通过STM32CubeMX生成CMake工程,并创建OpenOCD配置文件以支持调试。最后分别提供了VSCode和CLion两种IDE的配置方案:VSCo
这次我们将用 CMake ,配合 STM32CubeMX,解锁更现代、更高效的 STM32 开发姿势。无论你是喜欢 VSCode 的自由,还是 CLion 的拥趸,我这篇 食用指南 都能带你从零搭建一套丝滑的开发环境。
懒人自取:https://github.com/RocksonLee/STM32-Template
第一步:食材准备(工具链下载与安装)
这一步是基础,很多人报错都是因为环境变量没配好!
我们需要下载并安装以下工具,并将它们添加到系统的 Path 环境变量中。
⚠️ 重点提示: 所有工具的解压/安装路径,绝对不能有空格,也不能有中文!
核心工具清单
-
ARM GNU Toolchain (交叉编译器)
把 C 代码编译成 STM32 能跑的机器码,和正常的mingw不同。下载 Windows ZIP 包或 exe,解压/安装。
下载地址:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads (选 arm-none-eabi )。 -
CMake (构建管家)
生成构建脚本,管理依赖。下载 Windows msi 或 exe,一直 Next 安装。
下载地址:https://cmake.org/download/ (选 Windows x64 Installer)。 -
Ninja (构建加速器)
比 Mingw Make 快得多的构建工具。下载zip,解压。
下载地址:https://github.com/ninja-build/ninja/releases (下载ninja-win.zip)。 -
OpenOCD (调试与烧录)
连接调试器(ST-Link/DAPLink)和芯片,用来烧录程序。下载zip,解压。
下载地址:https://github.com/xpack-dev-tools/openocd-xpack/releases (下载win32-x64.zip) -
STM32CubeMX (代码生成)
这你都不认识?
下载地址:https://www.st.com/en/development-tools/stm32cubemx.html
配置环境变量 (Path) —— 最关键一步!
装完别急着跑!必须把上述工具的 bin 目录加入系统 Path。
-
Win 键搜索“编辑系统环境变量”。
-
点击“环境变量” -> 在“系统变量”区域找到
Path-> 点击“编辑”。
![]() |
![]() |
|---|
- 新建并添加以下路径(请根据你的实际安装位置修改):
...\Arm-GNU-Toolchain\bin...\CMake\bin...\Ninja(确保 ninja.exe 在这里)...\OpenOCD\bin

- 验证:打开 CMD,依次输入以下命令,有版本号输出才算成功:
arm-none-eabi-gcc -vninja --versioncmake --versionopenocd -v

第二步:底料制作(CubeMX 生成 CMake 工程)
-
打开 STM32CubeMX,配置好 RCC (HSE/LSE) 和 SYS (Debug Serial Wire)。
-
Project Manager -> Project:
Toolchain / IDE:一定要选择 CMake。 -
Project Manager -> Code Generator:
勾选Generate peripheral initialization as a pair of '.c/.h' files(代码更整洁)。 -
点击 GENERATE CODE。
第三步:注入灵魂(OpenOCD 配置文件)
这是最关键的一步!为了让 VSCode 和 CLion 都能轻松识别调试器,我们在 工程根目录(即 CMakeLists.txt 同级目录)新建一个文件,命名为 openocd.cfg。
将以下内容填入(以 DAPLink + STM32F4 为例):
# openocd.cfg
# 1. 选择接口 (调试器类型)
# 如果是 ST-Link,改为 source [find interface/stlink.cfg]
source [find interface/cmsis-dap.cfg]
# 2. 选择通信协议
transport select swd
# 3. 设置速度 (单位kHz,建议加上,太快可能不稳定)
adapter speed 5000
# 4. 选择目标芯片 (根据你的型号修改,如 stm32f1x.cfg)
source [find target/stm32f4x.cfg]
提示:如果你用的是 ST-Link,就把第 1 步换成
interface/stlink.cfg即可。
第四步:VSCode 方案(轻量自由)
1. 准备工作在插件市场安装以下插件:
- C/C++ Extension Pack
- CMake Tools
- Cortex-Debug (核心调试插件)
2. 用 VSCode 打开工程
选择预设 Debug,在工程根目录新建一个 .vscode 文件夹 。

3. 配置自动编译 (tasks.json)
为了实现“一键调试前自动编译”,在 .vscode 文件夹下新建 tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "cmake",
"command": "build",
"problemMatcher": "$gcc",
"group": { "kind": "build", "isDefault": true },
"detail": "CMake Build Task"
}
]
}
4. 配置调试 (launch.json)
在 .vscode 文件夹下新建 launch.json。注意我们直接引用了根目录的 openocd.cfg,这样就不用写一堆复杂的路径了。
{
"version": "0.2.0",
"configurations": [
{
"name": "STM32 Debug",
"type": "cortex-debug",
"request": "launch",
"servertype": "openocd",
"cwd": "${workspaceFolder}",
/* 自动抓取 CMake 生成的 elf 文件 */
"executable": "${command:cmake.launchTargetPath}",
"runToEntryPoint": "main",
"device": "STM32F411", /* 替换你的具体型号 */
/* 关键点:直接加载根目录的配置文件 */
"configFiles": [
"${workspaceFolder}/openocd.cfg"
],
"preLaunchTask": "Build" /* 调试前先自动运行编译任务 */
}
]
}
5. 检验成果
食用方法:按下
F5,VSCode 会自动编译 -> 烧录 -> 停在 main 函数。
第五步:CLion 方案(强大智能)
CLion 对 CMake 支持是原生的,配置更加简单傻瓜化。
1. 用 CLion 打开工程
用 CLion 打开工程根目录,调整 CMake 配置文件如图。
2. 配置工具链 (Settings -> Build -> Toolchains)
新建一个名为 STM32 的工具链:
- C Compiler: 指向
arm-none-eabi-gcc.exe - C++ Compiler: 指向
arm-none-eabi-g++.exe - Debugger: 指向
arm-none-eabi-gdb.exe - Build Tool: 选择
Ninja

3. 指定 OpenOCD (Settings -> Embedded Development)
- OpenOCD Location: 指向你的
openocd.exe路径。 - Stm32CubeMX Location: 指向
STM32CubeMX.exe。

4. 运行配置 (Run Configurations)
CLion 会自动识别 CMake 项目。我们需要调整一下“OpenOCD Download & Run”的配置:
- 点击右上角运行 -> Edit Configurations。
- 左侧选择自动生成的 OpenOCD 配置(如果没有,点击左上角
+新增OpenOCD Download & Run)。 - 找到 Board config file 选项。
- 关键操作:点击右侧的文件夹图标,直接选择我们 步骤三 中创建的根目录下的
openocd.cfg文件。

5. 检验成果
食用方法:点击右上角的绿色小虫子(Debug),CLion 会自动处理一切。

进阶技巧:开启上帝视角(配置 SVD 寄存器文件)
调试单片机光看变量怎么行?我们经常需要直接查看 GPIO、定时器、UART 等外设的寄存器状态。这就需要 SVD (System View Description) 文件,它能把冰冷的十六进制地址映射成可读的寄存器名称。
1. 获取 SVD 文件
虽然 Keil 的安装包里有,但我更推荐使用开源社区维护的版本,兼容性更好,且不需要安装庞大的 Keil。
- GitHub 下载地址: https://github.com/modm-io/cmsis-svd-stm32
- 操作:
- 找到你芯片对应的
.svd文件(例如STM32F407.svd)。 - 下载并把它丢到你的 工程根目录 下(和
CMakeLists.txt在一起)。
2. VSCode 配置 (launch.json)
在 VSCode 中,我们需要在 launch.json 里显式指定这个文件的路径。Cortex-Debug 插件加载后,在调试栏的 “X PERIPHERALS” 窗口就能看到所有外设了。
打开 .vscode/launch.json,在 configurations 中添加一行 "svdFile":
{
"configurations": [
{
"name": "STM32 Debug",
// ... 其他配置保持不变 ...
"device": "STM32F407",
/* 【新增】指定 SVD 文件路径 */
"svdFile": "${workspaceFolder}/STM32F407.svd",
"configFiles": [ "${workspaceFolder}/openocd.cfg" ]
}
]
}
3. CLion 配置 (可视化加载)CLion 的体验非常人性化,不需要改配置文件,直接在界面上点两下即可(也就是你截图里的那个位置)。
- 进入调试:点击右上角的小虫子开始调试。
- 打开外设视图:在底部的 Debug 面板中,切换到 “Peripherals” (外设) 标签页。
- 加载文件:
- 如果没有自动加载,界面中间会出现 “Load .svd file” (加载 .svd 文件) 的蓝色链接(如截图箭头所示)。
- 点击它,选择你工程根目录下的
.svd文件。

- 大功告成:现在你可以展开 GPIOA, TIM1 等外设,实时查看每一个寄存器的位(Bit)变化了!
避坑指南 (常见报错)
- 报错
Error connecting DP: cannot read IDR
- 原因:线没接好,或者芯片没有供电。
- 解决:检查杜邦线,确保 GND 均已连接;尝试按住 Reset 键再下载。
- VSCode 无法生成
build文件夹
- 原因:CMake 没有正确识别编译器 Kit。
- 解决:按下
Ctrl+Shift+P-> 输入CMake: Select a Kit-> 选择[Scan for kits]-> 选中GCC for arm-none-eabi。
- OpenOCD 报错
Protocol error with Rcmd
- 原因:VSCode 插件的时序问题。
- 解决:在
launch.json中尝试把servertype改为external,然后手动在命令行运行openocd作为服务端。
结语
至此,你已经拥有了一套不输 Keil 的现代化嵌入式开发环境。代码补全、Git 管理、美观的界面……享受开发的乐趣吧!
更多推荐





所有评论(0)