2. 开发环境搭建:安装STM32CubeMX、STM32CubeIDE、X-CUBE-AI扩展包,配置GCC/ARMCC编译器,验证环境。

说实话,很多初学者一上来就急着写代码,结果卡在环境配置上大半天。我见过不少同事,明明模型训练得挺好,最后却因为工具链没配好,连编译都过不去。这一章,咱们就把这些基础工作做扎实。

嵌入式AI开发,说白了就是三件事:配置硬件、转换模型、部署推理。而这三件事,都离不开一套好用的工具链。下面我就带你一步步搭起来。

本章核心目标: 搭建一套完整的STM32嵌入式AI开发环境,确保从模型转换到板端推理的链路畅通。

2.1 工具链全景图

先看看我们要装哪些东西,它们各自扮演什么角色。我习惯用一张图来理清关系:

STM32嵌入式AI开发工具链 训练框架 TensorFlow / PyTorch / Keras X-CUBE-AI 扩展包 STM32CubeMX(工程生成 + 引脚配置) STM32CubeIDE(编译 + 调试) STM32 目标板 编译器 GCC / ARMCC

你看,整个流程是串起来的。从训练好的模型,到最终在板子上跑起来,中间每一步都有对应的工具。咱们一个一个来装。

2.2 安装STM32CubeMX

STM32CubeMX 是 ST 官方出品的图形化配置工具。它的作用,说白了就是帮你生成初始化代码。你点点鼠标,选好芯片、配好引脚、设好时钟,它就能生成一套完整的 HAL 库工程。

我个人习惯用最新稳定版。你可以去 ST 官网下载,或者直接用我下面给的链接(注意版本号,太老的版本可能不支持新芯片)。

安装小贴士:

  • 下载时选择 STM32CubeMX-Win(Windows)或对应 Linux/Mac 版本。
  • 安装路径不要有中文,不要有空格。我见过有人装在 "Program Files (x86)" 下,结果后面生成工程时路径解析出错。
  • 安装完成后,首次启动会提示更新固件包。建议先不更新,等后面用到具体芯片时再下载对应的包。

安装完成后,打开界面,你会看到左侧是芯片/板卡选择区,右侧是工程配置区。先别急着点,咱们后面章节会详细讲怎么用。

2.3 安装STM32CubeIDE

STM32CubeIDE 是 ST 官方基于 Eclipse 打造的集成开发环境。它集成了编辑器、编译器、调试器,一条龙服务。我个人觉得,它比 Keil 更现代,比 IAR 更友好。

安装步骤很简单:

  1. 从 ST 官网下载 STM32CubeIDE 安装包(约 1.2GB)。
  2. 双击运行,选择安装路径(同样,不要中文路径)。
  3. 安装过程中会提示选择工作空间(workspace)路径。我建议单独建一个文件夹,比如 D:\STM32_Workspace,方便管理。
  4. 安装完成后,首次启动会初始化一些插件,稍等片刻即可。

注意: 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,按以下步骤操作:

  1. 点击菜单栏 Window → Preferences。
  2. 在左侧导航栏找到 MCU Settings。
  3. 在右侧 "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。
  4. 如果你安装了 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 生成一个最简单的工程:

  1. 打开 CubeMX,点击 "New Project"。
  2. 在 Board Selector 中搜索 "STM32F429I-DISC1"(或者你手头有的板子)。
  3. 双击选中,点击 "Start Project"。
  4. 在 "Pinout & Configuration" 中,找到 "SYS" → "Debug",设置为 "Serial Wire"(否则下载一次后,第二次就连不上了,别问我怎么知道的)。
  5. 点击 "Project Manager" → "Project" → 填写工程名,选择 IDE 为 "STM32CubeIDE"。
  6. 点击 "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 个类别)。

操作步骤:

  1. 在 CubeMX 中,打开刚才生成的工程。
  2. 在 "Pinout & Configuration" 面板中,找到 "Software Packs" → "Select Components"。
  3. 勾选 "X-CUBE-AI" → "Core" → 点击 "OK"。
  4. 在 "Pinout & Configuration" 中,会出现 "X-CUBE-AI" 选项卡。点击进入。
  5. 在 "Model" 区域,点击 "Add" → 选择你的模型文件(.h5 或 .tflite)。
  6. CubeMX 会自动分析模型结构,显示输入输出张量信息。
  7. 点击 "Analyze",等待分析完成。如果一切正常,会显示 "Analysis succeeded"。
  8. 点击 "GENERATE CODE",CubeMX 会把模型转换后的 C 代码嵌入到工程中。

转换完成后,你可以在工程目录的 X-CUBE-AI 文件夹下,看到生成的 network.c 和 network.h 文件。这就是咱们后面要调用的推理代码。

验证成功标志: 重新编译工程,如果编译通过,且生成的 .elf 文件大小增加了(因为包含了模型权重),说明 X-CUBE-AI 安装正确,模型转换链路打通了。

嗯,到这里,整个开发环境就搭建完毕了。你可能会觉得步骤有点多,但相信我,一次配好,后面能省下大量时间。我刚开始做嵌入式AI时,光环境就折腾了两天,后来把步骤记下来,换新电脑时照着做,半小时搞定。