首页 > 评测 > 【APM32F407IG Tiny Board测评】移植轻量级AI推理框架TinyMaix实现手写数字识别
【APM32F407IG Tiny Board测评】移植轻量级AI推理框架TinyMaix实现手写数字识别
- [导读]
- 本文将介绍如何为APM32F407IG芯片移植轻量级AI推理框架TinyMaix,并在开发板上运行TinyMaix的手写数字识别示例。本文将首先介绍TinyMaix是什么,以及APM32F407IG芯片的主要参数。然后,介绍如何为APM32F407IG芯片创建
一、背景介绍
1.1 TinyMaix框架简介
TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库,可以让你在任意单片机上运行轻量级深度学习模型。
1.2 TinyMaix上层API
/******************************* MODEL FUNCTION ************************************/
tm_err_t tm_load (tm_mdl_t* mdl, const uint8_t* bin, uint8_t*buf, tm_cb_t cb, tm_mat_t* in); //load model
void tm_unload(tm_mdl_t* mdl); //remove model
tm_err_t tm_preprocess(tm_mdl_t* mdl, tm_pp_t pp_type, tm_mat_t* in, tm_mat_t* out); //preprocess input data
tm_err_t tm_run (tm_mdl_t* mdl, tm_mat_t* in, tm_mat_t* out); //run model
/******************************* UTILS FUNCTION ************************************/
uint8_t TM_WEAK tm_fp32to8(float fp32);
float TM_WEAK tm_fp8to32(uint8_t fp8);
/******************************* STAT FUNCTION ************************************/
#if TM_ENABLE_STAT
tm_err_t tm_stat(tm_mdlbin_t* mdl); //stat model
#endif
-
模型函数,包括模型加载、卸载、预处理、推理;
-
工具函数,包含FP32和uint8的互转;
-
统计函数,用于输出模型中间层信息;
1.3 TinyMaix底层依赖
#define TM_ARCH_CPU (0) //default, pure cpu compute
#define TM_ARCH_ARM_SIMD (1) //ARM Cortex M4/M7, etc.
#define TM_ARCH_ARM_NEON (2) //ARM Cortex A7, etc.
#define TM_ARCH_ARM_MVEI (3) //ARMv8.1: M55, etc.
#define TM_ARCH_RV32P (4) //T-head E907, etc.
#define TM_ARCH_RV64V (5) //T-head C906,C910, etc.
#define TM_ARCH_CSKYV2 (6) //cskyv2 with dsp core
#define TM_ARCH_X86_SSE2 (7) //x86 sse2
#define TM_GET_US() ((uint32_t)((uint64_t)clock()*1000000/CLOCKS_PER_SEC))
#define TM_DBGT_INIT() uint32_t _start,_finish;float _time;_start=TM_GET_US();
#define TM_DBGT_START() _start=TM_GET_US();
#define TM_DBGT(x) {_finish=TM_GET_US();\
_time = (float)(_finish-_start)/1000.0;\
TM_PRINTF("===%s use %.3f ms\n", (x), _time);\
_start=TM_GET_US();}1.4 APM32F407IGT6芯片简介
-
CPU: Cortex-M4F内核,168 MHz
-
Flash: 1 MB
-
RAM: 192 KB

二、开发环境搭建2.1 下载APM32F407资料
-
APM32F405xG 407xExG数据手册
-
APM32F4xxx用户手册
-
APM32F407IG Tiny 原理图
-
APM32F4xx_SDK
-
APM32F4xx_DFP Pack
2.2 安装Keil MDK

2.3 安装ARM Compiler 5


2.4 安装APM32F4xx支持包
三、运行SysTick示例程序
3.1 下载APM32F4xx_SDK

3.2 编译SysTick示例程序


3.3 修改调试器设置
-
在Project视图中,鼠标右键APMFF407,弹出悬浮菜单,如下图所示:

-
单击”Options for Target ‘APM32FF407’“,将会弹出,如下图所示:

-
点击Debug标签页,界面如下图所示:

-
下来”ULINK2/ME Cortex Debugger“菜单,选中CMSIS-DAP,如下图所示:

-
继续点击刚刚的调试器下拉菜单右侧的”Settings“按钮,弹出CMSIS-DAP Cortex-M Target Driver Setup窗口,如下图所示:

-
点Flash Download标签页,界面显示如下图所示:


3.4 下载和运行SysTick示例程序



3.5 分析SysTick示例程序主要代码

-
CMSIS目录,启动(.s)和初始化(.c)
-
StdPeriphDriver目录,外设驱动库
-
Boards目录,APM32F407系列开发板条件编译
-
Application目录,中断处理(apm32f4xx_int.c)和应用代码(main.c)

-
APM_MINI_LEDToggle,用于实现LED3灯状态翻转;
-
SysTick_Delay_ms,用于实现延时,单位毫秒;
-
75行有一行对COM1的初始化,查看实现代码可以知道就是USART1,串口参数为8n1;
-
80行有一行printf打印语句,打印了一行文本,前后各有一个换行;

3.6 查看SysTick示例程序的串口输出

-
开箱之后发现,APM32F407-Tiny开发板的J3、J5并没有附带跳线帽;
-
通过USB线将APM32-Link连接到PC之后,并没有在设备管理器中看到串口设备;
-
APM32-Link固件不支持USB转UART;
-
APM32-Link的主控芯片APM32F103C8T6不支持USB功能;

-
开发板的U2TX,连接到USB转串口的RX
-
开发板的U2RX,连接到USB转串口的TX



-
USART1_TX,对应PA9
-
USART1_RX,对应PA10

-
APM_MINI_COMInit函数定义;
-
COM_TX_PORT、COM_TX_PIN_SOURCE数组定义;
-
MINI_COM1_TX_GPIO_PORT、MINI_COM1_TX_PIN_SOURCE宏定义;



-
APM_MINI_COMInit 替换为 APM_TINY_COMInit
-
APM_MINI_LEDInit 替换为 APM_TINY_LEDInit
-
APM_MINI_LEDToggle 替换为 APM_TINY_LEDToggle






-
在Project视图右键APM32F407,选择”Options for Target ‘APM32F407’“,如下图所示:
-
在弹出的Options for Target ‘APM32F407’窗口中,点击C/C++标签页,如图下图所示:
-
在C/C++标签页,点击Include Paths右侧的”…”按钮,会弹出Folder Setup界面,如下图所示:
-
在Folder Setup界面中,分别点击如下两处,选择目录进行添加:
-
在弹出的文件夹选择界面中,选择拷贝的TinyMaix的include目录,选择之后,如下图所示:


















-
APM32F405xG 407xExG数据手册: https://www.geehy.com/uploads/tool/APM32F405xG 407xExG数据手册 V1.5.pdf
-
APM32F4xxx用户手册: https://www.geehy.com/uploads/tool/APM32F4xxx用户手册 V2.0.pdf
-
APM32F407IG Tiny 原理图: https://www.geehy.com/uploads/tool/APM32F407IG TinyBoard.zip
-
APM32F4xx_SDK: https://www.geehy.com/uploads/tool/APM32F4xx_SDK_v1.3.zip
-
APM32F4xx_DFP Pack: https://www.geehy.com/uploads/tool/Geehy.APM32F4xx_DFP.1.0.3.pack
-
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前