番外篇 - STM32_CubeMX_CLion_全平台配置教程
番外篇 - STM32_CubeMX_CLion_全平台配置教程
SarznCubeMX + CLion 从零配置教程
适用平台:macOS 和 Windows 适用对象:已用 STM32CubeMX 生成 CMake 工程,想用 CLion 编译、烧录、调试 STM32F103(Blue Pill)的人 支持调试器:ST-Link / J-Link / DAPLink 工具链:ARM GNU Toolchain(
arm-none-eabi-gcc)+ Ninja + OpenOCD + CLion 自带 CMake
本教程从「CubeMX 已经把工程导出成 CMake 之后」讲起。CubeMX 那边记得在 Project Manager → Toolchain/IDE 选 CMake,这样才能用 CLion 打开
本篇教程为了确保逻辑严谨与 Claude opus 4.8 联合编写
目录
一、整体流程概览
整条链路是这样的:
1 | CubeMX 生成 CMake 工程 |
你需要分别配置 三样东西,初学时最容易混淆它们:
| 名称 | 作用 | 在哪配 |
|---|---|---|
| Toolchain(工具链) | 用哪个编译器、构建工具、调试器 | 设置 → 构建执行部署 → 工具链 |
| CMake Profile(配置文件) | 构建类型、用哪个工具链、传给 CMake 的参数 | 设置 → 构建执行部署 → CMake |
| Run Configuration(运行配置) | 烧哪个 .elf、用哪个 OpenOCD 配置 | 运行 → 编辑配置 |
二、安装电脑端必备工具
需要装的东西总览:
| 工具 | 作用 | macOS | Windows |
|---|---|---|---|
| ARM GNU Toolchain | 交叉编译器,把代码编成 STM32 能跑的固件 | 手动安装包 / Homebrew | 官方安装包 |
| Ninja | 构建工具(执行编译) | brew install ninja |
winget / scoop |
| OpenOCD | 把固件烧进芯片、调试 | CLion 自带 / brew |
CLion 自带 |
| CMake | 生成构建脚本 | CLion 自带,无需单独装 | CLion 自带 |
| CLion | IDE | JetBrains 官网 | JetBrains 官网 |
| 调试器驱动 | 让电脑认出 ST-Link/DAPLink/J-Link | 多数免驱 | 部分需装驱动 |
2.1 macOS
① 安装 ARM GNU Toolchain
两种方式任选其一:
方式 A(推荐,和本教程路径一致): 去 ARM 官网下载 macOS
版安装包 developer.arm.com
→ Downloads → GNU Toolchain (arm-none-eabi) 解压后放到
/Applications/,例如: > 注:下面所有命令里的
15.2.rel1 是版本号,换成你实际装的版本
1
/Applications/ArmGNUToolchain/15.2.rel1/arm-none-eabi/bin/
方式 B(更省事): 用
Homebrew(但是你要记住自己的路径….) 1
brew install --cask gcc-arm-embedded
如果用了这个请使用自己的路径, 不要一股脑的照抄我下面的东西
② 配置 PATH
把工具链的 bin 目录加进 PATH,这样命令行和 OpenOCD/GDB
都能找到它。macOS 默认是 zsh,编辑
~/.zshrc:
1 | # 打开配置文件(没有就会新建) |
在文件末尾加一行(路径换成你自己的):
1 | export PATH="/Applications/ArmGNUToolchain/15.2.rel1/arm-none-eabi/bin:$PATH" |
保存后让它生效:
1 | source ~/.zshrc |
③ 安装 Ninja
1 | brew install ninja |
装好后一般在 /opt/homebrew/bin/ninja(Apple Silicon)或
/usr/local/bin/ninja(Intel)
④ 安装 OpenOCD
CLion 自带 OpenOCD,通常不用单独装。如果遇到版本太旧、认不出 DAPLink/克隆片的问题,再装个新的:
1 | brew install open-ocd |
⑤ 安装 CLion
去 JetBrains 官网 下载安装。CLion 自带 CMake,不用单独装。
⑥ 调试器驱动
macOS 上 ST-Link、DAPLink 一般免驱(走 HID/libusb)。J-Link 需要去 Segger 官网装 J-Link 软件包
2.2 Windows
① 安装 ARM GNU Toolchain
去 ARM
官网 下载 Windows 版 .exe
安装包,双击安装。默认路径类似:
1 | C:\Program Files (x86)\Arm GNU Toolchain arm-none-eabi\15.2 rel1\bin |
安装最后一步,务必勾选 “Add path to environment variable”(添加到环境变量)。勾了这一步就省去手动配 PATH。
② 配置 PATH(如果上一步没勾)
此电脑 右键 → 属性 →
高级系统设置 → 环境变量 → 在「系统变量」里找到
Path → 编辑 → 新建,粘进去:
1 | C:\Program Files (x86)\Arm GNU Toolchain arm-none-eabi\15.2 rel1\bin |
确定后重启所有终端/CLion让其生效。
③ 安装 Ninja
任选一种:
1 | winget install Ninja-build.Ninja |
或用 scoop: 1
scoop install ninja
ninja.exe
的路径,后面 CLion 工具链里可能要指定。
④ 安装 OpenOCD
CLion 自带 OpenOCD,通常直接用。需要新版时可以装 xPack OpenOCD 并加进 PATH。
⑤ 安装 CLion
去 JetBrains 官网 下载安装,自带 CMake。
⑥ 调试器驱动(Windows 上比 mac 重要)
| 调试器 | 需要的驱动 |
|---|---|
| ST-Link | 装 ST 官方 STSW-LINK009 USB 驱动 |
| DAPLink | 多数免驱(HID)。若 OpenOCD 认不出,用 Zadig 把它的接口装成 WinUSB |
| J-Link | 装 Segger J-Link 软件包 |
2.3 验证安装
打开终端(Windows 用 PowerShell / CMD),逐条运行,能打印出版本号就说明装好了:
1 | arm-none-eabi-gcc --version # 编译器 |
arm-none-eabi-gcc --version 如果提示「找不到命令」,说明
PATH 没配好,回到 ② 检查。
三、在 CLion 里配置工程
方法 1: 直接用CubeMX生成好的预设
使用 CubeMX 生成的代码自己本身就已经有预设了, 我们可以直接用,
只需要把这个启用配置文件勾上就行, 但是你需要选择 Debug - Debug 预设和
Release - Release 预设, 这两个是buildPresets(构建预设),
而前两个是configurePresets(配置预设) -
名字是单个词「Release 预设」的,来自
configurePresets - 名字是「Release - Release
预设」(中间带个横杠、两个词)的,来自
buildPresets——前面那个 Release 是 build preset
名,后面那个 Release 是它绑定的 configure preset 名,CLion 用
构建-配置 的格式把它俩拼成一个名字显示

