本节是在前面的 GCC + CMake + Ninja + clangd 环境基础上继续配置,面向 RoboMaster 电控嵌入式项目。
本节只配置编译、Kconfig、代码格式化以及后续烧录工具所需的基础环境,不涉及 VSCode 调试器、GDB、断点调试等配置。
推荐版本尽量使用当前稳定版;如果项目本身锁定了某个工具链版本,以项目要求为准。
| 工具 | 推荐版本 | 作用 |
|---|---|---|
| Arm GNU Toolchain | 15.3.rel1 | ARM Cortex-M 交叉编译器,提供 arm-none-eabi-gcc/g++ |
| Python | 3.14.x | Kconfiglib 的运行环境 |
| Kconfiglib | 14.1.0 | 解析 Kconfig、生成配置结果等 |
| clangd | 23.1.2 | C/C++ 代码补全、跳转、报错 |
| clang-format | 23.1.2 | C/C++ 代码自动格式化 |
| Node.js | 24.21.0 LTS | 部分工程脚本、工具链周边工具的运行环境 |
| OpenOCD | 0.12.0 | 后续连接调试器、烧录/下载固件的工具;本教程只完成安装,不配置调试 |
Arm GNU Toolchain 15.3.rel1 是当前可用的新版 Arm GNU Toolchain,版本号中的 GCC 为 15.3.1。Arm 官方同时提供 Windows 和 Linux 的
arm-none-eabi裸机工具链。LLVM 23.1.2 同时包含 clangd 和 clang-format,因此不需要分别安装两个 LLVM。
Kconfiglib 当前最新发布版本为 14.1.0,支持 Python 3.2 及以上。
Arm GNU Toolchain 是真正负责把 RoboMaster 电控 C/C++ 代码编译成 ARM Cortex-M 可执行代码的编译器。这里安装的是 arm-none-eabi 裸机工具链,原先的 GCC 仅用于你们练习简单的 C++ 代码,并不适用于嵌入式系统。
官方页面:
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
推荐直接从 Arm 官方下载,替代 MinGW 的 gcc 。
下载:
arm-gnu-toolchain-15.3.rel1-win32-x86_64-arm-none-eabi.zip
解压到一个路径中不要出现中文和空格的位置,例如:
C:/Arm/arm-gnu-toolchain-15.3.rel1-win32-x86_64-arm-none-eabi
然后把下面的 bin 目录加入 Windows 的 PATH:
C:/Arm/arm-gnu-toolchain-15.3.rel1-win32-x86_64-arm-none-eabi/bin
加 PATH 的方法:开始菜单搜索「编辑系统环境变量」→「环境变量」→ 找到 Path →「编辑」→「新建」。
加完以后重新打开 VSCode 和终端。
验证:
arm-none-eabi-gcc --version
arm-none-eabi-g++ --version
arm-none-eabi-objcopy --version能看到 15.3.1 左右的版本信息即可。
Ubuntu / Debian x86_64 推荐从 Arm 官方下载:
arm-gnu-toolchain-15.3.rel1-x86_64-arm-none-eabi.tar.xz
解压到 /opt:
cd /tmp
tar -xf arm-gnu-toolchain-15.3.rel1-x86_64-arm-none-eabi.tar.xz
sudo mv arm-gnu-toolchain-15.3.rel1-x86_64-arm-none-eabi /opt/加入 PATH:
echo 'export PATH="/opt/arm-gnu-toolchain-15.3.rel1-x86_64-arm-none-eabi/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc验证:
arm-none-eabi-gcc --version
arm-none-eabi-g++ --version
arm-none-eabi-objcopy --version如果使用的是 zsh,把
~/.bashrc换成~/.zshrc。
Kconfiglib 是 Kconfig 系统的 Python 实现,后面的电控项目可能会用它生成配置结果、配置头文件等。
推荐从 Python 官方下载安装 Python 3.14:
https://www.python.org/downloads/windows/
安装时一定注意勾选:
Add python.exe to PATH
安装完成后重新打开 bash,验证:
python --version
python -m pip --version然后安装 Kconfiglib:
python -m pip install --upgrade pip
python -m pip install kconfiglib验证:
python -m pip show kconfiglib
menuconfig --help如果提示
menuconfig不是命令,不一定代表 Kconfiglib 没装好。Windows 下如果使用pip --user,还需要把 Python 的Scripts目录加入 PATH。本教程只要求 Kconfiglib 能正常安装和运行;如果后续项目需要 Windows 下的终端
menuconfig界面,再额外处理终端 curses 兼容问题。
Ubuntu / Debian:
sudo apt update
sudo apt install python3 python3-pip python3-venv验证:
python3 --version
python3 -m pip --version安装 Kconfiglib:
python3 -m pip install --user --upgrade kconfiglib验证:
python3 -m pip show kconfiglib如果 menuconfig 命令找不到,把用户 Python 的 bin 目录加入 PATH。常见情况:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc然后:
menuconfig --help如果发行版限制直接使用系统 Python 的 pip,优先使用 Python 虚拟环境,而不是强行修改系统 Python。
前面的基础环境已经要求安装 clangd;这里建议把 LLVM 统一到 23.1.2,这样同时得到:
clangd
clang-format
LLVM 官方发布页:
https://github.com/llvm/llvm-project/releases
最简单的方法是下载 LLVM 官方 Windows 安装包:
LLVM-23.1.2-win64.exe
安装时勾选:
Add LLVM to the system PATH
安装完成后重新打开 bash 和 VSCode。
验证:
clangd --version
clang-format --version两个版本都应为 23.1.2 左右。
如果之前已经通过 Chocolatey 安装过 LLVM,不需要重复安装。直接确认:
clangd --version
clang-format --version如果版本已经满足 >= 20,可以继续使用。
为了避免 Ubuntu 自带仓库中的 LLVM 版本过旧,这里推荐直接使用 LLVM 官方发布的预编译包。
打开:
https://github.com/llvm/llvm-project/releases
下载 Linux x86_64 对应的 LLVM 23.1.2 压缩包,然后解压,例如:
sudo mkdir -p /opt/llvm-23
sudo tar -xf clang+llvm-23.1.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz \\
--strip-components=1 -C /opt/llvm-23加入 PATH:
echo 'export PATH="/opt/llvm-23/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc验证:
clangd --version
clang-format --version如果你使用的发行版提供了
clangd >= 20和clang-format >= 20,也可以直接使用发行版的软件包,不必手动安装 LLVM。
安装完成后,进入 打开用户设置界面(JSON),copy 大括号这份代码至 setting.json,替代原先的 mingw,这会对你的所有项目生效:
{
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/build",
"--log=verbose",
"--pretty",
"--all-scopes-completion",
"--completion-style=bundled",
"--cross-file-rename",
"--header-insertion=iwyu",
"--header-insertion-decorators",
"--background-index",
"--clang-tidy",
"--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*",
"--pch-storage=memory",
"--function-arg-placeholders=false",
"--fallback-style=llvm",
// Windows,替换成自己的
"--query-driver=D:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/14.3 rel1/bin/arm-none-eabi*",
// Linux,替换成自己的
"--query-driver=/home/gdfish/usr/arm-gnu-toolchain/bin/arm-none-eabi*"
],
} Node.js 是可以在电脑端运行的 JavaScript 的运行时环境。
官方下载页面:
https://nodejs.org/en/download/
当前 24.x LTS 为:
Node.js v24.21.0 LTS
可以直接安装官方 MSI:node-v24.21.0-x64.msi
也可以使用管理员 bash:
winget install --id OpenJS.NodeJS.24 -e安装完成后重新打开终端:
node --version
npm --version应分别看到类似:
v24.21.0
11.x
推荐使用 nvm,以后切换 Node.js 版本比较方便:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.7/install.sh | bash重新加载:
source ~/.bashrc安装 Node.js 24:
nvm install 24
nvm use 24
nvm alias default 24验证:
node --version
npm --versionOpenOCD 是:Open On-Chip Debugger
它负责让电脑上的调试软件与 STM32 等 MCU 的调试接口进行通信。
OpenOCD 官网:
官方 Getting OpenOCD 页面:
https://openocd.org/pages/getting-openocd.html
Windows 和 Linux 都统一从 OpenOCD 官方网站进入下载/获取页面。
需要注意:OpenOCD 官方网站目前主要提供源码和发行版获取说明,并不长期维护一个独立的 Windows 官方安装器。官网的 Getting OpenOCD 页面明确区分了操作系统软件仓库、源码以及第三方预编译二进制包。
打开 OpenOCD 官网:
进入:
https://openocd.org/pages/getting-openocd.html
在 Getting OpenOCD 页面查看 Windows 可用的二进制发行版。
如果使用预编译的 Windows ZIP:
- 下载 Windows 64 位版本。
- 解压到固定目录并加入系统 PATH。
重新打开 bash:
openocd --version能够正常输出版本号即可。
OpenOCD 本身只是软件,还需要操作系统能够识别实际的调试器, 调试时需要断点测试和实时查看变量:在 VsCode上下载 Cortex-Debug 插件。
本文只负责把 OpenOCD 安装好,对于 ST-Link/J-Link 的具体驱动,需要自行找官网,按需配置:
- ST-Link
ST官方驱动页面: https://www.st.com/en/development-tools/stsw-link009.html
下载并安装完成后,将 ST-Link 连接电脑即可。
可以打开 Windows「设备管理器」检查 ST-Link 是否正常识别。
Linux 的 ST-Link 通常不需要像 Windows 那样安装一个独立的 ST-Link USB 驱动,主要是配置 udev 规则和 OpenOCD/其他调试软件的访问权限。
- J-Link
SEGGER 官方提供的是 J-Link Software and Documentation Pack,里面包含 J-Link 所需的软件和驱动。
官方下载链接: https://www.segger.com/downloads/jlink?utm_source=chatgpt.com
安装完成后重新连接 J-Link 即可。
可以使用 SEGGER 提供的 JLinkExe 检查 J-Link 是否正常识别。
Linux 同样从 OpenOCD 官方网站进入:
https://openocd.org/pages/getting-openocd.html
Linux 用户有两种方式:
Ubuntu / Debian:
sudo apt update
sudo apt install openocd安装完成:
openocd --version如果发行版仓库版本满足项目要求,直接使用即可。
如果需要使用 OpenOCD 官网提供的源码版本,则从:
https://openocd.org/pages/getting-openocd.html
进入官方源码获取页面。
下载源码压缩包后按照官方文档进行构建。
OpenOCD 官方文档:
构建完成后验证:
openocd --version把前面所有环境配置好后,重新打开终端。
在 bash 执行:
arm-none-eabi-gcc --version
python --version
python -m pip show kconfiglib
clangd --version
clang-format --version
node --version
npm --version
openocd --version
cmake --version
ninja --version在终端执行:
arm-none-eabi-gcc --version
python3 --version
python3 -m pip show kconfiglib
clangd --version
clang-format --version
node --version
npm --version
openocd --version
cmake --version
ninja --version| 问题 | Windows | Linux |
|---|---|---|
arm-none-eabi-gcc 不是命令 |
检查 Arm GNU Toolchain 的 bin 是否加入 PATH,然后重开终端 |
检查 /opt/arm-gnu-toolchain-*/bin 是否加入 PATH,然后重新加载 shell |
python / python3 不是命令 |
重新安装 Python,并勾选 Add python.exe to PATH |
安装 python3,并确认 /usr/bin/python3 存在 |
Kconfiglib 安装后 menuconfig 不是命令 |
检查 Python Scripts 目录是否在 PATH |
检查 ~/.local/bin 是否在 PATH |
pip install kconfiglib 报权限错误 |
使用 python -m pip install --user kconfiglib |
使用 --user 或 Python 虚拟环境,不要破坏系统 Python |
clangd 版本太旧 |
不要混用多个 LLVM,建议统一安装 LLVM 23.1.2 | 优先使用 LLVM 官方版本,或确认发行版版本满足 >= 20 |
clang-format 不是命令 |
确认 LLVM 的 bin 在 PATH |
确认 /opt/llvm-23/bin 或系统 LLVM 的 bin 在 PATH |
node 不是命令 |
重开终端;确认 winget 安装成功 |
检查 nvm 是否加载,再执行 nvm use 24 |
openocd 不是命令 |
检查 C:\msys64\ucrt64\bin 是否加入 PATH |
重新执行 sudo apt install openocd |
| Arm 工具链能找到但 CMake 找不到 | 后续 CMake 配置时确认使用的是 arm-none-eabi-gcc,不要误用 PC 上的 x86 GCC |
同左 |
| PATH 修改后没有效果 | 重开 VSCode 和终端,已经打开的终端不会自动刷新 PATH | 重新打开终端或 source ~/.bashrc |
到这里,电控项目从编译到运行的架构为:
C/C++ 源代码
│
▼
┌─────────────────────┐
│ CMake │
│ 管理整个工程构建 │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Ninja │
│ 执行构建任务 │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Arm GNU Toolchain │
│ arm-none-eabi-gcc │
│ arm-none-eabi-g++ │
└──────────┬──────────┘
│
▼
.elf
Kconfig ──→ Kconfiglib ──→ 配置结果 / 配置头文件
VSCode ──→ clangd ──→ 补全 / 定义跳转 / 代码检查
C/C++ ──→ clang-format ─→ 统一代码格式
工程脚本 ──→ Node.js 24 ──→ JavaScript / Node 工具
后续烧录 ──→ OpenOCD ──→ 调试器 / MCU
1、在 cubemx 中创建一个项目,名为 test,在 Project Manager 的 Toochain/IDE 选择 Cmake, Code Genderator 中选择 Copy only the necessary library file。这样,你们原先在 Keil 上的工作可以在 VsCode 上全部完成。
2、在项目的 CMakeLists.txt 第 20 行添加 include(cmake/gcc-arm-none-eabi.cmake)
3、编译
cmake -B build -G Ninja
ninja -C build4、烧录
openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c 'program ./build/test.elf verify reset exit'其中 target/stm32f1x.cfg 与 ./build/test.elf 在其他文件中需要换成自己实际用的芯片型号和 elf 文件
5、烧录成功会提示:
Programming Finished
Verify Started
Verified OK
Resetting Target
6、调试文件
在项目中创建 .vscode/launch.json 文件:
{
"version": "0.2.0",
"configurations": [
{
"showDevDebugOutput": "none",
"cwd": "${workspaceFolder}",
"executable": "./build/test.elf",
"name": "dap",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"interface/cmsis-dap.cfg",
"target/stm32f1x.cfg"
],
"liveWatch": {
"enabled": true,
"samplesPerSecond": 1
}
}
]
}编译成功后点击 Run nad Debug 运行和调试, 点击 dap 开始调试。