基于 STM32N6-AI Image Classification 使用 git bash 命令行示例 LAT1552

发布于:2025-09-04 ⋅ 阅读:(16) ⋅ 点赞:(0)

关键字:STM32,AI,gdb,STEdgeAI

1. 引言

STM32N6 正式发布后, STM32N6-AI 方案(参见 STM32N6-AI - AI software ecosystem for STM32N6 with Neural-ART accelerator - STMicroelectronics )引起了很多客户的兴趣。STM32N6-AI 例程 readme 中除了使用 IDE 外还提供了很多命令行操作,客户使用过程中有时会遇到一些小问题,本文以 x-cube-n6-ai-getstarted-v1.0.0 中 image_classification 为例,使用 git-bash 进行命令行实操,供客户入门参考。

2. Image Classification 工程简介

Image Classification 工程包含在 STM32N6-AI 方案包中,客户可以用其作为 STM32N6开发的入门工程。该工程提供了一个 STM32N6 嵌入式实时环境,用于执行 STEdgeAI 生成的图像分类模型。该工程是一个独立的工程,不做任何修改就可以直接使用,也可以在硬件上部署应用程序。用到的模型也是 ST ModelZoo 的一部分。

本文重点不在于模型的介绍,而是介绍如何 step-by-step 使用命令行操作完成整个工程的编译,调试,并烧录到 STM32N6-DK 板的过程。

2.1. 硬件准备

STM32N6-DK 开发板(见下图 1,$CR5 以上)。该板需要使用 USB-C 转 USB-C 电缆连接到板载 ST-LINK 调试适配器 CN6,以确保有足够的电压、电流。这里我们需要将板子设置为 Dev 模式(BOOT1 切换到右侧,即 BOOT1 为高,BOOT0 开关位置无关紧要)。

图 1. STM32N657-DK 板

2.2. 软件准备

STM32CubeIDE (不低于 STM32CubeIDE v1.17.0)
安装目录:C:\Apps\STM32CubeIDE_1.17.0

STM32CubeProgrammer (不低于 v2.18.0)
安装目录:C:\Apps\STM32CubeProgrammer

STEdgeAI (不低于 v2.0.0)
C:\ST\STEdgeAI

• Git Bash (v2.45.x.windows.x)

• Image Classification 工程
安装目录:C:\STM32N6\AI_Package\x-cube-n6-ai-getstarted-v1.0.0\image_classification

文中使用的是上面的安装目录为,具体参考时需要以实际安装路径为准。

3. 命令行操作

我们假定客户已经对工程目录及内容有了基本了解,让我们从命令行直接开始。

3.1. 编译

工程目录下如果已有 build 文件夹,请先删除(让我们从头一步步操作)。

Step 1. 首先我们启动 git bash 并进入当前工程目录(目录下已经有 Makefile)。

Step 2. 如果系统环境变量 PATH 中未添加 make 的路径,我们在当前 git bash 会话中添加其路径,客户可以根据自己的实际路径进行调整。

Step 3. 编译整个工程

等到编译完成,会生成 Project.elf,下面我们就可以用其进行 gdb 调试了。

3.2. gdb 调试

在调试前请先将 Binary 目录下的 ai_fsbl.hex 与 network_data.hex 烧录到 DK 板上。对于 FSBL 我们这里不多做赘述,请见工程 readme 等相关资料。关于 gdb 调试原理,也请参考相关资料,本文注重实操。

Step 1. 打开 gdb server 连接到 STM32N6 板。

如果 ST-LINK_gdbserver 在系统环境变量 PATH 中没有添加路径,则需要添加(见下面示例)。

Step 2. 在另外一个 git bash 终端中加载 gdb client 进行调试。

至此,程序在 STM32N6-DK 板上已经运行了起来,屏幕上会有来自摄像头的视频以及图像分类模型推理的输出信息。下面介绍一些使用 GDB 调试常用功能,供客户参考。

3.2.1. 断点设置与管理

gdb 设置断点有几种方法,可以以文件行号,函数设置,也可以添加条件断点。例子见下。在实操前先让我们熟悉一下 main.c 中的一段代码,如下图 2。

图 2. Network_Postprocess 在 main.c 中的示例代码

下面演示断点使用的常见命令,可以参考黄色字体部分的说明。

删除断点的命令如下:

3.2.2. 执行控制

软件 debug 时,一般需要下一步执行(next),单步执行(step in 进入函数),跳出函数(执行当前函数并返回),连续执行等。具体的命令见下面示例。

3.2.3. 变量,内存,寄存器内容的查看

3.2.4. 监控寄存器变化

例程中(main.c)中使用了 lcd, 本文以 LTDC 寄存器查询为例,对于其它外设寄存器的查看,可以参考该方法。这里我们依据 hlcd_ltdc 句柄查看相关寄存器,并轮询。

关于数据监控,也可以使用外置 python 脚本实现,由于不同的 gdb 环境对 python的支持不尽相同,也牵涉到 python 脚本的编写,展开内容较多,这里就不再赘述,有兴趣的客户可以自行实现。

gdb 调试命令丰富,想深入的客户可以参考相应文档进行更多尝试。

4. 外部 Flash 执行

前面我们介绍了工程的 git bash 命令行编译与调试,对于烧录到外部 flash,需要先找到 STM32 签名工具路径,Dev 模式下复位 STM32N6-DK 板,命令如下。

至此,烧录完成,将 STM32N6-DK 板上 Boot0, Boot1 开关拨到外部 Flash 启动位置,Reset,即可在板上测试 AI Image Classification 模型的性能了。

5. 小结

本文介绍了 STM32N6 AI Image Classification 例程使用 git bash 命令行的 hands-on 过程,介绍了命令行中使用的基本命令。供对 git bash 命令行进行编译、调试、烧录感兴趣的客户参考。
 


网站公告

今日签到

点亮在社区的每一天
去签到