2. 开发环境搭建与项目模板创建

说实话,很多初学者一上来就急着写代码,结果卡在环境配置上大半天。我见过不少同事,明明模型在电脑上跑得好好的,一到STM32上就各种报错。说白了,八成是工具链没搭对。

这一章,我们就一步步把环境搭好,再创建一个带AI功能的项目模板。以后每章的新项目,都可以从这个模板开始。

2.1 工具链全景图

先看看我们要装哪些东西,它们之间是什么关系。

STM32Cube AI 工具链架构 用户代码 + AI 模型 STM32CubeMX 引脚配置 · 时钟树 · 外设初始化 X-CUBE-AI 扩展包 模型转换 · 验证 · 代码生成 STM32CubeIDE 编译 · 调试 · 部署 STM32 目标板 工作流程 ① CubeMX 生成初始化代码 ② X-CUBE-AI 转换模型 ③ CubeIDE 编译 + 烧录 支持模型格式 · Keras (.h5) · TensorFlow Lite (.tflite) · ONNX (.onnx)
我的习惯:先装 CubeMX,再装 CubeIDE,最后装 X-CUBE-AI。顺序反了容易出路径问题。

2.2 安装 STM32CubeMX

CubeMX 是 ST 官方出品的图形化配置工具。你用它选芯片、配引脚、设时钟,它帮你生成初始化代码。说白了,就是省去你手写底层配置的麻烦。

2.2.1 下载与安装

  1. 去 ST 官网搜 "STM32CubeMX",下载最新版(目前是 6.x)。
  2. 双击安装包,一路 Next。安装路径不要有中文和空格。
  3. 安装完成后,打开 CubeMX,它会自动检查更新。
注意:CubeMX 需要 Java 运行环境。如果电脑没装 Java,安装程序会提示你下载。我建议装 Java 11 或 17,太老的版本可能不兼容。

2.2.2 首次启动配置

打开 CubeMX 后,点 Help → Manage embedded software packages。这里要下载你目标芯片的固件包。比如我用 STM32F746,就勾选 STM32F7 系列,点 Install。

固件包比较大(几百 MB),网速慢的话可以先去 ST 官网手动下载,再通过 From Local 导入。我在项目现场遇到过没网的情况,提前备好离线包能救命。

2.3 安装 STM32CubeIDE

CubeIDE 是 ST 的集成开发环境,基于 Eclipse。它集成了编译器、调试器,还支持 FreeRTOS 和 TouchGFX 的插件。

2.3.1 下载与安装

  1. ST 官网搜 "STM32CubeIDE",下载对应操作系统的版本。
  2. 安装时注意选择 STM32CubeMX 集成 选项。这样你在 CubeIDE 里可以直接调用 CubeMX 修改配置。
  3. 安装路径同样不要有中文。
小技巧:CubeIDE 默认的 workspace 在 C 盘。我习惯把它改到 D 盘或 E 盘,避免系统盘空间不够。改法:启动时在 Workspace Launcher 窗口点 Browse 选路径。

2.4 安装 X-CUBE-AI 扩展包

X-CUBE-AI 是 ST 的 AI 工具包。它能把训练好的神经网络模型转换成 STM32 能跑的 C 代码,还提供验证和性能分析功能。

2.4.1 通过 CubeMX 安装

  1. 打开 CubeMX,点 Help → Manage embedded software packages。
  2. 在 STMicroelectronics 选项卡里,找到 X-CUBE-AI。
  3. 勾选最新版本(比如 8.1.0),点 Install。

2.4.2 手动安装(离线方式)

如果在线安装慢,可以手动操作:

  1. ST 官网搜 "X-CUBE-AI",下载 .pack 文件。
  2. 在 CubeMX 里点 File → Import,选择下载的 .pack 文件。
  3. 导入后,在 Pinout & Configuration 界面的 Software Packs 里就能看到 X-CUBE-AI 了。
