2. STM32N6 NPU开发环境搭建
STM32N6 是 ST 首颗集成自研 Neural-ART NPU 的 MCU,其 NPU 算力约 600 GOPS,配合 4.2 MB 片上 SRAM 与外部 PSRAM,可以运行 MobileNet、YOLO 系列等中小型视觉模型。但要让模型真正跑在 NPU 上,第一步不是写推理代码,而是把"模型 → 量化 → 代码生成 → 工程编译"这条工具链搭起来。本节围绕 ST 官方提供的四类工具,说明它们各自的职责、安装方式以及如何协同工作。
一、工具链全景:谁负责什么
很多初学者会把 STM32CubeMX、STM32Cube.AI、X-CUBE-AI 和 ST Edge AI Developer Cloud 混为一谈,实际上它们处在模型部署链路的不同位置:
- STM32CubeMX:图形化配置工具,负责芯片选型、时钟树、外设(如 OCTOSPI、DCMI、UART)与中间件(X-CUBE-AI)的初始化,最终生成
.ioc工程与 C 代码骨架。 - X-CUBE-AI 扩展包:STM32CubeMX 的一个中间件组件,内含
stedgeai命令行工具与运行时库(Network Runtime),负责把.tflite/.onnx模型转成 C 数组并生成推理 API。 - STM32Cube.AI:早期对 X-CUBE-AI 的统称,现在更多指代"AI 模型部署"这一产品线,包含 CubeMX 内的插件与独立命令行。
- ST Edge AI Developer Cloud:ST 提供的在线服务,可上传模型,在云端完成量化、基准测试(benchmark)并给出每层耗时、内存占用报告,适合在本地算力不足或需要快速评估模型可行性时使用。
下图给出这四者在一次典型部署中的位置与数据流向:
二、本地工具链安装
推荐使用 STM32CubeMX 6.11 及以上版本,因为 X-CUBE-AI 从 9.x 起才完整支持 STM32N6 的 Neural-ART NPU。安装步骤如下:
- 从 ST 官网下载并安装 STM32CubeMX(Windows/Linux/macOS 均可)。
- 打开 CubeMX,进入
Help → Manage embedded software packages,在 STMicroelectronics 分类下找到 X-CUBE-AI,勾选最新版本(如 10.0.0)并 Install。安装完成后,扩展包会落在~/.stm32cube/Repository/Packs/STMicroelectronics/X-CUBE-AI/目录下。 - 同时安装 STM32CubeN6 固件包(含 HAL 驱动与 N6 的 BSP),否则新建工程时找不到 STM32N6 器件。
- 若使用命令行,可单独安装
stedgeai:在扩展包目录下执行Utilities/linux/stedgeai(或对应平台的可执行文件),验证stedgeai --version能输出版本号。
Neural-ART,否则模型会退化为 CPU 推理,速度差一个数量级。
三、在 CubeMX 中导入模型并生成代码
以 MobileNetV2 0.35 为例,假设已有一个 mobilenetv2_035_int8.tflite(INT8 量化版)。操作流程:
- 新建工程,选择
STM32N657X0H3Q(N6 系列常见型号),配置好时钟与调试接口。 - 在 Middleware 中勾选 X-CUBE-AI,进入其配置界面,点击 Add network,选择上述 tflite 文件。
- 设置 Runtime 为 Neural-ART,Compression 可选 None(调试期)或 RLE(减小 Flash 占用)。
- 点击 Analyze,CubeMX 会调用 stedgeai 解析模型,输出每层算子、权重占用、激活内存峰值。若某层不被 NPU 支持,会以黄色警告标出,并回退到 CPU。
- 生成代码后,工程中会出现
X-CUBE-AI/App/network.c、network.h与network_data.c(权重数组)。
生成的 API 非常简洁,核心调用如下:
#include "network.h"
ai_handle network;
ai_buffer *ai_input;
ai_buffer *ai_output;
/* 初始化 */
ai_error err = ai_network_create_and_init(&network, ai_input, ai_output);
if (err.type != AI_ERROR_NONE) { /* 处理错误 */ }
/* 填充输入:假设输入为 96x96x3 的 INT8 张量 */
ai_input[0].data = AI_HANDLE_PTR(input_buf);
/* 推理 */
ai_i32 n_batch = ai_network_run(network, ai_input, ai_output);
/* 读取输出 */
int8_t *out = (int8_t *)ai_output[0].data;
其中 input_buf 需按模型要求的量化参数(scale、zero_point)把图像像素映射到 INT8。例如输入量化参数为 scale=0.0078, zero_point=-1,则 q = round(pixel/255 / 0.0078) - 1,这一步若做错,推理结果会完全失真。
四、ST Edge AI Developer Cloud 的使用
当本地没有安装扩展包,或想快速对比不同量化方案时,可访问 ST Edge AI Developer Cloud(stedgeai.st.com)。注册后新建一个 project,上传 .tflite 或 .onnx,选择目标板卡(如 STM32N6570-DK),云端会:
- 自动完成 INT8 量化(若上传的是浮点模型);
- 生成每层耗时、内存占用、Flash 占用的 benchmark 报告;
- 提供可下载的 C 代码包,结构与本地 CubeMX 生成的一致。
需要注意,云端 benchmark 的耗时数据是在服务器上模拟得到的,与真实 N6 板卡会有偏差,通常用于横向比较不同模型结构,而不是作为最终性能指标。最终性能仍需在板卡上用 ai_network_run 配合 DWT 计数器实测。
五、环境验证清单
工具链搭好后,建议按以下顺序做一次最小验证,确认每一环都通:
| 检查项 | 验证方法 | 预期结果 |
|---|---|---|
| CubeMX 版本 | Help → About | ≥ 6.11 |
| X-CUBE-AI 安装 | Manage packages 中可见 | 版本 ≥ 10.0.0 |
| stedgeai 可用 | 命令行执行 stedgeai --version | 输出版本号 |
| 模型可解析 | CubeMX 中 Analyze 模型 | 无红色错误,层信息完整 |
| NPU 生效 | 查看生成报告中的 Runtime | 显示 Neural-ART |
| 板卡可运行 | 烧录后串口打印推理耗时 | MobileNetV2 0.35 约数 ms 级 |
ai_network_create_and_init 返回 AI_ERROR_INVALID_PARAM;② 忘记把 Runtime 切到 Neural-ART,性能远低于预期;③ 权重数组放在内部 Flash 但未开启 XIP 或未正确配置 OCTOSPI,运行时取指失败。遇到问题优先检查这三项。
完成本节配置后,你应当拥有一个能在 STM32N6 上编译、烧录并调用 NPU 推理的最小工程。下一阶段的工作——模型量化策略、算子替换与内存布局优化——都将在这个工程基础上展开。