偶然看到一篇好文章,分享给大家。 + [% V) {, S+ C8 d% S( Y今天介绍下ST官方刚刚推出的CubeMx 自带的X-CUBE-AI(Artificial intelligent)插件功能,可以给现有的STM32 M3-M7高性能的处理器添加基于训练好的ANN 的模型用于不同的数据分析处理。 使用STM32Cube.AI简化了人工神经网络映射 1.可与流行的深度学习培训工具互操作 2.兼容许多IDE和编译器 3.传感器和RTOS无关 4.允许多个人工神经网络在单个STM32MCU上运行 5.完全支持超低功耗STM32MCU : Z+ c( P. H4 ^; M- w6 b# S提高您的工作效率 利用DeepLearning的强大功能提高信号处理性能并提高STM32应用程序的生产率。创建人工神经网络并将其映射到STM32(通过CubeMx自动生成优化的代码),而无需手动构建代码。 以上就做个简短的介绍,想了解更多有关STM32Cube.AI可以访问下面的链接:http://www.st.com/content/st_com ... 2_gl_social_dec2018 那先前的准备工作就是需要安装最新版本的CubeMx 5.0.1 然后使用CubeMx 去安装X-CUBE-AI插件, 700多M的容量。。慢慢下载吧 3 G0 b/ c0 N% w6 z9 i. t8 O0 H下载好后,CubeMx里的Artificial intelligent 激活Enable 这里我们就可以看到里面的选项了 下载下来。。然后选择Keras 的AI API算法 model.h5就是我们需要导入到工程里的AI Keras的训练好的模型 Human Activity Recognition Using Convolutional Neural Network in Keras 人类活动识别卷积神经网络算法模型 然后我们导入到工程里 这里选择压缩参数,不同的压缩参数对MCU的flash容量 要求也不一样。。 点击Analyze cube就好计算使用这个神经网络算法的ram和flash容量占用 好了结果出来了, 9 S# D3 V- ]4 q* b5 T经过分析后Cube会自动列出可以使用的MCU 然后显示在列表里 这里举个例子,我们选择没有压缩优化 分析模型算法后的结果我没有匹配的MCU可以使用 这是选择压缩比参数8的结果,可以支持很多的MCU使用这个神经网络算法。。 好了,这里我们就选择STM32F767ZI Nucleo 板卡作为 这次演示使用的板卡 % w$ F0 m) `) D7 l" Q4 m& {. K# U 选择好Validation 和打勾 AI core 然后在cube 左下方可以看到下图箭头 提示的插件功能 - Q1 x+ K6 d. x1 I9 C我们需要打勾以下2个功能 然后创建我的AI算法名称,这个名称会在后续的里自动创建好。 8 \: K. x h' s3 {5 Z& i; T3 J3 B添加好,我们下载好的AI神经网络算法,然后再Analyze下就好。。打勾表示验证通过 然后我们需要配置我们的mcu的 CPU ICache 和 CPU DCache $ O r4 [) _- f3 N: {4 k然后配置MCU主频为216Mhz 0 ]% r) ]. ~4 A8 z 然后我们需要配置串口3和CubeMx进行通讯,验证我们工程。。。 然后在 AI扩展功能里选择通讯端口为串口3 + ~, R& U( c6 \0 Z# Z1 j# ~9 r+ K) d2 @3 l M0 W! a/ q5 w& P 好了工程生成好了,我们就可以 使用IAR 打开工程了 工程如下,工程里自动生成了基于AI的算法的所以文件 这里可以看到,基于AI训练好的模型数据列表。。。 好了,配置位STLINK,然后编译好就可以直接下载到板子上了 好了,现在我们需要回到CubeMx里,回到 AI扩展功能里。。 先重启下开发板,然后 点击Validation on target 选择手动,然后选择对应的串口端口 ( O0 U( a6 O+ I1 Q8 o这里可以看到验证已经开始了‘ ’, m+ r0 u( q/ P/ G 好了,结果出来了。我们可以在串口输出的信息里看到有关的数据 + v- b' i6 U$ a: ]& j7 y好了,基于CubeMx+AI扩展库的使用就分享到这了,想了解更多关于 使用STM32 AI的朋友可以关注ST官网的教程。。。 |
【合集】STM32F7教程、资料大集合
【STM32H7S78-DK评测】移植AI框架TensorFlow Lite【上篇】
【STM32H7S78-DK评测】移植边缘AI推理框架——TFLM(TensorFlow Lite for Microcontrollers)上篇
《无刷直流电机控制应用 基于STM8S系列单片机》
STM32定时器触发SPI逐字收发之应用示例
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
破解边缘AI硬件与软件挑战,意法半导体解读三大创新要点
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
【STM32图书分享之九】—《STM32F 32位ARM微控制器应用设计与实践》
基于STM32F746G-Discover的扩展电路板
assembling startup_stm32f767xx.s...
compiling main.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory: A; p7 |/ l/ A1 M8 c
#include "network.h"
../Src/main.c: 0 warnings, 1 error
compiling app_x-cube-ai.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory
#include "network.h"# ~ c H, W4 u/ ^! C
../Src/app_x-cube-ai.c: 0 warnings, 1 error
compiling stm32f7xx_it.c...1 A6 _/ X4 s$ L6 O7 `
compiling stm32f7xx_hal_msp.c...6 ]- I: a2 z7 p$ i8 W9 y* `
compiling stm32f7xx_hal_cortex.c...
compiling stm32f7xx_hal_crc.c...9 n; O0 `' e7 [8 E p8 b
compiling stm32f7xx_hal_crc_ex.c...0 ?/ d$ C! H* q! A! o: c
compiling stm32f7xx_hal_tim.c...2 P6 Z. _* L$ ^7 f3 m" C
compiling stm32f7xx_hal_tim_ex.c...
compiling stm32f7xx_hal_uart.c...
compiling stm32f7xx_hal_uart_ex.c.../ g7 |# }* H7 _; D2 t( g" L9 Y
compiling stm32f7xx_hal_rcc.c...
compiling stm32f7xx_hal_rcc_ex.c...
compiling stm32f7xx_hal_flash.c...+ z! I6 I8 E4 e2 c
compiling stm32f7xx_hal_flash_ex.c...
compiling stm32f7xx_hal_gpio.c...* Q" R8 t5 T# w* o9 u
compiling stm32f7xx_hal_dma.c..., Q4 N' z, ] Z
compiling stm32f7xx_hal_dma_ex.c...$ x0 d) O" p: K! @# a$ q( a. {7 m
compiling stm32f7xx_hal_pwr.c...
compiling stm32f7xx_hal_pwr_ex.c...' ^, _# D8 W) v- F
compiling stm32f7xx_hal.c...4 U- q" ]* e. A0 d" F e4 v5 v
compiling stm32f7xx_hal_i2c.c...
compiling stm32f7xx_hal_i2c_ex.c...
compiling stm32f7xx_hal_exti.c...
compiling system_stm32f7xx.c..., J( G- y' l( V5 a# }5 V% W
compiling aiPbMgr.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory' W s8 @ |; x4 k4 |) w2 n( n
#include "network.h"
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiPbMgr.c: 0 warnings, 1 error- G$ J5 a( N' C, X0 x
compiling aiTestUtility.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory
#include "network.h"% Z' K, t9 ~! h7 ]5 B& H0 h
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiTestUtility.c: 0 warnings, 1 error4 t/ }6 ]( A; `) Y2 q5 w* W; s
compiling aiValidation.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory: R# u, g6 }; k% ]% P
#include "network.h"
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiValidation.c: 0 warnings, 1 error
compiling pb_common.c..." @- \+ z) @# E% K- l) K
compiling pb_decode.c... q# W3 F& c9 q( u% B
compiling pb_encode.c...# Q( {4 `- c* T: C* |6 a8 q/ c7 h
compiling stm32msg.pb.c...
"STM32F767_AI\STM32F767_AI.axf" - 5 Error(s), 0 Warning(s).
Target not created.
assembling startup_stm32f767xx.s...7 v/ A6 }' c9 b3 P @7 e) x. I
compiling main.c..., g& O8 f( |4 W6 G
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory' ?& j2 s0 I" d3 N
#include "network.h"
../Src/main.c: 0 warnings, 1 error
compiling app_x-cube-ai.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory/ ~% _! g5 y9 ^7 `9 ~1 Z
#include "network.h": w4 [5 D- I- m" ~6 n
../Src/app_x-cube-ai.c: 0 warnings, 1 error
compiling stm32f7xx_it.c...5 e# p7 h! y% N. [3 n
compiling stm32f7xx_hal_msp.c...
compiling stm32f7xx_hal_cortex.c...
compiling stm32f7xx_hal_crc.c...( `& @ }( E# ]2 o. v: j! L! Y
compiling stm32f7xx_hal_crc_ex.c..., ^7 m' `4 P' ]
compiling stm32f7xx_hal_tim.c...
compiling stm32f7xx_hal_tim_ex.c...
compiling stm32f7xx_hal_uart.c...5 F0 n7 v4 ~% y1 [
compiling stm32f7xx_hal_uart_ex.c...& \; b; I. P% n e
compiling stm32f7xx_hal_rcc.c...
compiling stm32f7xx_hal_rcc_ex.c...' T! \& G! r' u) D& u! O& Z
compiling stm32f7xx_hal_flash.c...) K6 R% q1 K3 e4 G7 ]
compiling stm32f7xx_hal_flash_ex.c...
compiling stm32f7xx_hal_gpio.c...( ` C1 W* f% a5 F6 M9 y
compiling stm32f7xx_hal_dma.c...
compiling stm32f7xx_hal_dma_ex.c...
compiling stm32f7xx_hal_pwr.c...' w' e, v; c" H
compiling stm32f7xx_hal_pwr_ex.c...7 [ X: @+ @0 Y& B
compiling stm32f7xx_hal.c...
compiling stm32f7xx_hal_i2c.c...
compiling stm32f7xx_hal_i2c_ex.c...
compiling stm32f7xx_hal_exti.c...
compiling system_stm32f7xx.c...
compiling aiPbMgr.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory6 t; }0 H, e0 a1 n
#include "network.h"6 G' D! k. }/ G2 A4 N7 H
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiPbMgr.c: 0 warnings, 1 error
compiling aiTestUtility.c...0 T7 V0 w4 k7 S
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory/ Y( X* d' N9 m
#include "network.h"2 L- ?; L, f: w% X* u* d
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiTestUtility.c: 0 warnings, 1 error r6 r3 t/ V1 P4 I& l
compiling aiValidation.c...
../Inc/app_x-cube-ai.h(77): error: #5: cannot open source input file "network.h": No such file or directory7 H* @8 B, E5 I9 R0 K# v5 D
#include "network.h"
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiValidation.c: 0 warnings, 1 error% j) ~) N: F5 n; t
compiling pb_common.c..." m3 p0 k3 ^3 L# N n- X5 [
compiling pb_decode.c...
compiling pb_encode.c...
compiling stm32msg.pb.c.../ ]% [ y$ q# [3 K! w. u
"STM32F767_AI\STM32F767_AI.axf" - 5 Error(s), 0 Warning(s)./ L, c. @$ z1 r* A5 n2 A+ d
Target not created.
首先确保已经安装了AI库
使能Atificial intelligence后,配置好参数,确保自己使用的单片机是在列表中的。
# H a8 Q$ ]$ v8 I
/ [' M9 w) G% {/ t% r# m
1 c6 Z& d) C( Z% V6 w8 C% Y
如果确定上面操作无误,界面还是空的话那就看看这里的配置是否和你真实的路径是一致的。
3 Z0 O$ v. ?. D% i
厉害了大佬
model.h5就是我们需要导入到工程里的AI Keras的训练好的模型
输出吗 这是去使用库的AI神经算法
我导入model.h5就没反应了,没有出现他教程中的STM32F767AI.H5,请问要怎么操作
导入到工程的时候,没出现STM32F767AI.h5吗4 ^+ F' Z* T" u6 B* v