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安装

  1. 去ST官网下载STM32CubeMX,选最新稳定版(别追新,我吃过亏)
  2. 安装时选Java环境,如果电脑没装JDK,它会自动下载
  3. 安装完成后,打开Help → Manage embedded software packages
  4. 找到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 本章知识体系

为了让你对整个课程结构有个直观认识,我画了张图。这张图也是我们后续每章都会用到的框架:

课程知识体系框架 STM32Cube AI 图像识别内存调优课程框架 模型输入 STM32Cube.AI 工具链 TFLite Micro 推理引擎 STM32H743 硬件平台 内存调优与性能优化 关键知识点 • 模型量化 • 算子支持 • 内存布局 • Cache策略 • DMA传输 • 推理加速 • 功耗优化 • 调试技巧 • 性能分析 从模型到硬件,逐层深入,最终实现内存与性能的极致优化

这张图就是我们整个课程的路线图。从模型输入开始,经过Cube.AI工具链转换,再到TFLite Micro推理引擎,最后在STM32H743上运行。每一层都有优化空间,我们会在后续章节逐一攻克。

1.5 本章小结

这一章我们做了三件事:

  • 明确了课程目标——内存调优与模型移植
  • 搭建了开发环境——CubeMX + Cube.AI + ARM GCC
  • 获取并编译了TFLite Micro源码