2. 开发环境搭建:安装STM32CubeMX、STM32CubeIDE、X-CUBE-AI扩展包,配置GCC/ARMCC编译器,验证环境。
说实话,很多初学者一上来就急着写代码,结果卡在环境配置上大半天。我见过不少同事,明明模型训练得挺好,最后却因为工具链没配好,连编译都过不去。这一章,咱们就把这些基础工作做扎实。
嵌入式AI开发,说白了就是三件事:配置硬件、转换模型、部署推理。而这三件事,都离不开一套好用的工具链。下面我就带你一步步搭起来。
本章核心目标: 搭建一套完整的STM32嵌入式AI开发环境,确保从模型转换到板端推理的链路畅通。
2.1 工具链全景图
先看看我们要装哪些东西,它们各自扮演什么角色。我习惯用一张图来理清关系:
你看,整个流程是串起来的。从训练好的模型,到最终在板子上跑起来,中间每一步都有对应的工具。咱们一个一个来装。
2.2 安装STM32CubeMX
STM32CubeMX 是 ST 官方出品的图形化配置工具。它的作用,说白了就是帮你生成初始化代码。你点点鼠标,选好芯片、配好引脚、设好时钟,它就能生成一套完整的 HAL 库工程。
我个人习惯用最新稳定版。你可以去 ST 官网下载,或者直接用我下面给的链接(注意版本号,太老的版本可能不支持新芯片)。
安装小贴士:
- 下载时选择 STM32CubeMX-Win(Windows)或对应 Linux/Mac 版本。
- 安装路径不要有中文,不要有空格。我见过有人装在 "Program Files (x86)" 下,结果后面生成工程时路径解析出错。
- 安装完成后,首次启动会提示更新固件包。建议先不更新,等后面用到具体芯片时再下载对应的包。
安装完成后,打开界面,你会看到左侧是芯片/板卡选择区,右侧是工程配置区。先别急着点,咱们后面章节会详细讲怎么用。
2.3 安装STM32CubeIDE
STM32CubeIDE 是 ST 官方基于 Eclipse 打造的集成开发环境。它集成了编辑器、编译器、调试器,一条龙服务。我个人觉得,它比 Keil 更现代,比 IAR 更友好。
安装步骤很简单:
- 从 ST 官网下载 STM32CubeIDE 安装包(约 1.2GB)。
- 双击运行,选择安装路径(同样,不要中文路径)。
- 安装过程中会提示选择工作空间(workspace)路径。我建议单独建一个文件夹,比如
D:\STM32_Workspace,方便管理。 - 安装完成后,首次启动会初始化一些插件,稍等片刻即可。
注意: STM32CubeIDE 自带 GCC 编译器,但默认不包含 ARMCC(ARM Compiler 5/6)。如果你需要 ARMCC,需要单独安装 Keil MDK 或者 ARM DS-5。不过对于咱们嵌入式AI课程,GCC 完全够用,而且免费。
2.4 安装X-CUBE-AI扩展包
X-CUBE-AI 是 ST 官方推出的 AI 模型转换工具。它能把 TensorFlow、PyTorch、Keras 等框架训练好的模型,转换成 STM32 能跑的 C 代码。这是咱们课程的核心工具。
安装方式有两种:
| 方式 | 步骤 | 说明 |
|---|---|---|
| 方式一:在线安装 | 打开 STM32CubeMX → Help → Manage embedded software packages → 搜索 "X-CUBE-AI" → 勾选安装 | 需要联网,下载约 200MB。推荐这种方式,会自动处理依赖。 |
| 方式二:离线安装 | 从 ST 官网下载 X-CUBE-AI 压缩包 → 解压到 STM32CubeMX 的 repository 目录下 | 适合内网环境。注意版本要与 CubeMX 匹配。 |
安装完成后,你可以在 CubeMX 的 "Pinout & Configuration" 面板中,找到 "Software Packs" → "Select Components" → "X-CUBE-AI"。如果能看到这个选项,说明安装成功。
版本选择建议: 截至本文撰写时,X-CUBE-AI 最新稳定版是 8.1.0。它支持 TensorFlow Lite 2.11、ONNX 1.12、PyTorch 1.13。建议不要用太老的版本(比如 5.x),对量化支持不好。
2.5 配置编译器
编译器是工具链的最后一环。STM32CubeIDE 默认集成了 GCC for ARM,但我们需要确认一下配置是否正确。
打开 STM32CubeIDE,按以下步骤操作:
- 点击菜单栏 Window → Preferences。
- 在左侧导航栏找到 MCU Settings。
- 在右侧 "Global ARM Toolchains" 中,确认 "ARM GCC" 路径正确。默认路径一般是
C:\ST\STM32CubeIDE_1.13.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.0.0.202305101550\tools\bin。 - 如果你安装了 ARMCC,可以在 "ARM Compiler" 中指定路径。
我个人习惯用 GCC,原因有三:
- 免费:不用破解,没有 license 烦恼。
- 社区活跃:遇到问题,网上基本都能找到答案。
- 优化不错:-O2 优化下,代码体积和性能跟 ARMCC 差距不大。
避坑指南: 我曾经遇到过一个问题——编译时提示 "arm-none-eabi-gcc: not found"。查了半天,发现是 Windows 环境变量 PATH 里没有包含 GCC 的 bin 目录。解决办法:手动把 GCC 的 bin 路径加到系统环境变量里,然后重启 CubeIDE。
2.6 验证环境:跑一个Hello World
环境搭好了,怎么知道它能不能用?最简单的方法——创建一个空工程,编译通过,下载到板子上跑起来。
咱们用 STM32CubeMX 生成一个最简单的工程:
- 打开 CubeMX,点击 "New Project"。
- 在 Board Selector 中搜索 "STM32F429I-DISC1"(或者你手头有的板子)。
- 双击选中,点击 "Start Project"。
- 在 "Pinout & Configuration" 中,找到 "SYS" → "Debug",设置为 "Serial Wire"(否则下载一次后,第二次就连不上了,别问我怎么知道的)。
- 点击 "Project Manager" → "Project" → 填写工程名,选择 IDE 为 "STM32CubeIDE"。
- 点击 "GENERATE CODE",生成工程。
生成完成后,用 STM32CubeIDE 打开工程。在 main.c 的 while(1) 循环里,加一行代码:
HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
HAL_Delay(500);
然后点击工具栏的锤子图标(Build),或者按 Ctrl+B 编译。如果控制台输出类似下面的信息,说明编译环境没问题:
arm-none-eabi-gcc -o "test.elf" ...
...
Finished building: test.elf
Memory region Used Size Region Size %age Used
FLASH: 1232 B 2 MB 0.06%
RAM: 104 B 256 KB 0.04%
最后,用 ST-Link 连接板子,点击绿色三角(Debug 或 Run),如果看到板子上的 LED 以 0.5 秒间隔闪烁,恭喜你——环境搭建成功!
常见问题:
- 编译报错 "undefined reference to ...":通常是 HAL 库没包含全。检查 CubeMX 生成的工程中,是否勾选了所有需要的外设。
- 下载失败 "No ST-Link detected":检查驱动是否安装,或者换一根 USB 线(有些线只能充电,不能传数据)。
- 下载一次后第二次连不上:大概率是 Debug 引脚被复用了。按上面步骤,在 CubeMX 中把 SYS → Debug 设为 "Serial Wire" 即可。
2.7 验证X-CUBE-AI:导入一个简单模型
为了确认 X-CUBE-AI 也能正常工作,咱们导入一个最简单的模型试试。这里我用一个 Keras 训练好的全连接网络(输入 10 个特征,输出 3 个类别)。
操作步骤:
- 在 CubeMX 中,打开刚才生成的工程。
- 在 "Pinout & Configuration" 面板中,找到 "Software Packs" → "Select Components"。
- 勾选 "X-CUBE-AI" → "Core" → 点击 "OK"。
- 在 "Pinout & Configuration" 中,会出现 "X-CUBE-AI" 选项卡。点击进入。
- 在 "Model" 区域,点击 "Add" → 选择你的模型文件(.h5 或 .tflite)。
- CubeMX 会自动分析模型结构,显示输入输出张量信息。
- 点击 "Analyze",等待分析完成。如果一切正常,会显示 "Analysis succeeded"。
- 点击 "GENERATE CODE",CubeMX 会把模型转换后的 C 代码嵌入到工程中。
转换完成后,你可以在工程目录的 X-CUBE-AI 文件夹下,看到生成的 network.c 和 network.h 文件。这就是咱们后面要调用的推理代码。
验证成功标志: 重新编译工程,如果编译通过,且生成的 .elf 文件大小增加了(因为包含了模型权重),说明 X-CUBE-AI 安装正确,模型转换链路打通了。
嗯,到这里,整个开发环境就搭建完毕了。你可能会觉得步骤有点多,但相信我,一次配好,后面能省下大量时间。我刚开始做嵌入式AI时,光环境就折腾了两天,后来把步骤记下来,换新电脑时照着做,半小时搞定。