STM32CubeMX2 除支持传统 IAR、CMake 工程输出之外,新增Open‑CMSIS(CSolution)工程格式,顶层工程描述文件为*.csolution.yml,该格式由 Arm 推出,支持 AC6、IAR、GCC 多套编译器,在 VS‑Code 环境下依靠Keil Studio Pack 扩展完成编译下载调试。
很多开发者初次接触该工作流容易踩坑:扩展版本自动更新引发兼容性异常、工程无法识别、工具链下载失败、下载固件后无法停到 main 函数。本文基于 ST 官方 LAT1696 文档完整梳理工程生成、环境准备、工程导入、工具链配置、编译调试全流程,梳理高频故障排查要点。
重要区分:Open‑CMSIS(CSolution)使用 Keil Studio Pack 扩展;CMake 工程使用 STM32CubeIDE for VS‑Code 扩展;两套 VS‑Code 扩展不可混用,建议使用 Profile 做环境隔离。
资料获取:【实战经验】LAT1696 编译与调试STM32CubeMX2生成的Open-CMSIS工程
1 Open‑CMSIS(CSolution)基础概念
- Open‑CMSIS 工程,核心是
csolution.yml,也叫 CSolution 工程; - 支持编译器:AC6(Arm Compiler 6,Keil MDK‑V6 使用编译器)、IAR、GCC;本文重点使用 AC6;
- IDE 载体:VS‑Code + Arm Keil Studio Pack 扩展包,和传统 Keil uVision5 不是同一套程序;
- 底层构建工具:
cbuild,自动拉取 CMSIS‑Toolbox、编译器、ninja 等工具链组件。
2. STM32CubeMX2 生成 Open‑CMSIS AC6 工程
- 在 STM32CubeMX2 完成芯片选型、引脚时钟、外设配置,保存
.ioc2工程配置; - 打开【Project Settings】→【IDE Project Generation】;
Format选项选择Open‑CMSIS,Open‑CMSIS toolchain选择AC6;- 点击【Generate IDE project】生成工程。
生成后目录结构
输出目录包含.ioc2配置文件与xxx_open‑cmsis工程文件夹。 工程文件夹内关键文件:
demo.csolution.yml:CSolution 顶层工程描述文件;- arch、project、stm32c5xx_dfp、stm32c5xx_drivers:驱动、DFP 固件包、用户代码目录。
打开工程两种方式:
- 在工程文件夹右键,选择【Open with Code】直接唤起 VS‑Code;
- 先打开 VS‑Code,执行「打开文件夹」,选中
xxx_open‑cmsis目录。
3. VS‑Code 环境准备
安装指定版本 Keil Studio Pack
VS‑Code 扩展市场安装Arm Keil Studio Pack (MDK v6),文档验证版本为1.20.1。
高频坑:扩展自动更新后容易出现版本不兼容。 处理方法:点击扩展设置齿轮,选择Install Specific Version安装指定版本,关闭 Auto Update 自动更新。配套Arm CMSIS Debugger建议锁定版本 1.3.0。
安装完成后 VS‑Code 侧边栏出现 CMSIS 解决方案视图图标。
4. CSolution 工程配置步骤
4.1 打开解决方案设置(Manage Solution Settings)
- 点击 CMSIS 视图右上角齿轮图标【Manage Solution Settings】;
- Debug Adapter 调试适配器选择
ST‑Link@pyOCD; - Debug Interface 选择 SWD,调试时钟建议设置 4000kHz;勾选
Update launch.json and tasks.json自动生成调试任务配置,保存配置。
4.2 Arm 工具链环境配置
- 点击底部状态栏工具配置按钮,选择【Add Arm Tools Configuration to Workspace】;
- 在
Arm Registry工具注册表界面,选择各工具版本:- Arm CMSIS‑Toolbox:2.12.0
- Arm Compiler for Embedded:6.24.0
- MDK‑Toolbox:1.1.0
- Kitware CMake:3.31.5
- Ninja Build:1.13.2
- 其余工具选择
None;
- 保存后生成
vcpkg‑configuration.json配置文件。
首次编译会联网自动下载上面全套工具链,网络异常会直接编译失败。
5. 工程编译
工具链环境就绪之后,在 CMSIS 视图点击 Build 编译按钮,底层调用cbuild命令执行构建。 示例命令行:
cbuild demo.csolution.yml --target all --active NUCLEO‑C5A3ZG --packs --skip‑convert
终端观察输出,编译无报错即可产出固件镜像。
6. 下载与调试
常见现象:下载成功,但是无法停在 main 函数。临时处理手段:开发板断电重新上电,再次启动调试会话。
- 后续支持单步、断点、寄存器查看等常规调试操作。
7. 故障排查清单
- VS‑Code 打开文件夹,CMSIS 视图识别不到 csolution 工程
- 确认打开的是
xxx_open‑cmsis文件夹,不要向上 / 向下选错目录;确认目录内存存在demo.csolution.yml; - 确认 Keil Studio Pack 扩展已启用,没有禁用。
- 确认打开的是
- 编译报错,工具链组件下载失败
- 检查网络,需要访问 Arm 工具仓库;企业内网需要放行网络访问;
- 核对
vcpkg‑configuration.json各工具版本;可以复用本地已经下载过的工具版本减少下载耗时。
- 编译成功,下载成功,但程序不跑,不会停到 main
- 硬件层面:尝试板子完全断电再重新上电,再启动调试;
- 检查 pyOCD 调试适配器配置,SWD 接口,调试时钟参数。
- 升级扩展版本之后工程异常、功能消失
- 不要使用自动更新,按照文档锁定扩展指定版本;卸载新版本,手动安装经过验证的版本,关闭自动更新。
- 混淆两套 VS‑Code 扩展,拿 STM32CubeIDE for VS‑Code 打开 CSolution 工程
- Open‑CMSIS CSolution 工程只能使用 Keil Studio Pack 扩展;CMake 工程使用 STM32CubeIDE for VS‑Code,两套扩展不能混用;建议使用 VS‑Code Profile 功能做两套环境隔离。
8. 小结
- STM32CubeMX2 新增 Open‑CMSIS(CSolution)工程输出,顶层文件为
.csolution.yml,主要配合 VS‑Code +Arm Keil Studio Pack扩展,使用 AC6 编译器。 - 关键风险点:扩展自动更新会引入兼容性问题,建议锁定验证过的扩展版本,关闭自动更新;Open‑CMSIS 与 CMake 两套 VS‑Code 环境需要区分,推荐 Profile 隔离。
- 完整流程:CubeMX2 生成 Open‑CMSIS 工程 → VS‑Code 安装 Keil Studio Pack → Manage Solution Settings 配置调试适配器 → 配置 Arm Registry 工具链 → cbuild 编译 → pyOCD 下载调试。
- 调试遇到下载成功不进入 main,优先对目标板断电重启,这是该工作流常见临时处理手段;编译依赖联网下载工具链,内网环境需要处理网络访问。
9. FAQ
Q:Open‑CMSIS 工程可以使用 GCC/IAR 编译器吗?
A:csolution 格式原生支持 IAR/GCC,本文案例重点演示 AC6;在 CubeMX2 生成时切换 toolchain 选项即可。
Q:csolution 工程和传统 uVision .uvprojx 工程可以互相直接转换吗?
A:不能直接双向转换;csolution 是新一代工程描述格式,面向 VS‑Code Keil Studio Pack。
Q:离线环境可以编译 Open‑CMSIS 工程吗?
A:默认流程需要联网下载工具链;离线需要预先准备好全套 cmsis‑toolbox、编译器、ninja 组件,在 vcpkg 配置指向本地缓存。
免责声明:本文全部基于 ST 官方 LAT1696 文档,实际开发请以 Arm CMSIS‑Toolbox 文档、STM32CubeMX2 官方说明为准。
322