1. 课程导论与AI on STM32生态全景

各位同学好,我是你们这门课的老周。在嵌入式这行摸爬滚打了十几年,从最早的8位机一路做到现在的双核Cortex-M7,说实话,AI落到MCU上这件事,放在五年前我是不太敢想的。

但今天,STM32跑AI推理已经不是新鲜事了。我去年帮一个客户做工业异常检测,就是用STM32U5加上Cube.AI,硬是把原本要上Linux的方案砍成了单芯片MCU方案,成本降了60%。嗯,这就是我们这门课要讲的核心——怎么在资源受限的MCU上,把AI推理跑起来、跑得快、跑得稳。

为什么要在MCU上跑AI?

你可能会问:云端的算力那么强,干嘛非要在MCU上折腾?

说白了,三个字:实时性、隐私、成本。

  • 实时性:传感器数据采集后直接推理,毫秒级响应,不用等网络往返。我在做电机振动监测时,要求推理延迟小于5ms,云端方案根本做不到。
  • 隐私:数据不出设备,尤其适合医疗、金融等敏感场景。
  • 成本:一颗STM32H7的价格可能不到高端MPU的十分之一,BOM成本优势明显。

当然,限制也很明显。MCU的Flash通常只有几MB,RAM更是以KB为单位,算力也远不如GPU。所以,模型压缩和量化就成了必修课——这也是我们这门课的核心内容之一。

STM32 AI工具链全景

ST官方提供了三款核心工具,我分别说说它们的定位和我的使用感受。

工具 定位 适用场景 我的评价
STM32Cube.AI 模型转换与优化引擎 将训练好的模型(Keras/TFLite/ONNX)转为STM32可执行的C代码 核心工具,几乎每个项目都会用到
X-CUBE-AI 集成开发扩展包 在CubeMX中一键集成AI推理,生成初始化代码 适合快速原型验证,但深度优化需要手动调参
NanoEdge AI Studio 自动机器学习平台 无需AI经验,自动生成异常检测、分类模型 适合非AI专家,但模型可定制性有限

我的建议:如果你是AI工程师,主攻STM32Cube.AI;如果你是嵌入式工程师想快速落地,从NanoEdge AI Studio入手会更友好。我个人习惯是先用NanoEdge做原型验证,再用Cube.AI做深度优化。

STM32Cube.AI的工作流程

这个流程我走了不下几十遍,踩过的坑能写满一本笔记本。简单来说,分四步:

  1. 模型训练:在PC上用Keras/PyTorch训练你的模型,注意输入尺寸要和传感器数据对齐。
  2. 模型转换:用STM32Cube.AI将模型转为C代码,这一步会做量化(float32转int8)和内存优化。
  3. 集成部署:在CubeMX中配置外设,将生成的AI代码与传感器驱动、通信协议整合。
  4. 调试优化:用STM32CubeMonitor或串口打印分析推理结果,调整量化参数或模型结构。

避坑指南:我曾经在模型转换时忽略了输入数据的归一化方式,导致推理结果全错。记住,训练时的预处理(比如除以255.0)必须在MCU端完全复现,否则模型输出就是垃圾。

AI在MCU上的典型应用场景

我挑三个我实际做过的案例,帮你建立直观感受:

  • 工业异常检测:用加速度传感器采集振动数据,通过CNN模型判断设备是否异常。STM32G4系列跑一个2层卷积的模型,推理时间约3ms,完全满足实时要求。
  • 语音关键词识别:在STM32H7上部署TinyML模型,识别“你好”“停止”等关键词。我记得第一次调通时,对着开发板喊了半小时,嗓子都哑了。
  • 手势识别:用ToF传感器或摄像头,通过轻量级CNN识别手势。这个对内存要求较高,通常需要用到STM32U5或H7系列。

STM32 AI生态的局限性

说实话,MCU跑AI不是万能的。我总结了几点:

  • 模型大小限制:Flash通常不超过2MB,所以模型参数必须压缩到几百KB以内。
  • 不支持复杂网络:像Transformer、ResNet-50这种大模型,在MCU上基本跑不动。
  • 调试手段有限:不像PC端有TensorBoard,MCU上只能靠串口打印或逻辑分析仪。

但反过来想,正因为有限制,才需要我们这些工程师去优化、去突破。这也是我开设这门课的初衷——把那些踩过的坑、试过的方法、验证过的技巧,系统地分享给你。

本章知识体系

下面这张图是我自己画的,把STM32 AI生态的核心脉络梳理了一遍。你把它存下来,后面每学一章都可以回来对照看看。

STM32 AI on MCU 生态全景 传感器数据 STM32Cube.AI X-CUBE-AI NanoEdge AI Studio 模型量化 / 剪枝 / 内存优化 STM32 MCU 推理执行 核心约束:Flash < 2MB | RAM < 1MB | 推理延迟 < 10ms | 不支持复杂网络

学习建议:如果你刚接触这个领域,建议先装好STM32CubeMX和X-CUBE-AI扩展包,然后找一个简单的Keras模型(比如MNIST分类)走一遍完整流程。第一次跑通时那种成就感,嗯,我到现在还记得。