4. 开发环境搭建
STM32N6 是 ST 首颗带自研 NPU(Neural-ART)的 MCU,围绕它做音频 AI 终端,工具链不是“装一个 IDE 就完事”,而是由五类工具各司其职、互相衔接:STM32CubeMX 负责引脚与外设的图形化配置并生成初始化代码;STM32CubeIDE 负责工程编译、下载与源码级调试;STM32CubeProgrammer 负责烧写、读回、擦除与选项字节(Option Bytes)管理;X-CUBE-AI 负责把训练好的神经网络模型转换成可在 STM32N6 上运行的 C 代码;调试工具链则包含 ST-LINK 驱动、SWD 连接、串口终端与日志输出。本章先完成安装与配置,再用“点灯 + 串口输出”验证整条链路是否打通。
一、安装顺序与版本选择
推荐安装顺序为:STM32CubeMX → STM32CubeIDE → STM32CubeProgrammer → X-CUBE-AI 扩展包 → 串口终端工具。STM32CubeIDE 自带 GCC 工具链和 ST-LINK GDB Server,安装时勾选“ST-LINK 驱动”即可;STM32CubeProgrammer 独立安装,用于处理 N6 的启动模式与外部 Flash 烧写。X-CUBE-AI 以扩展包形式集成进 CubeMX 与 CubeIDE,安装后在 CubeMX 的“Additional Software”中可见。版本上建议使用 CubeIDE 1.16 及以上、CubeMX 6.12 及以上、CubeProgrammer 2.17 及以上,以保证对 STM32N6 系列(如 STM32N657X0)的支持。
D:\STM32\ 下。二、用 CubeMX 建立第一个工程
打开 CubeMX,选择“New Project”,在搜索框输入 STM32N657X0H3Q(以 NUCLEO-N657X0-Q 开发板为例),双击进入引脚配置界面。先做三件事:
- 配置时钟源:在 System Core → RCC 中把 HSE 设为 Crystal/Ceramic Resonator,为后续音频采样提供稳定时钟基准。
- 配置调试接口:System Core → SYS 中 Debug 选择 Serial Wire,否则下载一次后 SWD 引脚被复用,后续无法再连接。
- 配置串口:在 Connectivity 中选择 USART3,Mode 设为 Asynchronous,波特率 115200,8 位数据、无校验、1 位停止位。NUCLEO 板上 USART3 默认连到 ST-LINK 虚拟串口,无需额外接线。
接着配置一个 LED。以板载 LD1 为例,对应引脚 PF13(不同板卡可能不同,以原理图为准),点击该引脚选择 GPIO_Output,在 GPIO 参数中把 Output level 设为 Low,Mode 设为 Output Push Pull,Pull-up/Pull-down 设为 No pull,Speed 设为 Low,User Label 填 LED1。这样生成的代码里会出现 LED1_Pin 与 LED1_GPIO_Port 宏,便于阅读。
在 Project Manager 中填写工程名(如 N6_LedUart),Toolchain 选择 STM32CubeIDE,勾选“Generate peripheral initialization as a pair of .c/.h files”,然后点击 GENERATE CODE。CubeMX 会生成 Core/Src/main.c、gpio.c、usart.c 等文件,其中 MX_GPIO_Init() 与 MX_USART3_UART_Init() 已完成寄存器级配置。
三、在 CubeIDE 中编写点灯与串口代码
用 CubeIDE 打开刚生成的工程,编译一次确认无错误。然后在 main.c 的 while (1) 循环内加入以下代码(注意写在 /* USER CODE BEGIN WHILE */ 与 /* USER CODE END WHILE */ 之间,重新生成代码时不会被覆盖):
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
printf("LED toggled, tick=%lu\r\n", HAL_GetTick());
HAL_Delay(500);
要让 printf 走串口,需要重定向 _write(GCC 环境)或 fputc(Keil 环境)。在 CubeIDE 中推荐在 main.c 的用户代码区加入:
#include <stdio.h>
int _write(int file, char *ptr, int len) {
HAL_UART_Transmit(&huart3, (uint8_t *)ptr, len, HAL_MAX_DELAY);
return len;
}
编译后点击 Run → Debug,CubeIDE 会自动调用 ST-LINK GDB Server 下载程序并停在 main() 入口。按 F8 全速运行,板上 LED 应以约 1 Hz 频率闪烁。
四、用串口终端验证输出
打开任意串口终端(PuTTY、Tera Term 或 CubeIDE 内置的 Serial Monitor),选择 ST-LINK 对应的 COM 口,参数 115200-8-N-1。复位开发板后应看到类似输出:
LED toggled, tick=500
LED toggled, tick=1000
LED toggled, tick=1500
如果 LED 不闪且串口无输出,按以下顺序排查:确认 SYS Debug 已设为 Serial Wire;确认 USART3 的引脚未被其它外设占用;用万用表测 LED 引脚电平是否在翻转;检查串口终端是否选错 COM 口或被其它软件占用。若下载时报“No STM32 target found”,多为 SWD 被禁用或板子处于低功耗态,可按住复位键再点击下载,或通过 BOOT0 进入系统存储器模式后用 CubeProgrammer 擦除。
五、X-CUBE-AI 的接入位置
点灯与串口跑通后,X-CUBE-AI 才真正登场。在 CubeMX 中打开“Additional Software”,勾选 X-CUBE-AI,选择版本后进入其配置页,导入 .tflite 或 .onnx 模型,设置量化方式(推荐 int8)与输入输出张量,点击“Analyze”可看到模型在 STM32N6 上的 RAM/Flash 占用与 NPU 加速层数。生成代码后,CubeIDE 工程中会多出 X-CUBE-AI/App 目录,其中 network.c 提供 ai_network_create()、ai_network_run() 等接口,后续音频推理章节将直接调用它们。
六、常见问题速查
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 下载报 “No STM32 target found” | SWD 引脚被复用或芯片进入低功耗 | 按住复位再下载,或用 BOOT0 进系统存储器擦除 |
| 串口无输出 | COM 口选错 / 波特率不匹配 / _write 未重定向 | 核对设备管理器、115200-8-N-1、检查重定向函数 |
| LED 不亮 | 引脚号与原理图不符 / 未调用 MX_GPIO_Init() | 查板卡原理图,确认 main() 中初始化顺序 |
| X-CUBE-AI 分析失败 | 模型算子不支持 / 路径含中文 | 换用支持算子或改用 ONNX,路径改英文 |