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的工作流程
这个流程我走了不下几十遍,踩过的坑能写满一本笔记本。简单来说,分四步:
- 模型训练:在PC上用Keras/PyTorch训练你的模型,注意输入尺寸要和传感器数据对齐。
- 模型转换:用STM32Cube.AI将模型转为C代码,这一步会做量化(float32转int8)和内存优化。
- 集成部署:在CubeMX中配置外设,将生成的AI代码与传感器驱动、通信协议整合。
- 调试优化:用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生态的核心脉络梳理了一遍。你把它存下来,后面每学一章都可以回来对照看看。
学习建议:如果你刚接触这个领域,建议先装好STM32CubeMX和X-CUBE-AI扩展包,然后找一个简单的Keras模型(比如MNIST分类)走一遍完整流程。第一次跑通时那种成就感,嗯,我到现在还记得。