你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H5 评测】MNIST 数字识别

[复制链接]
无垠的广袤 发布时间:2026-10-26 12:00

【STM32H5 评测】MNIST 数字识别

本文介绍了 NUCLEO-H5E5ZJ 开发板结合 STM32Cube AI Studio 软件和 MNIST 数据集以及 TFLite 预训练模型,实现手写数字识别的项目设计,包括环境搭建、工程创建、关键代码、流程图、效果演示等。

cover_mnist.jpg

项目介绍

NUCLEO-C562RE 开发板实现手写数字识别。

  • 准备工作:环境搭建、STM32Cube AI Studio、硬件连接、模型获取等;
  • 工程创建:流程图、模型转换、工程代码等;
  • 工程测试:工程编译、固件上传、效果演示等。

硬件连接

使用 Type-C 数据线连接开发板 ST-LINK V3 接口与主机 USB 接口;

根据原理图,选择 PD8 和 PD9 作为 USART3 (板载ST-LINK虚拟串口)的通信引脚。

connect_hardware.jpg

环境搭建

logo_cubeai_studio.jpg

  • 进入 Setting 设置标签页,自动安装所需工具,包括 STM32CubeMX、STM32CubeProgrammer、STM32CubeIDE、ST Edge AI Core;

cubeai_setting.jpg

模型获取

使用预训练的 TFLite 模型,下载 trained.tflite 文件 。

参考:Mnist数字识别 · OpenMV .

TFLite

TFLite 模型是 TensorFlow Lite 的轻量级模型格式,用于在移动端和嵌入式设备上高效运行机器学习推理。

logo_tflite.jpg

TensorFlow Lite(TFLite)是 TensorFlow 的轻量级版本,专注于在移动设备、嵌入式系统和物联网设备上运行机器学习模型。TFLite 模型文件以 .tflite 为扩展名,采用 FlatBuffer 二进制格式存储,具有高效、低内存占用和快速访问的特点。

工程创建

新建工程,选择 NUCLEO-H5E5ZJ 开发板为目标设备;

cubeai_target_h5e5.jpg

工具链选择 CMake 以便使用 VS Code 调试,点击创建工程;

cubeai_toolchain.jpg

  • 选择 mnist 模型路径,确认相关参数(mode 为 on desktop);
  • 点击开发板右侧的设置按钮,配置串口为 USART3,PD8 和 PD9 引脚,点击运行按钮;

cubeai_run_model.jpg

  • 运行完成后,可查看存储占用与内存消耗;

cubeai_flash_ram.jpg

  • 点击 Generate code 按钮生成工程文件;

cubeai_generate_code.jpg

  • 点击打开工程文件夹,使用 VS Code 打开工程。

cubeai_code_generated.jpg

详见:【STM32U3 评测】MNIST 数字识别 .

流程图

flowchart_mnist.jpg

工程代码

打开 ./AI/APP/app_x-cube-ai.c 添加如下代码

int acquire_and_process_data()
{
  /* USER CODE BEGIN acquire_and_process_data */
  if (in_length != STAI_NETWORK_IN_NUM || stai_input[0] == NULL) {
    LC_PRINT("Input buffer is not available\r\n");
    return -1;
  }

  int8_t *input = (int8_t *)stai_input[0];
  for (stai_size i = 0; i < STAI_NETWORK_IN_1_SIZE; i++) {
    input[i] = (int16_t)pixel_data[i] + STAI_NETWORK_IN_1_ZERO_POINT;
  }

  return 0;
  /* USER CODE END acquire_and_process_data */
}

int post_process()
{
  /* USER CODE BEGIN post_process */
  if (out_length != STAI_NETWORK_OUT_NUM || stai_output[0] == NULL) {
    LC_PRINT("Output buffer is not available\r\n");
    return -1;
  }

  const int8_t *scores = (const int8_t *)stai_output[0];
  uint32_t best_digit = 0;
  for (uint32_t digit = 1; digit < STAI_NETWORK_OUT_1_SIZE; digit++) {
    if (scores[digit] > scores[best_digit]) {
      best_digit = digit;
    }
  }

  LC_PRINT("Recognized digit: %u\r\n", (unsigned int)best_digit);
  LC_PRINT("Confidence by digit:\r\n");
  for (uint32_t digit = 0; digit < STAI_NETWORK_OUT_1_SIZE; digit++) {
    uint32_t confidence =
        (((uint32_t)((int16_t)scores[digit] - STAI_NETWORK_OUT_1_ZERO_POINT)
          * 10000U) + 128U) / 256U;
    LC_PRINT("  %u: %u.%02u%%\r\n",
             (unsigned int)digit,
             (unsigned int)(confidence / 100U),
             (unsigned int)(confidence % 100U));
  }

  return 0;
  /* USER CODE END post_process */
}

保存代码。

编译上传

  • 点击下方工具栏的 生成 按钮,编译工程;
  • 点击左侧工具栏的 调试运行 按钮,点击上方的运行按钮,上传调试固件;
  • 待进入调试状态,点击悬浮工具栏的启动按钮,开始运行程序;

adc_debug.jpg

效果演示

  • 运行串口调试助手软件,连接 STLINK-V3 对应的虚拟串口,配置波特率 115200 bps,打开串口;
  • 短按板载复位按键,串口输出数字识别结果、计算时间等信息;

mnist_uart_print_result.jpg

总结

本文介绍了 NUCLEO-H5E5ZJ 开发板结合 STM32Cube AI Studio 软件和 MNIST 数据集以及 TFLite 预训练模型,实现手写数字识别的项目设计,包括环境搭建、工程创建、关键代码、流程图、效果演示等,为相关产品在边缘 AI 领域的快速开发和应用设计提供了参考。

flowchart_mnist.jpg
flowchart_mnist.jpg
赞 收藏 评论0 发布时间:2026-10-26 12:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版