验证安装:新建一个项目,在 Software Packs → Select Components 里能看到 X-CUBE-AI 的组件列表,说明安装成功。

2.5 创建第一个带 AI 功能的项目模板

环境搭好了,我们来创建一个项目模板。以后每章的新项目,都从这个模板复制,省去重复配置的时间。

2.5.1 新建 CubeMX 项目

  1. 打开 CubeMX,点 File → New Project。
  2. 在 MCU Selector 里选芯片。我推荐 STM32F746NG 或 STM32H743,这两款性能足够跑 AI 推理。
  3. 双击芯片型号,进入配置界面。

2.5.2 配置外设

AI 项目最少需要以下外设:

外设 用途 配置建议
USART1 打印推理结果 波特率 115200,8N1
DMA 加速数据传输 开启 USART1 TX DMA
RCC 时钟配置 HSE + PLL,主频拉到最高
GPIO LED 指示状态 推挽输出,初始低电平

2.5.3 添加 X-CUBE-AI 组件

  1. 在 Pinout & Configuration 界面,点 Software Packs → Select Components。
  2. 勾选 X-CUBE-AI → Core 和 X-CUBE-AI → Validation。
  3. 点 OK,CubeMX 会自动添加 AI 库文件。
我曾经踩过的坑:X-CUBE-AI 的版本要和 CubeMX 匹配。比如 CubeMX 6.8 配 X-CUBE-AI 8.0,如果版本差太多,生成代码时会报 "component not found" 错误。建议都用最新版。

2.5.4 生成代码

  1. 点 Project → Generate Code。
  2. IDE 选 STM32CubeIDE,项目名填 AI_Template。
  3. 点 Generate,CubeMX 会生成完整的项目文件。

2.5.5 在 CubeIDE 中验证

  1. 打开 CubeIDE,点 File → Import → Existing Projects,选择刚才生成的 AI_Template 文件夹。
  2. 展开项目,在 Core/Src/main.c 里找到 main() 函数。
  3. 在 /* USER CODE BEGIN 2 */ 和 /* USER CODE END 2 */ 之间添加测试代码:
/* USER CODE BEGIN 2 */
printf("AI Template Ready!\r\n");
HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_SET);
/* USER CODE END 2 */
  1. 点 Build 按钮(锤子图标),编译通过就说明环境没问题。

2.6 项目模板结构说明

生成的项目模板长这样:

AI_Template/
├── Core/
│   ├── Inc/          # 头文件
│   ├── Src/          # 源文件
│   └── Startup/      # 启动文件
├── Drivers/          # HAL 库驱动
├── Middlewares/       # 中间件(含 X-CUBE-AI 库)
├── X-CUBE-AI/        # AI 相关文件
│   ├── App/          # 应用层接口
│   ├── Lib/          # 静态库
│   └── network/      # 模型转换后的 C 代码
└── .project          # IDE 项目文件
重点:以后我们训练好的模型,经过 X-CUBE-AI 转换后,会放在 X-CUBE-AI/network/ 目录下。你只需要在 App/ 里调用推理函数就行,不用手动修改底层代码。

2.7 常见问题与解决

问题 原因 解决方法
编译报错 "undefined reference to `ai_xxx`" X-CUBE-AI 库未正确链接 检查项目属性 → C/C++ Build → Settings → MCU GCC Linker → Libraries,确认添加了 -lai
printf 不输出 未重定向 _write 函数 在 main.c 添加 int _write(int file, char *ptr, int len) { HAL_UART_Transmit(&huart1, ptr, len, 100); return len; }
CubeMX 生成代码后 CubeIDE 报错 CubeMX 和 CubeIDE 版本不匹配 升级两者到最新版,重新生成代码
总结一下:环境搭建其实不难,关键是版本匹配和路径规范。模板创建好后,建议压缩备份一份。以后每章开始新项目,直接解压改名字,能省下至少 20 分钟。