1. 课程导入与工程全景

STM32 边缘 AI 部署,指的是把在 PC 或服务器上训练好的神经网络模型,经过量化、格式转换与代码集成,最终运行在 STM32 微控制器上,由 MCU 自身完成推理,而不是把原始数据上传到云端。它与“云端 AI”最本质的区别在于约束条件:STM32 通常只有几十到几百 KB 的 SRAM、几百 KB 到几 MB 的 Flash,主频在几十到几百 MHz,且往往没有操作系统或只有 RTOS。因此边缘 AI 部署的核心矛盾是——模型精度与资源占用之间的平衡。

典型应用场景包括:工业设备上的振动异常检测(用加速度计 + 1D-CNN 判断轴承状态)、可穿戴设备的心率/步态识别、智能家居的离线关键词唤醒(KWS)、电机驱动的故障电弧识别、以及电池供电的预测性维护节点。这些场景的共同点是:数据敏感或带宽受限、要求低延迟、要求长期稳定运行,且功耗预算严格。

完整工程链路

一个可落地的 STM32 边缘 AI 项目,通常要经过七个阶段,每个阶段都有明确的输入与输出:

  1. 数据采集:确定传感器与采样率。例如振动检测常用 3 轴加速度计,采样率 1.6 kHz~6.4 kHz,按窗口切分(如 1024 点/窗),并做去均值、归一化。
  2. 模型训练:在 PC 上用 TensorFlow/Keras 或 PyTorch 训练一个小型网络,如 3 层 1D-CNN,参数量控制在 10 K~50 K。
  3. 量化:把 float32 权重转为 int8。常用训练后量化(PTQ),若精度掉点明显则用感知量化训练(QAT)。量化后模型体积约缩小 4 倍。
  4. 转换:通过 STM32Cube.AI 把 .h5/.tflite/.onnx 转成 C 代码,生成网络权重数组与推理 API。
  5. 集成:把生成的代码加入 STM32CubeIDE 工程,分配张量内存(激活缓冲区),配置时钟与串口。
  6. 部署:烧录到目标板,用真实传感器数据跑通推理,观察输出类别与置信度。
  7. 优化:根据 RAM/Flash 占用与推理耗时,调整模型结构、窗口长度、量化方式,或启用 CMSIS-NN 加速。

下面这张图把上述链路与“资源约束”这条主线放在一起,帮助建立工程全景:

STM32 边缘 AI 工程链路与资源约束 数据采集 传感器 / 采样率 模型训练 PC / float32 量化 int8 / PTQ·QAT 转换 Cube.AI → C 集成 CubeIDE 工程 部署 烧录 / 实测 优化:结构 / 窗口 / 量化 / CMSIS-NN STM32 侧硬约束 SRAM:几十~几百 KB(激活缓冲区) Flash:几百 KB~几 MB(权重 + 代码) 主频:几十~几百 MHz(推理耗时) 硬件平台(示例) • STM32F407 / STM32L4 / STM32H7 开发板 • 3 轴加速度计(I2C/SPI,如 LIS3DH) • 麦克风 / 电流传感器(按场景选) • ST-LINK 调试器 + 串口输出 • 供电:USB 或电池,关注功耗 软件工具链(示例) • TensorFlow / Keras 或 PyTorch(训练) • STM32Cube.AI(模型 → C 代码) • STM32CubeIDE(编译 / 烧录 / 调试) • X-CUBE-AI 扩展包 + CMSIS-NN • 串口助手 / 逻辑分析仪(验证)

硬件平台与软件工具链概览

本课程以 STM32F407 与 STM32L4 系列作为主要目标平台。F407 主频 168 MHz、192 KB SRAM、1 MB Flash,适合作为“性能足够、便于观察”的教学板;L4 系列主频较低但功耗优秀,用于说明低功耗场景下的取舍。传感器侧以 LIS3DH 三轴加速度计为例,通过 SPI 读取 16 位加速度数据,采样率设为 1.6 kHz,每 1024 点组成一个窗口。

软件工具链分三段:训练段使用 TensorFlow/Keras,输出 .h5;转换段使用 STM32Cube.AI(X-CUBE-AI 扩展包),把模型转成 C 数组与 ai_run() 接口;部署段使用 STM32CubeIDE 编译、烧录,并通过串口打印推理结果。Cube.AI 会给出每层的 RAM/Flash 占用与 MACC 数量,这是判断模型能否放下的第一手依据。

一个实用的经验判断:先用 Cube.AI 的“分析”功能看模型占用,再决定是否量化或裁剪。若激活缓冲区超过 SRAM 的 60%,通常需要缩小窗口或减少通道数。

一个可参考的起步示例

假设做振动三分类(正常 / 不平衡 / 松动)。训练侧输入形状为 (1024, 3),网络为 Conv1D(16,5) → MaxPool → Conv1D(32,3) → GlobalAvgPool → Dense(3)。float32 模型约 120 KB,量化成 int8 后约 30 KB,激活缓冲区约 40 KB。在 F407 上单次推理约 8~15 ms(示例量级,实际随编译选项与 CMSIS-NN 启用情况变化)。判断是否达标的标准是:推理周期小于窗口步进时间(例如 1024 点 @1.6 kHz ≈ 640 ms),且 RAM 占用留有余量。

本课程后续会沿着这条链路逐段展开:先建立数据与窗口的概念,再进入模型训练与量化,然后完成 Cube.AI 转换与工程集成,最后用真实数据验证并做优化。你现在需要建立的认知是——边缘 AI 部署不是“把模型塞进去”,而是在资源约束下做一连串可验证的工程决策。