1. 课程导论与开发环境搭建

各位同学好,我是你们这门课的讲师。在嵌入式领域摸爬滚打了十几年,从最早的8位单片机一路做到现在的双核Cortex-M7,我越来越觉得——在STM32上跑神经网络,这事儿已经不是「能不能做」的问题,而是「怎么做才更优雅」的问题了。

这一章,我们先不急着敲代码。先把「为什么要在STM32上搞AI」这件事聊透,再把工具链装好、跑通一个最简单的验证例程。地基打牢了,后面30章你才走得稳。

1.1 为什么要在STM32上部署神经网络?

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

嗯,这个问题我当年也问过自己。直到有一次做工业振动监测的项目,现场环境根本没有稳定的网络,数据传到云端再返回结果,延迟超过2秒——设备都快震散架了,报警还没出来。从那以后,我坚定了一个想法:实时性、低功耗、数据隐私,这三个需求,只有边缘端能解决。

具体来说,STM32上跑神经网络有这几个核心价值:

  • 实时响应:推理在本地完成,延迟从秒级降到毫秒级。比如电机堵转检测,10ms内必须给出结果。
  • 低功耗:STM32的典型功耗在几十到几百mW,而树莓派这类Linux板卡动辄几瓦。电池供电的场景,MCU是唯一选择。
  • 数据隐私:传感器数据不上云,全部在本地处理。医疗、金融、工业控制领域,这是硬性合规要求。
  • 成本优势:一颗STM32H743的价格不到50元,而同等算力的NPU模块可能要几百块。

一句话总结:不是所有AI都需要GPU。当你的产品需要「小、快、灵」时,STM32就是那个最合适的载体。

1.2 硬件选型:F4还是H7?

很多初学者会纠结这个问题。我个人的建议是:看你的模型大小和实时性要求。

下面这张表是我在实际项目中总结的选型参考:

对比维度 STM32F4系列 STM32H7系列
典型型号 STM32F407 / F429 STM32H743 / H750
主频 168~180 MHz 400~550 MHz
SRAM 192~256 KB 512 KB ~ 1 MB
Flash 512 KB ~ 2 MB 1 MB ~ 2 MB
FPU 单精度 双精度 + 单精度
典型推理速度 50~200 ms(小模型) 5~50 ms(中等模型)
适用场景 二分类、简单回归 多分类、轻量CNN、时序模型

我的建议很直接:

  • 如果你只是做手势识别、简单异常检测,F4完全够用,成本更低。
  • 如果你要做关键词唤醒、图像分类、振动频谱分析,直接上H7,别犹豫。我曾经在F4上硬跑一个三层CNN,推理一次花了800ms,后来换H7直接降到40ms——差距就是这么大。

一个小技巧:H750系列虽然Flash只有128KB,但它支持外部QSPI Flash映射执行代码。我有个项目就是用H750 + 外部Flash,成本比H743低30%,性能几乎没差别。

1.3 软件工具链全景

STM32的AI部署工具链,说白了就是三件套:STM32CubeMX(配置)、X-CUBE-AI(转换)、STM32CubeIDE(编译调试)。

它们之间的关系,我画了张图:

STM32 AI 部署工具链流程 训练模型 Keras / PyTorch / TFLite X-CUBE-AI 模型转换 + 优化 STM32CubeMX 外设配置 + 代码生成 STM32CubeIDE 编译 / 调试 / 部署 STM32 硬件 F4 / H7 系列 注意 X-CUBE-AI 支持 Keras / ONNX / TFLite

流程其实很简单:你在PC上训练好模型(Keras/PyTorch/TFLite),用X-CUBE-AI把它转换成STM32能跑的C代码,然后用CubeMX配置好外设和时钟,最后在CubeIDE里编译下载到板子上。

1.4 环境安装与验证

这部分我尽量说得简洁,但每一步都很关键。我踩过的坑,不希望你再踩一遍。

1.4.1 安装STM32CubeMX

  1. 去ST官网下载最新版STM32CubeMX(目前是6.12+)。
  2. 安装时注意:路径不要有中文和空格。我曾经因为路径带了个空格,折腾了一下午找不到固件包。
  3. 安装完成后,打开软件,它会提示你下载固件包。先别急,我们后面统一配置。

1.4.2 安装X-CUBE-AI

  1. 在CubeMX的「Software Packs」->「Manage Software Packs」中搜索「X-CUBE-AI」。
  2. 选择与你板子匹配的版本(建议选最新稳定版)。
  3. 安装完成后,在CubeMX的Pinout视图中,你会看到「Software Packs」选项卡下多了一个「X-CUBE-AI」的入口。

避坑指南:X-CUBE-AI 的版本必须与 CubeMX 主版本兼容。我曾经在 CubeMX 6.8 上装了 X-CUBE-AI 7.0,结果模型转换时直接崩溃。后来查了Release Notes才发现,X-CUBE-AI 7.0 要求 CubeMX 6.9+。所以,先升级CubeMX到最新,再装X-CUBE-AI。

1.4.3 安装STM32CubeIDE

  1. 同样从ST官网下载,选择对应操作系统的版本。
  2. 安装过程一路默认即可。注意:它会自动安装GCC工具链和OpenOCD调试器。
  3. 第一次启动时,设置工作空间路径。我建议单独建一个文件夹,比如 D:\STM32_Workspace,方便管理。

1.4.4 验证:跑通第一个AI例程

装完工具链,我们来验证一下是否真的能跑。ST官方提供了一个非常简单的「手势识别」例程,用的是X-CUBE-AI自带的预训练模型。

步骤很简单:

  1. 打开CubeMX,选择你的开发板(比如NUCLEO-H743ZI2)。
  2. 在Pinout视图中,点击「Software Packs」->「Select Software Packs」->勾选X-CUBE-AI。
  3. 在「X-CUBE-AI」配置界面中,选择「Add AI Model」,导入官方提供的 hand_gesture_model.tflite(路径在安装目录下的 Projects/Examples 里)。
  4. 配置UART串口,用于打印推理结果。
  5. 生成代码,用CubeIDE打开工程,编译下载。

如果一切顺利,串口终端会输出类似这样的信息:

AI Inference Started...
Gesture: 0 (No gesture)
Gesture: 1 (Swipe Left)
Gesture: 2 (Swipe Right)
Gesture: 3 (Palm)
...

我个人的习惯:第一次验证时,不要用自己训练的模型。先用官方例程把整个流程跑通,确认工具链没问题了,再换自己的模型。这样出了问题,你能快速定位是模型问题还是工具链问题。

1.5 本章小结

这一章我们聊了:

  • 为什么要在STM32上做AI——实时、低功耗、隐私、成本。
  • F4和H7怎么选——小模型用F4,中等模型用H7。
  • 工具链三件套——CubeMX、X-CUBE-AI、CubeIDE,它们怎么配合工作。
  • 环境安装和验证——照着步骤走,跑通第一个AI例程。