STM32CubeMx wiht AI 初體驗

  • File: 初使用STM32CubeMX 燒錄AI極簡model
  • Tips: 沒有圖片的文章都是耍流氓,本文填充了大量的截圖
  • Github: project1
  • Author: [email protected]
  • Date: 2020/07/02
  • 感謝張老師 ([email protected]) 的援助之手

0x00 嵌入式關聯AI

AI落地一直是一個很紅火的前景和朝陽行業。

關於任何嵌入式和AI相關的都是想嘗一嘗。

此篇文章就是關於STM32CubeMX 初體驗的一篇文章。

STM32CubeMX是ST公司推出的一種自動創建單片機工程及初始化代碼的工具,適用於旗下所有STM32系列產品。

0x01 準備工作

1.1 安裝三個軟件包

操作系統是ubuntu 18.04, 安裝過程很是簡單,網上都有很成熟的教程,在此不贅述

  • STM32CubeMx

  • STM32CubeProgrammer

    安裝好之後,在終端執行安裝包路徑下的bin 文件夾下的`` , 會報**錯誤:找不到或無法加載主類 com.st.app.Main**,這時候只要將 ubuntu 默認的Open-JDK 換成Oracle JDK就好了,下面是切換成Oracle JDK 成功的截圖

    # Oracle 官網中下載JavaSE JDK 壓縮包
    $ sudo tar zxvf jdk-8u172-linux-x64.tar.gz -C /usr/lib/jvm
    # 將下載的JDK註冊到系統中
    $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_172/bin/java 300
    # 切換JDK
    $ sudo update-alternatives --config java
    # 查看JDK 版本
    $ java -version
    

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KYAgbwuk-1593757543159)(https://s1.ax1x.com/2020/07/03/NO9x8x.png)]

  • STM32CubeIDE

1.2 PC端搭建一個極簡網絡

在此處,我選擇了最簡單的一個項目 - Linear Regression

  • tf2_linear_regression.ipynb 內涵三種不同方式搭建網絡結構
  • tf2_線性迴歸_擴展.ipynb 內涵不同方式訓練模型

其中,在模型搭建的時候,重新溫習了一下,有三種方式:

  • Sequence
  • 函數式API
  • 子類

其中,三種方式的優缺點在這篇博客中已經詳細闡述。

在後期將PC端上的模型導入到CubeMx中,生成的時候出現了一點問題:

INVALID MODEL: Couldn't load Keras model /home/lebhoryi/RT-Thread/Edge_AI/Project1/keras_model.h5, 
error: Unknown layer: Functional

暫時的解決方式是採用Sequence 搭建網絡

訓練好的Model:keras_model.h5

網絡結構模型如下:

NOeFZ6.png

0x02 使用CubeMx

在此處,我選擇的是STM32H743ZIT6U

2.1 打開CubeMx & 選擇 H743ZI

NOZzRJ.png

NOZXIU.png

2.2 導入軟件包

打開菜單欄中的Help,選擇Embedded Software Packages Manager

選擇 STMicroelectronics,選擇 X-CUBE-AI,選擇版本,安裝好之後選擇右下角的Close

NOetzj.png

導入下載好的包

NOm9fg.png

會出現如下界面

NOmMp4.png

選擇串口通信

NOnEgH.png

2.3 導入PC端訓練好的模型

NOnpHx.png

分析model 能否燒錄,我的模型比較簡單,分析起來也就比較快

NOn38g.png

驗證工程文件,我的系統是ubuntu 18.04,不支持MDK,所以我選擇的是STM32CubeIDE

NOnsxJ.png

驗證成功界面

NOuPLn.png

2.4生成項目工程

NOM5GT.png

文件夾樹如下:

(base) #( 07/03/20@10:51上午 )( lebhoryi@RT-AI ):~/RT-Thread/Edge_AI@master✗✗✗
   tree -L 2 ./Project1 
./Project1
├── DNN  # CubeMX 生成工程路徑
│   ├── DNN.ioc  # CubeIDE 類型文件
│   ├── Drivers
│   ├── Inc
│   ├── Middlewares
│   ├── network_generate_report.txt
│   ├── Src
│   ├── Startup
│   ├── STM32CubeIDE
│   ├── STM32H743ZITX_FLASH.ld
│   └── STM32H743ZITX_RAM.ld
├── image  # 相關圖片保存文件夾
│   ├── mymodel1.png   # model
│   └── STM32H743.jpg  # H743
├── model  # model 保存路徑
│   └── keras_model.h5
├── Readme.md
├── tf2_linear_regression.ipynb
└── tf2_線性迴歸_擴展.ipynb

至此,神功練成了一大半,剩下的就是代碼調試的工作了

0x03 代碼調試

關於STM32CubeIDE 的初步認識:基礎說明與開發流程

3.1 導入工程

File 選項 --> import

NOjwJf.png

NOjFRU.png

導入成功的界面:

NOjgwn.png

3.2 生成.bin 文件

NOvQ7n.png

3.3 燒錄.bin 文件

打開STM32CubeProgramming,點擊右上角connect,然後選擇Open file,選擇要打開的.bin 文件

NOxsVs.png

燒錄成功的界面:

NOxWxU.png

3.4 other

在串口中實時顯示,有minicomcutecom兩種工具

下面是cutecom 的截圖

cutecom 和 上面的programming 有且僅有一個connect

NOzlWV.png

0x04 參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章