2. 开发环境搭建:工欲善其事,必先利其器
说实话,做AI模型移植,最怕的不是模型本身,而是环境搭到一半卡住了。我见过太多新手在安装环节折腾一整天,最后发现是版本不匹配。这一章,咱们就把这套工具链一次搞定。
2.1 STM32CubeMX 安装
STM32CubeMX 是整个开发流程的起点。它负责生成初始化代码、配置时钟树、管脚映射,以及——最重要的——集成 Cube.AI 扩展包。
版本选择建议:我个人习惯用最新稳定版,但别追最新版。比如 2024 年我推荐 6.11.x 或 6.12.x,太新的版本有时会和扩展包有兼容问题。
安装步骤很简单:
- 去 ST 官网下载 STM32CubeMX 安装包(Windows/Linux/Mac 都有)
- 双击运行,一路 Next,注意安装路径不要有中文
- 安装完成后,首次启动会提示下载固件包,先跳过,咱们后面手动配
小技巧:如果你在公司内网,记得提前配好代理。CubeMX 下载固件包时经常因为网络问题失败。我曾经在客户现场折腾了半小时,最后发现是防火墙拦了。
2.2 STM32Cube.AI 扩展包安装
这是咱们课程的核心。Cube.AI 扩展包负责把训练好的神经网络模型转换成可以在 STM32 上跑的 C 代码。
安装方式有两种:
| 方式 | 操作步骤 | 适用场景 |
|---|---|---|
| 在线安装 | CubeMX → Help → Manage embedded software packages → STMicroelectronics → X-CUBE-AI | 网络好,省事 |
| 离线安装 | 下载 .pack 文件 → CubeMX → Help → Manage embedded software packages → From Local | 内网环境,或需要固定版本 |
注意版本匹配:Cube.AI 扩展包和 CubeMX 主程序有版本依赖关系。比如 X-CUBE-AI 9.0.0 要求 CubeMX 6.12.0 以上。装之前看一眼 Release Notes,别像我当年一样,装完发现不兼容,又卸了重来。
安装完成后,你可以在 CubeMX 的 "Software Packs" 菜单里看到 X-CUBE-AI 的选项。点进去,能看到支持的运行时版本和模型格式。
2.3 IDE 配置:Keil / IAR / STM32CubeIDE
你选哪个 IDE?我三个都用过,说说我的感受。
| IDE | 优点 | 缺点 | 我推荐谁用 |
|---|---|---|---|
| Keil MDK | 编译快,调试稳,生态成熟 | 收费,代码补全弱 | 老手、量产项目 |
| IAR EWARM | 优化强,代码密度小 | 界面丑,学习曲线陡 | 对代码大小有极致要求 |
| STM32CubeIDE | 免费,和 CubeMX 无缝集成 | 启动慢,插件偶尔抽风 | 新手、原型验证 |
咱们课程以 STM32CubeIDE 为主,因为它免费且和 CubeMX 集成最好。但我会在关键步骤标注 Keil 和 IAR 的差异点。
配置步骤:
- 安装 STM32CubeIDE(同样从 ST 官网下载)
- 首次启动时,指定工作空间路径
- 导入 CubeMX 生成的 .ioc 文件,IDE 会自动识别并生成工程
- 在工程属性中,确认编译器路径、调试器配置正确
避坑指南:如果你用 Keil,记得在 CubeMX 的 Project Manager 里把 Toolchain / IDE 选为 MDK-ARM V5,然后点 Generate Code。生成后不要直接双击 .uvprojx,先检查一下芯片型号是否匹配。我曾经因为选了 F767 但实际板子是 F767ZI,结果调试器死活连不上。
2.4 硬件准备:NUCLEO-F767ZI
为什么选这块板子?说白了,三个原因:
- 性能够用:Cortex-M7,216MHz,带 FPU 和 DSP 指令集,跑轻量级 CNN 没问题
- 内存够大:512KB SRAM + 2MB Flash,能放下中等规模的模型
- 调试方便:板载 ST-LINK/V2-1,一根 USB 线就能供电和调试
硬件准备清单:
| 项目 | 说明 | 备注 |
|---|---|---|
| NUCLEO-F767ZI 开发板 | 主控 STM32F767ZIT6U | 建议买 Rev C 以上版本 |
| USB 数据线 | Micro-USB,用于供电和调试 | 别用充电线,要带数据功能 |
| 跳线帽 | 板载默认配置即可 | 后续扩展外设时可能需要改 |
| 串口工具(可选) | USB-TTL 模块,用于打印日志 | 调试模型输出时很有用 |
拿到板子后,先做一件事:确认板子能正常工作。插上 USB,看绿色 LED 是否闪烁。如果不亮,别急着怀疑板子坏了——先检查 USB 线是不是只充电不传数据。我遇到过三次这种情况。
2.5 整体工具链关系图
下面这张图,帮你理清各个工具之间的关系:
2.6 验证环境是否搭好
环境搭完,怎么知道一切正常?我习惯跑一个最简单的测试:
- 打开 CubeMX,新建一个基于 NUCLEO-F767ZI 的工程
- 在 Software Packs 里选择 X-CUBE-AI,添加一个空的 AI 应用
- 生成代码,导入 IDE,编译
- 烧录到板子,看串口是否打印 "AI Application Started"
如果这一步能跑通,恭喜你,环境搭好了。后面的事,就是往这个框架里塞模型了。
常见问题:编译时报错 "cannot open source file stm32f7xx_hal.h"?别慌,八成是 CubeMX 生成代码时没勾选 HAL 库。回去检查 Project Manager → Project Settings → Firmware Package Name and Version,确保选了正确的固件包。