<style> .reveal .slides { text-align: left; } </style> # <font size=20>*於Ubuntu安裝 Mbed CLI*</font><br> --- <font size=10>Board: NUCLEO-F767ZI, OS: Ubuntu 22.04</font> ![ubuntuOS](https://hackmd.io/_uploads/rkXo2u7zC.jpg =700x) --- # <font size=18>下載STM32CubeProgrammer</font> - ST官方的MCU firmware 燒錄和清除的工具,可簡單測試board的ST-LINK是否連線成功 https://www.st.com/en/development-tools/stm32cubeprog.html - 會要求申請ST的帳號 ![image](https://hackmd.io/_uploads/ryj6scPQ0.png =600x) --- # <font size=18>安裝STM32CubeProgrammer</font> - 用firefox瀏覽器下載通常會儲存在 ~/Downloads ```bash= $ unzip ~/Downloads/en.stm32cubeprg-lin-xx-xx-xx.zip -d ~/stm32cubeprog $ sudo ~/stm32cubeprog/SetupSTM32CubeProgrammer-xx.xx.xx.linux ``` - 如在Windows的GUI安裝,一直「next」即可 ![image](https://hackmd.io/_uploads/rJnrpcDmA.png =400x) --- # <font size=18>執行STM32CubeProgrammer</font> ```bash= $ sudo /usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32CubeProgrammer ``` - 接上board後serial會顯示ID數字,點選STM32CubeProg的Connect後會顯示flash的內容 - 操作完後,記得要點選Disconnect ![image](https://hackmd.io/_uploads/r1NnwoPXR.png =400x) --- # <font size=18>Mbed CLI官方安裝參考連結</font><br> https://os.mbed.com/docs/mbed-os/v6.16/build-tools/install-and-set-up.html --- # <font size=18>安裝必要工具</font><br> ```bash= $ sudo apt-get update $ sudo apt-get install git mercurial libusb-1.0-0-dev gcc ``` - 在windows環境安裝有寫到建議是Python3.7 - 用最新版本的Python,會有lib衝突問題 ![image](https://hackmd.io/_uploads/HyMReFXzC.png) --- # <font size=18>安裝 conda: 用於管理Python版本</font><br> ```bash= $ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh ``` ![image](https://hackmd.io/_uploads/r1yjQF7fA.png) ```bash= $ sh Miniconda3-latest-Linux-x86_64.sh ``` - Default設定:說明到最底部後輸入yes,之後一直Enter到結束 - 關閉安裝conda的terminal,再開啟新terminal --- # <font size=18>啟用conda</font><br> - 在最前面會顯示 (base),如下範例 ```bash= (base) user@machine:~$ ``` - 輸入以下指令安裝Python的指定版本 ```bash= $ conda create -n tflm python=3.7 ``` - 每次開啟新的視窗,都要啟用conda ```bash= $ conda activate tflm ``` - 在最前面的顯示 (tflm),使用mbed-cli才會對應到正確的Python版本 --- # <font size=18>下載GNU compiler</font><br> - Reference: https://os.mbed.com/docs/mbed-os/v6.16/build-tools/index.html#compiler-versions - GCC ARM compiler 下載網址: https://developer.arm.com/downloads/-/gnu-rm ![image](https://hackmd.io/_uploads/S1C9G8gV0.png) --- # <font size=18>安裝GNU compiler</font><br> - 可以透過瀏覽器下載或是輸入指令 ```bash= $ cd ~ $ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 ``` - 解壓縮指令 ```bash= $ cd ~ $ tar -xvjf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 ``` --- # <font size=18>安裝mbed-cli</font><br> - 輸入以下指令 ```bash= $ pip install mbed-cli $ mbed config -G GCC_ARM_PATH ~/gcc-arm-none-eabi-9-2019-q4-major/bin/ $ mbed config -G TOOLCHAIN GCC_ARM ``` - 檢查設定 ```bash= $ mbed config --list ``` - 安裝mbed-os必要模組 ```bash= $ wget https://raw.githubusercontent.com/ARMmbed/mbed-os/master/requirements.txt $ pip install -r requirements.txt ``` --- # <font size=18>安裝pyOCD</font><br> ```bash= $ git clone https://github.com/pyocd/pyOCD ~/pyOCD $ cd ~/pyOCD $ pip install . ``` - 設定ST-LINK的udev環境 ```bash= $ sudo cp ~/pyOCD/udev/*.rules /etc/udev/rules.d $ sudo udevadm control --reload-rules && sudo udevadm trigger $ sudo usermod -a -G dialout $USER # 完成後Log Out再Log In 或 Restart,登錄後記得再執行conda activate tflm ``` --- # <font size=18>設定目標開發板NUCLEO_F767ZI</font><br> - 輸入指令後,顯示與F767相關的package ```bash= $ pyocd pack find F767 Part Vendor Pack Version Installed --------------------------------------------------------------------------------- SN32F767BF SONiX SONiX.SN32F7_DFP 1.5.7 False SN32F767F SONiX Keil.SN32F7_DFP 1.0.2 False STM32F767BGTx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767BITx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767IGKx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767IGTx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767IIKx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767IITx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767NGHx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767NIHx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767VGHx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767VGTx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767VIHx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767VITx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767ZGTx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False STM32F767ZITx STMicroelectronics Keil.STM32F7xx_DFP 2.16.0 False ``` --- # <font size=18>設定目標開發板NUCLEO_F767ZI</font><br> - NUCLEO_F767ZI開發板使用STM32F767ZITx,輸入安裝package ```bash= $ pyocd pack install STM32F767ZITx # 重新連接NUCLEO_F767ZI到ubuntu $ pyocd list --probe # 驗證是否有連接到NUCLEO-F767ZI board ``` ![image](https://hackmd.io/_uploads/rkrFlIcmC.png) --- # <font size=18>下載mbed-os範例</font><br> https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-blinky/ ```bash= $ cd ~ $ mbed import mbed-os-example-blinky $ cd mbed-os-example-blinky $ mbed target NUCLEO_F767 $ mbed toolchain GCC_ARM # 若顯示[mbed] ERROR: Could not find mbed program in current path,輸入mbed config root . $ mbed config --list # 檢查設定 [mbed] Global config: TOOLCHAIN=GCC_ARM GCC_ARM_PATH=~/gcc-arm-none-eabi-9-2019-q4-major/bin/ [mbed] Local config (~/mbed-os-example-blinky): TARGET=NUCLEO_F767ZI TOOLCHAIN=GCC_ARM ``` --- # <font size=18>檢測mbed是否偵測到目標裝置</font><br> ```bash= $ mbed detect [mbed] Detected NUCLEO_F767ZI, port /dev/ttyACM0, mounted /media/rex/NOD_F767ZI, interface version V2J43M28: [mbed] Supported toolchains for NUCLEO_F767ZI | Target | mbed OS 2 | mbed OS 5 | ARM | uARM | GCC_ARM | IAR | |---------------|-----------|-----------|-----------|------|-----------|-----------| | NUCLEO_F767ZI | - | Supported | Supported | - | Supported | Supported | ``` - 若mbed detect沒有偵測到目標裝置,需要修改ST-LINK的Firmware --- # <font size=18>使用STM32CubeProg修改ST-LINK設定</font><br> ![image](https://hackmd.io/_uploads/By8FsreNR.png =600x) - 點選firmware upgrade (不要點Connect) - Open in Update mode (開啟update mode後,若沒有version,再按一次) - 設定Debug+Mass storage+VCP - 點選Upgrade後,等待完成 --- # <font size=18>編譯blinky和燒錄進目標裝置</font><br> ```bash= $ mbed compile -m NUCLEO_F767ZI -f [mbed] Working path "~/mbed-os-example-blinky" (program) Building project mbed-os-example-blinky (NUCLEO_F767ZI, GCC_ARM) Scan: mbed-os-example-blinky Link: mbed-os-example-blinky Elf2Bin: mbed-os-example-blinky | Module | .text | .data | .bss | |----------------------|-----------|----------|-----------| | [fill] | 100(+0) | 3(+0) | 24(+0) | | [lib]/c.a | 4852(+0) | 2108(+0) | 89(+0) | | [lib]/gcc.a | 920(+0) | 0(+0) | 0(+0) | | [lib]/misc | 180(+0) | 4(+0) | 28(+0) | | [lib]/stdc++.a | 0(+0) | 0(+0) | 0(+0) | | main.o | 50(+0) | 0(+0) | 0(+0) | | mbed-os/cmsis | 9540(+0) | 168(+0) | 6212(+0) | | mbed-os/connectivity | 2140(+0) | 0(+0) | 12796(+0) | | mbed-os/drivers | 194(+0) | 0(+0) | 0(+0) | | mbed-os/events | 1518(+0) | 0(+0) | 3104(+0) | | mbed-os/hal | 1580(+0) | 8(+0) | 114(+0) | | mbed-os/platform | 5836(+0) | 260(+0) | 365(+0) | | mbed-os/rtos | 1206(+0) | 0(+0) | 8(+0) | | mbed-os/targets | 13644(+0) | 9(+0) | 1316(+0) | | Subtotals | 41760(+0) | 2560(+0) | 24056(+0) | Total Static RAM memory (data + bss): 26616(+0) bytes Total Flash memory (text + data): 44320(+0) bytes Image: ./BUILD/NUCLEO_F767ZI/GCC_ARM/mbed-os-example-blinky.bin ``` - 完成後NUCLEO_F767ZI的LD1會每秒1次的頻率閃爍 --- # <font size=18>Memory使用量</font><br> ![image](https://hackmd.io/_uploads/Bkzm1VQVA.png) - 編譯後的輸出結果的最後幾行內容有static RAM和Flash的使用量 - data: 有初始化的變數 - bss: 無初始化的變數 - text: 給CPU執行的機械碼 --- # <font size=18>使用STM32CubeProg清除FW技巧</font><br> - mbed project寫入後會被保護,不能直接使用STM32CubeProg的Connect ![image](https://hackmd.io/_uploads/ByCbu8lNA.png) - Method 1:調成hardware reset再按STM32CubeProg的Connect按鈕 - Method 2:在software reset狀態下,壓著開發板的reset按鈕。按下STM32CubeProg的Connect按鈕後,放開開發板的reset按鈕。 - STM32CubeProg左下角橡皮擦圖案即Erase all --- # <font size=18>SemGCN-in-tflm的下載與修改</font><br> - github site: https://github.com/rniczh/SemGCN-in-tflm - 將/mbed-os-example-blinky/mbed-os的所有檔案複製到/SemGCN-in-tflm/mbed-os ```bash= $ cd ~ $ git clone https://github.com/rniczh/SemGCN-in-tflm $ cd ./SemGCN-in-tflm/mbed-os $ cp -r ~/mbed-os-example-blinky/mbed-os/* . ``` --- # <font size=18>不編譯SemGCN-in-tflm內不需要的檔案</font><br> ```bash= $ cd ~/SemGCN-in-tflm/ $ nano ./.mbedignore ``` - 增加以下內容到檔案內後儲存 ``` examples/ main.cpp // adj_data/h36m/case1/main_GLHS.cc adj_data/h36m/case1/main_GRHS.cc adj_data/h36m/case1/main_rosko.cc adj_data/h36m/case2/main_GLHS.cc adj_data/h36m/case2/main_GRHS.cc adj_data/h36m/case2/main_rosko.cc adj_data/METRLA/main_GLHS.cc adj_data/METRLA/main_GRHS.cc adj_data/METRLA/main_rosko.cc adj_data/PEMS03/main_GLHS.cc adj_data/PEMS03/main_GRHS.cc adj_data/PEMS03/main_rosko.cc adj_data/PEMS04/main_GLHS.cc adj_data/PEMS04/main_rosko.cc adj_data/PEMS08/main_GLHS.cc adj_data/PEMS08/main_GRHS.cc adj_data/PEMS08/main_rosko.cc adj_data/PEMSBAY/main_GLHS.cc adj_data/PEMSBAY/main_GRHS.cc adj_data/PEMSBAY/main_rosko.cc ``` --- # <font size=18>修改UART的輸出baud rate</font><br> ```bash= $ cd SemGCN-in-tflm/adj_data/h36m/case1/ $ nano main_GLHS.cc ``` ![image](https://hackmd.io/_uploads/B1kbUKxVA.png) --- # <font size=18>Serial port工具: picocom</font><br> - 開啟第二個terminal,輸入以下指令安裝工具 ```bash= $ sudo apt install picocom moreutils ``` - 開啟picocom的參數指令 ```bash= $ sudo picocom -b 115200 -d 8 -s 1 /dev/ttyACM0 ``` |代號| 說明 | |---|---------| | b |baud rate| | d |data bit number| | s |stop bit number| --- # <font size=18>開啟picocom的操作說明</font><br> - 先同時按Ctrl+a,再同時按Ctrl+h。可以看到操作說明。 ![image](https://hackmd.io/_uploads/Byn9GnUEA.png) --- # <font size=18>picocom的操作說明</font><br> | 操作方式 | 效果| | -------------- | ---- | | Ctrl+a, Ctrl+x | 離開picocom | | Ctrl+a, Ctrl+v | 顯示serial參數設定 | | Ctrl+a, Ctrl+b | 設定serial的baud rate | | Ctrl+a, Ctrl+c | 開啟/關閉顯示到輸出serial裝置的內容 | --- # <font size=18>SemGCN-in-tflm在picocom的輸出結果</font><br> - 在有tflm的terminal編譯SemGCN-in-tflm並燒錄 ```bash= (tflm)$ mbed compile -m NUCLEO_F767ZI -f ``` - 按下board上的reset按鈕,MCU會重新輸出結果 ![image](https://hackmd.io/_uploads/r1o5IhI4C.png=400x) --- # <font size=18>增加picocom的時間戳</font><br> - 退出原本的picocom,在terminal輸出以下指令 ```bash= $ sudo picocom -b 115200 -d 8 -s 1 /dev/ttyACM0 | ts "%Y-%m-%d %H:%M:%.S:" | awk '{print "\n" $0}' ``` ![image](https://hackmd.io/_uploads/HJQ4inINR.png) - 在接收到每筆資料前會印上ubuntu系統的時間 --- # <font size=18>End</font><br>
{"description":"<font size=8>Board: NUCLEO-F767ZI</font><br>","contributors":"[{\"id\":\"c49adc41-a7e5-470b-9878-42564f94bcdb\",\"add\":14420,\"del\":3278}]","title":"於Ubuntu安裝 Mbed CLI"}
    140 views