3. X-CUBE-AI入门:安装、工作流程与工程集成

好,咱们正式开始动手了。这一章我带你走一遍 X-CUBE-AI 的完整流程——从安装扩展包,到把训练好的模型变成能在 STM32 上跑的代码。说白了,就是打通「训练」到「部署」的最后一公里。

我记得第一次用这个工具时,光安装就折腾了半天。后来摸清了门道,发现其实没那么复杂。咱们一步步来。

3.1 安装X-CUBE-AI扩展包

X-CUBE-AI 是 ST 官方提供的 AI 中间件扩展包。它不是一个独立软件,而是寄生在 STM32CubeMX 里的插件。所以前提是——你得先装好 STM32CubeMX,版本建议 6.6.0 以上。

我的习惯: 装 CubeMX 时顺手把固件包也下了,省得后面来回切界面。

安装步骤其实就三步:

  1. 打开 CubeMX,进入 Help → Manage embedded software packages
  2. 在 Packs 标签页里找到 X-CUBE-AI(或者直接搜 "AI")
  3. 勾选你需要的版本,点击 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+ 推荐,性能优化更好
注意: 安装过程中不要断网。X-CUBE-AI 包大概 200-300MB,下载时间取决于你的网速。我建议用有线网络,Wi-Fi 偶尔会掉包。

3.2 理解X-CUBE-AI的工作流程

装好之后,咱们得搞清楚它到底干了什么。X-CUBE-AI 的核心工作流可以概括为三个环节:模型转换 → 验证 → 部署。

我画了张图,你看一眼就明白了:

X-CUBE-AI 工作流程 训练模型 (.h5 / .tflite / .onnx) 模型转换 生成 C 代码 + 权重 验证 PC 仿真 / 板端运行 部署 集成到 CubeMX 工程 核心:X-CUBE-AI 将训练框架的模型文件转换为 STM32 可执行的 C 代码 + 权重数组

3.3 模型转换:从 .h5 到 C 代码

模型转换是 X-CUBE-AI 最核心的功能。你训练好的模型(比如 Keras 的 .h5 文件、TensorFlow Lite 的 .tflite、ONNX 的 .onnx),通过这个工具能直接变成能在 STM32 上跑的 C 代码。

具体操作是这样的:

  1. 在 CubeMX 里打开 X-CUBE-AI 面板(通常在 Pinout & Configuration 的 Software Packs 下)
  2. 选择你的模型文件(支持 .h5 / .tflite / .onnx)
  3. 配置量化选项(默认 float32,可选 int8 量化)
  4. 点击 Analyze——工具会分析模型结构,生成报告
  5. 点击 Generate Code——生成 C 代码和权重数组

关键点: 转换过程中,X-CUBE-AI 会做三件事:

  • 解析模型结构(层类型、连接方式)
  • 提取权重参数(float 或 int8)
  • 生成推理引擎代码(包含算子实现)

你想想看,一个几 MB 的模型文件,转换后变成几千行 C 代码和一个巨大的数组。我第一次看到生成的代码时,心里想的是——这玩意儿真能在 STM32 上跑?后来实测发现,不仅跑得动,还跑得挺稳。

3.4 验证:确保模型没跑偏

转换完不等于完事。你得验证一下——生成的 C 代码推理结果和原始模型是不是一致的。X-CUBE-AI 提供了两种验证方式:

验证方式 说明 适用场景
PC 仿真 在 PC 上运行生成的 C 代码,对比输出 快速验证,无需硬件
板端运行 烧录到 STM32 上实际跑一次 最终确认,考虑硬件差异

我个人习惯先用 PC 仿真跑一遍。如果输出误差在 1% 以内,基本就稳了。如果误差太大——嗯,八成是量化精度丢了,或者模型里有不支持的算子。

我曾经踩过的坑: 有一次模型里用了自定义层,X-CUBE-AI 直接报错说不支持。后来我把自定义层改成了标准层组合,才顺利通过。所以——模型结构越标准,转换越顺利。

3.5 生成AI库并集成到CubeMX工程

验证通过后,最后一步就是生成 AI 库,然后集成到你的 CubeMX 工程里。这一步其实 X-CUBE-AI 已经帮你自动化了——你只需要在 CubeMX 里点几下鼠标。

具体操作:

  1. 在 X-CUBE-AI 面板里,点击 "Generate Code"
  2. CubeMX 会自动生成一个 AI 库文件夹(通常在 Middlewares/ST/AI 下)
  3. 同时生成一个示例工程(包含 main.c 和调用代码)
  4. 你只需要在 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 库二进制文件
小技巧: 生成的 network_data.c 文件可能非常大(几 MB 甚至几十 MB)。编译时记得把优化等级调到 -O2 或 -Os,否则链接时间会很长。我试过 -O0 编译一个 5MB 的权重文件,等了快两分钟。

集成完成后,你的工程里就多了一个 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 代码,然后集成到你的工程里。