3. X-CUBE-AI入门:安装、工作流程与工程集成
好,咱们正式开始动手了。这一章我带你走一遍 X-CUBE-AI 的完整流程——从安装扩展包,到把训练好的模型变成能在 STM32 上跑的代码。说白了,就是打通「训练」到「部署」的最后一公里。
我记得第一次用这个工具时,光安装就折腾了半天。后来摸清了门道,发现其实没那么复杂。咱们一步步来。
3.1 安装X-CUBE-AI扩展包
X-CUBE-AI 是 ST 官方提供的 AI 中间件扩展包。它不是一个独立软件,而是寄生在 STM32CubeMX 里的插件。所以前提是——你得先装好 STM32CubeMX,版本建议 6.6.0 以上。
安装步骤其实就三步:
- 打开 CubeMX,进入 Help → Manage embedded software packages
- 在 Packs 标签页里找到 X-CUBE-AI(或者直接搜 "AI")
- 勾选你需要的版本,点击 Install
等一下,这里有个坑。我曾经在项目里装了个旧版,结果模型死活转换不过去。后来才发现——X-CUBE-AI 的版本要和你的 CubeMX 主版本匹配。比如 CubeMX 6.8 配 X-CUBE-AI 8.0 以上才稳。
| CubeMX版本 | 推荐X-CUBE-AI版本 | 备注 |
|---|---|---|
| 6.6.x | 7.x | 基础功能可用 |
| 6.8.x | 8.0+ | 支持更多算子 |
| 6.10+ | 9.0+ | 推荐,性能优化更好 |
3.2 理解X-CUBE-AI的工作流程
装好之后,咱们得搞清楚它到底干了什么。X-CUBE-AI 的核心工作流可以概括为三个环节:模型转换 → 验证 → 部署。
我画了张图,你看一眼就明白了:
3.3 模型转换:从 .h5 到 C 代码
模型转换是 X-CUBE-AI 最核心的功能。你训练好的模型(比如 Keras 的 .h5 文件、TensorFlow Lite 的 .tflite、ONNX 的 .onnx),通过这个工具能直接变成能在 STM32 上跑的 C 代码。
具体操作是这样的:
- 在 CubeMX 里打开 X-CUBE-AI 面板(通常在 Pinout & Configuration 的 Software Packs 下)
- 选择你的模型文件(支持 .h5 / .tflite / .onnx)
- 配置量化选项(默认 float32,可选 int8 量化)
- 点击 Analyze——工具会分析模型结构,生成报告
- 点击 Generate Code——生成 C 代码和权重数组
关键点: 转换过程中,X-CUBE-AI 会做三件事:
- 解析模型结构(层类型、连接方式)
- 提取权重参数(float 或 int8)
- 生成推理引擎代码(包含算子实现)
你想想看,一个几 MB 的模型文件,转换后变成几千行 C 代码和一个巨大的数组。我第一次看到生成的代码时,心里想的是——这玩意儿真能在 STM32 上跑?后来实测发现,不仅跑得动,还跑得挺稳。
3.4 验证:确保模型没跑偏
转换完不等于完事。你得验证一下——生成的 C 代码推理结果和原始模型是不是一致的。X-CUBE-AI 提供了两种验证方式:
| 验证方式 | 说明 | 适用场景 |
|---|---|---|
| PC 仿真 | 在 PC 上运行生成的 C 代码,对比输出 | 快速验证,无需硬件 |
| 板端运行 | 烧录到 STM32 上实际跑一次 | 最终确认,考虑硬件差异 |
我个人习惯先用 PC 仿真跑一遍。如果输出误差在 1% 以内,基本就稳了。如果误差太大——嗯,八成是量化精度丢了,或者模型里有不支持的算子。
3.5 生成AI库并集成到CubeMX工程
验证通过后,最后一步就是生成 AI 库,然后集成到你的 CubeMX 工程里。这一步其实 X-CUBE-AI 已经帮你自动化了——你只需要在 CubeMX 里点几下鼠标。
具体操作:
- 在 X-CUBE-AI 面板里,点击 "Generate Code"
- CubeMX 会自动生成一个 AI 库文件夹(通常在 Middlewares/ST/AI 下)
- 同时生成一个示例工程(包含 main.c 和调用代码)
- 你只需要在 main.c 里调用 AI_Run() 函数,传入输入数据,拿到输出结果
生成的代码结构大概是这样的:
Project/
├── Inc/
│ ├── ai_platform.h // AI 平台抽象层
│ ├── network.h // 网络结构定义
│ └── network_data.h // 权重数据声明
├── Src/
│ ├── main.c // 主函数(含推理调用)
│ ├── network.c // 网络实现
│ └── network_data.c // 权重数据(巨大数组)
└── Middlewares/
└── ST/
└── AI/
├── Inc/ // AI 库头文件
└── Lib/ // AI 库二进制文件
集成完成后,你的工程里就多了一个 AI 推理引擎。调用方式很简单:
// 初始化 AI 模型
AI_Network ai_net;
ai_network_create(&ai_net, AI_NETWORK_DATA_CONFIG);
// 准备输入数据(假设是 32x32 的灰度图)
float input[1024];
// ... 填充 input 数据 ...
// 运行推理
ai_network_run(&ai_net, input, output);
// 获取输出结果
float *result = (float*)ai_network_get_output(&ai_net, 0);
你看,核心代码就这么几行。剩下的就是你的业务逻辑了——比如从传感器读数据、处理输出结果、控制外设等。
3.6 本章小结
这一章咱们走完了 X-CUBE-AI 的完整流程:安装 → 模型转换 → 验证 → 部署集成。说白了,就是把一个训练好的模型文件,变成能在 STM32 上跑的 C 代码,然后集成到你的工程里。