CMakePresets.json 里有一个 Debug 预设,同时 CLion
自己之前还保留着一个也叫 Debug 的 CMake
profile(就是你自己手动建的不带「预设」的纯 Debug)。两个同名,CLion
没法导入 presets 里的
Debug,就报了这个错
然后点一下清除缓存重建目录, 这个错误就被解决了
方法 2: 不用 CMakePresets 配置,而是用自己构建的 CLion CMake Profile 配置(适合吃了没事的人)
第 1 步:打开工程
CLion → File → Open,选中 CubeMX
生成的工程根目录(里面有
CMakeLists.txt、CMakePresets.json、.ioc
的那个文件夹)。CLion 会自动识别为 CMake 工程。
第 2 步:配置工具链(Toolchain)
进入 设置 → 构建、执行、部署 → 工具链,点
+ 新建一个,命名为 STM32,按下表填:
| 项 | 填什么 | 说明 |
|---|---|---|
| 名称 | STM32 |
随便取 |
| CMake | 已捆绑(Bundled) | 用 CLion 自带的即可 |
| 构建工具 | ninja 的路径 | mac: /opt/homebrew/bin/ninja;Win: 你装的
ninja.exe |
| C 编译器 | .../arm-none-eabi/bin/arm-none-eabi-gcc |
ARM 工具链里的 gcc |
| C++ 编译器 | .../arm-none-eabi/bin/arm-none-eabi-g++ |
ARM 工具链里的 g++ |
| 调试器 | 捆绑的(Bundled) | 见下方说明 |
⚠️ 关于那个黄色警告 “测试 CMake 运行完成,但有错误”:这是正常的,可以无视。 因为 CLion 在测试工具链时会尝试编译一个能在你电脑(mac/win)上运行的小程序,而 ARM 交叉编译器编出来的是给 STM32 跑的,在电脑上当然「跑不起来」,于是报个警告。它不影响编译你的固件
调试器这里用「捆绑的」即可。真正烧录调试用的 GDB 会在第四部分的运行配置里单独指定为 「捆绑的 GDB multiarch」(嵌入式调试要用 GDB,不是 LLDB)
第 3 步:配置 CMake 配置文件(Profile)—— 最关键的一步
进入 设置 → 构建、执行、部署 → CMake,点
+ 新建(或编辑已有的),命名为 Debug-STM32:
| 项 | 填什么 |
|---|---|
| 名称 | Debug-STM32 |
| 构建类型 | Debug |
| 工具链 | 选上一步建的 STM32 |
| 生成器 | 使用默认值(Ninja) |
| CMake 选项 | 见下方关键配置 ↓ |
| 构建目录 | cmake-build-debug-stm32(默认即可) |
关键:在「CMake 选项」里加上这一行:
1 | -DCMAKE_TOOLCHAIN_FILE=cmake/gcc-arm-none-eabi.cmake |
为什么必须加这行? 从 CubeMX 6.15 开始,工具链文件只写在
CMakePresets里、从CMakeLists.txt里移除了。结果 CLion 有时识别不到这个 toolchain 文件,导致用普通方式去链接测试程序,报出经典错误:arm-none-eabi-gcc - broken(编译器测试失败)。 手动加上-DCMAKE_TOOLCHAIN_FILE=...就是把工具链文件明确指给 CLion,问题即解
第 4 步:重新加载并编译
- 改完点 应用 / 确定,CLion 会自动重新跑 CMake。
- 看底部 CMake 面板出现
Configuring done/Build files have been written to...就说明配置成功了。 - 点顶部的 锤子图标(Build)
编译。成功后,
cmake-build-debug-stm32/目录里会生成你的工程名.elf(例如example_F103_LED.elf)—— 这就是要烧进芯片的固件。
💡 你可能会看到一句警告
Manually-specified variables were not used: CMAKE_TOOLCHAIN_FILE。这不是错误,放心忽略。因为 toolchain 文件只在第一次配置时读取并缓存,之后重新配置就不再读它了
四、配置 OpenOCD 烧录与调试
第 1 步:新建「OpenOCD 下载并运行」运行配置
顶部菜单 运行 → 编辑配置 → 点 + → 选
OpenOCD Download & Run(OpenOCD 下载并运行)
第 2 步:填写运行配置
| 项 | 填什么 |
|---|---|
| 名称 | 随便,如 example_F103_LED |
| 目标 / 可执行二进制文件 | 选你的工程目标,对应生成的 .elf |
| 调试器 | 捆绑的 GDB multiarch |
| 面板配置文件 | 见第 3 步,指向你写的 .cfg |
| 下载 | 如果已更新(If updated) |
| 重置 | 初始化(Init) |
| 执行前 | 保留「构建」(先编译再烧) |
「可执行的二进制文件」选不了,通常是因为还没编译出
.elf。先回第三部分 Build 一次,再回来选。
第 3 步:写「面板配置文件」(.cfg)
在工程根目录新建一个文件,例如
daplink.cfg。并把下面代码框的文件复制进去
它告诉 OpenOCD 两件事:用哪个调试器、芯片是什么。下面这份同时给出了三种调试器的写法,按你手上的设备保留对应行:
1 | # ============ 选择调试器(三选一,保留你用的那行)============ |
把这个文件路径填进运行配置的「面板配置文件」框(点 ...
选择)。填好后,底部那个红字 未定义面板配置文件
就会消失。
几个易踩的坑:
interface/stlink.cfg是新名字,旧的interface/stlink-v2.cfg已废弃。adapter speed别一上来就给很高(比如 10000 = 10MHz)。10MHz 对很多 DAPLink/克隆片不稳。先用 1000(1MHz)跑通,再按需提速
五、硬件接线与点灯
SWD 接线(4 根线)
把调试器(ST-Link/DAPLink/J-Link)和 Blue Pill 按下表对接,Blue Pill 板子一端那排针脚上有丝印标注:
| 调试器 | Blue Pill |
|---|---|
| SWDIO | SWDIO(DIO) |
| SWCLK | SWCLK(CLK) |
| GND | GND |
| 3.3V | 3V3 |
烧录
- 确认右上角运行配置选的是 「OpenOCD 下载并运行 → 你的工程名」(不是「CMake 应用程序」那个——那个是想在电脑上跑,对嵌入式没用)。
- 点绿色 三角(运行)。CLion 会:编译 → 通过 OpenOCD 把
.elf烧进芯片 → 复位运行。 - 看到 PC13 的灯按你的程序工作即成功
六、常见问题排查
| 现象 | 原因 / 解决 |
|---|---|
arm-none-eabi-gcc - broken、Detecting C compiler ABI info - failed |
CubeMX 6.15+ 的 toolchain 文件没被识别。在 CMake 选项里加
-DCMAKE_TOOLCHAIN_FILE=cmake/gcc-arm-none-eabi.cmake |
Manually-specified variables were not used: CMAKE_TOOLCHAIN_FILE |
只是警告,无害。toolchain 文件第一次已缓存,重配时不再读 |
| 工具链页黄色警告「测试 CMake 运行完成,但有错误」 | 正常现象。交叉编译器编出的程序在电脑上跑不了,不影响烧录 |
命令行 arm-none-eabi-gcc 找不到 |
PATH 没配好。mac 检查 ~/.zshrc,Win 检查系统环境变量
Path |
OpenOCD 报 Error: ... DAP、烧到一半失败 |
adapter speed 太高,降到 1000 试试;或接线/驱动问题 |
| OpenOCD 报 IDCODE / CPUTAPID 不匹配 | 用的是克隆芯片(如 CKS32F103)。在 .cfg
里 source target
之前加一行:set CPUTAPID 0(或
transport select hla_swd 上方设
set CPUTAPID 0x2ba01477) |
OpenOCD 找不到 interface/...cfg |
OpenOCD 位置没设。检查 设置 → 构建执行部署 → 嵌入式开发 → OpenOCD 位置(用「捆绑的」即可) |
| 灯不亮但烧录成功 | 想想 active-low:可能逻辑写反了,或灯一直是「灭」的那个电平 |
| Windows 上认不出调试器 | 装驱动:ST-Link 装 STSW-LINK009;DAPLink 用 Zadig 装 WinUSB;J-Link 装 Segger 包 |
七、附录:上传 GitHub 时提交什么、忽略什么
如果把这个工程作为示例上传 GitHub,建议在根目录的
.gitignore 里加入:
1 | # 编译产物 |
应该提交(别人重建工程需要的):Core/、Drivers/、CMakeLists.txt、CMakePresets.json、.ioc
文件、链接脚本(.ld)、启动文件(startup_*.s)、.mxproject、cmake/
文件夹,以及你这份 openocd.cfg。
.idea/是 CLion 的本机配置,对用别的编辑器的人没用,忽略掉更干净。如果你特别希望用 CLion 的人拿到相同运行配置,也可以选择提交它(CLion 在.idea里自带的.gitignore会自动排除纯本机文件)。
祝点灯顺利 💡







