1. 课程导学与开发环境搭建
各位同学好,我是你们这门课的讲师。说实话,嵌入式AI这几年发展太快了,我入行那会儿还在用纯C手写卷积,现在STM32Cube.AI和TFLite Micro已经能帮我们把模型直接跑在MCU上。但工具链越方便,坑反而越隐蔽——内存爆了、算子不支持、推理时间超了,这些问题我在项目里都踩过。
这门课的目标很明确:让你真正掌握在STM32H743上部署图像识别模型的完整流程,并且学会怎么把内存压到极限。我们不只讲理论,我会把实际项目中遇到的坑和解决方案都摊开来讲。
课程核心目标:
- 掌握STM32Cube.AI工具链的完整工作流
- 学会TFLite Micro模型的移植与优化
- 精通STM32H743的内存架构与调优技巧
- 能够独立完成从模型训练到MCU部署的全链路
1.1 硬件平台:为什么选STM32H743
选H743不是随便定的。我做过对比测试,在同等功耗下,H7系列的性能比F4高出3-4倍。具体来说:
| 参数 | STM32H743 | STM32F429 | 说明 |
|---|---|---|---|
| 主频 | 480 MHz | 180 MHz | H7是双核,但AI推理主要用Cortex-M7 |
| SRAM | 1 MB + 512 KB | 256 KB | D1域和D2域分开,布局要小心 |
| Flash | 2 MB | 2 MB | 模型权重主要放这里 |
| Cache | I/D-Cache 16 KB | 无 | Cache命中率直接影响推理速度 |
| DSP + FPU | 双精度 | 单精度 | 量化模型用DSP加速明显 |
嗯,这里要注意:H743的1MB SRAM是分域的。D1域(192 KB)给CPU和总线用,D2域(512 KB)给外设,还有128 KB的备份域。我刚开始做项目时没注意这个,结果模型推理时D1域爆了,查了半天才发现是内存分配没对齐。
1.2 开发环境搭建:工具链安装
这部分我尽量说细一点,因为工具链版本不对会浪费很多时间。我个人习惯用STM32CubeMX 6.8.0 + Cube.AI 8.0.0这个组合,兼容性最好。
1.2.1 STM32CubeMX安装
- 去ST官网下载STM32CubeMX,选最新稳定版(别追新,我吃过亏)
- 安装时选Java环境,如果电脑没装JDK,它会自动下载
- 安装完成后,打开Help → Manage embedded software packages
- 找到STM32H7系列,下载对应的固件包(约500 MB)
小技巧:固件包下载很慢的话,可以用手机热点试试。我在深圳出差时酒店WiFi死活下不动,换了5G秒完成。
1.2.2 Cube.AI工具链安装
Cube.AI其实是CubeMX的一个扩展包。安装方式有两种:
- 在线安装:在CubeMX的Software Packs里搜索X-CUBE-AI,直接下载
- 离线安装:去ST官网下载安装包,然后通过Help → Install from Local File导入
我建议用离线方式。为什么?因为在线安装经常断,而且版本更新后有些旧项目打不开。离线包我一般存一份在网盘,换电脑时直接拷。
1.2.3 验证安装
装完后,打开CubeMX,新建一个STM32H743项目。在Pinout & Configuration页面,如果能找到Software Packs → X-CUBE-AI,就说明装好了。
// 验证Cube.AI是否可用的简单方法
// 在CubeMX中生成一个空项目,然后查看生成的代码目录
// 如果看到 Middlewares/ST/AI 文件夹,说明工具链正常
1.3 TFLite Micro源码获取与编译
TFLite Micro是Google的轻量级推理框架,专门为MCU设计的。说实话,它的源码结构有点绕,我第一次看的时候也懵了。
1.3.1 获取源码
我建议用git clone,不要下载zip包。因为后续要切分支、打补丁,git管理方便很多。
git clone https://github.com/tensorflow/tflite-micro.git
cd tflite-micro
git checkout main # 或者选一个稳定tag,比如 v0.1.0
这里有个坑:TFLite Micro的依赖库是子模块方式管理的,需要额外拉取:
git submodule init
git submodule update
如果不做这一步,编译时会报找不到头文件的错误。我刚开始就卡在这里半小时。
1.3.2 编译环境准备
TFLite Micro支持多种编译器。我们这门课用ARM GCC,因为免费且社区活跃。版本建议用gcc-arm-none-eabi-10.3-2021.10,太新的版本可能有兼容问题。
| 编译器 | 版本 | 适用场景 |
|---|---|---|
| ARM GCC | 10.3-2021.10 | 免费,适合学习和原型验证 |
| IAR | 9.30+ | 商业项目,优化更好 |
| Keil MDK | 5.38+ | 老项目迁移常用 |
1.3.3 编译测试
进入tflite-micro目录,执行以下命令测试编译是否正常:
make -f tensorflow/lite/micro/tools/make/Makefile \
TARGET=stm32h743 \
TARGET_ARCH=cortex-m7 \
test_hello_world_test
如果看到BUILD SUCCESS,说明环境没问题。我第一次编译时等了大概3分钟,中间还报了个Python版本不兼容的错——嗯,记得用Python 3.8以上。
注意:编译TFLite Micro时,默认会下载很多依赖库(比如flatbuffers、gemmlowp)。如果网络不好,建议先手动下载这些库放到tensorflow/lite/micro/tools/make/downloads目录下。
1.4 本章知识体系
为了让你对整个课程结构有个直观认识,我画了张图。这张图也是我们后续每章都会用到的框架:
这张图就是我们整个课程的路线图。从模型输入开始,经过Cube.AI工具链转换,再到TFLite Micro推理引擎,最后在STM32H743上运行。每一层都有优化空间,我们会在后续章节逐一攻克。
1.5 本章小结
这一章我们做了三件事:
- 明确了课程目标——内存调优与模型移植
- 搭建了开发环境——CubeMX + Cube.AI + ARM GCC
- 获取并编译了TFLite Micro源码