MicroPython on Nucleo-F401RE, 1. flash uPython image

前一陣子花了不少時間玩ESP8266(D1 Mini)上的MicroPython, 趙英傑先生的那本談ESP8266 MicroPython的書, 已經幫大家整理了很多觀念和用法, 省了不少時間! 用了就知道, 論開發速度, 入門容易度, MicroPython比起傳統的C開發環境, 都好上很多. 所以許多情境下, 這個方式真的可以做到"快快寫完, 快快去玩"的美妙境界!

使用ESP8266的好處是它本身的WiFi功能, 有連網能力, 用處多很多! 但其實Damien George最先推出的開發板是pyboard, 使用的是ST STM32F405RGT6這顆MCU。想當然, MicroPython對pyboard的支持度是最高的, 就讓我想去玩一下, 但查了一下, 官方賣價換算一張也要1000元台幣.
https://store.micropython.org/pyb-features

還要加運費, 就更貴了! 副廠的有便宜一些, 也要台幣700.
剛好手上有一張ST Nucleo F401RE的開發板, 前幾年買來玩, 至少也是官方的板子, 作工和用料有一定水準. 想想pyboard用的MCU和這個板子的MCU根本就是兄弟, 想容性應該是差不到那去吧! 那就在這個開發板上安裝MicroPython看看吧!

Hardytek這個網站針對如何燒錄MicroPython firmware到ST Nucleo-F401RE開發板, 提供很詳細的說明:
http://hardytek.com/flashing-micropython-to-stm32-nucleo/

簡單摘要一下:
1. MicroPython官方firmware下載網站, 是有提供Nucleo-F401RE開發板的firmware, 但是等一下, 為什麼檔案的副檔名是dfu? 有朋友在論壇https://forum.micropython.org/viewtopic.php?t=3709請教了這個問題, 好心的dhylands回覆說那是給pyboard用的, 因為pyboard的usb接到電腦後, 會出現一個硬碟, 只要把檔案拖進去就可以更新firmware了! 但Nucleo-F401RE不是這樣, 雖然也會出現一個硬碟, 但那是給st-link(mbed enabled)用的! 總之, 必須自己由原始碼重編出hex檔, 就可以使用st-link工具來燒錄.
2. dhylands還幫忙編了一下, 把編好的elf, hex, bin等檔案丟出來供下載. Hardyteck則說其實自己編也不難, 並示範了這個過程! 首先要找個Linux環境, 虛擬機器也可以, 我自己則用raspberry pi來嘗試.

cd ~
sudo apt-get install git
>>> Press “Y” when/if prompted
sudo apt-get install make
>>> Press “Y” when/if prompted
sudo apt-get install gcc
>>> Press “Y” when/if prompted
sudo apt-get install gcc-arm-none-eabi
>>> Press “Y” when/if prompted

    git clone https://github.com/micropython/micropython
    cd ~/micropython
    git submodule update --init
    cd ports/stm32
    make BOARD=NUCLEO_F401RE

然後成功的話, 應該會出現一個"GEN build-NUCLEOxxxx/firmware.hex"的訊息.
但是我出現的是:

CC ../../lib/utils/printf.c
MPY modules/dht.py
make: ../../mpy-cross/mpy-cross: Command not found
../../py/mkrules.mk:112: recipe for target 'build-NUCLEO_F401RE/frozen_mpy/dht.m                  py' failed
make: *** [build-NUCLEO_F401RE/frozen_mpy/dht.mpy] Error 127

顯然, 這是有問題!
看了一下訊息, 意思是找不到mpy-cross這個指令, 那要怎麼取得這個檔案呢?
不知那來的靈感, 原始碼本身就有提供這個工具, 只是還沒編譯而已! 所以:

cd ..
cd ..
cd mpy-cross/
make

意思就是在git下來的~/micropython/mpy-cross目錄下make指令.
然後再

cd ..
cd ports/stm32
make BOARD=NUCLEO_F401RE

果然, 就成功了, 出現:

LINK build-NUCLEO_F401RE/firmware.elf
   text    data     bss     dec     hex filename
 291108      28   37952  329088   50580 build-NUCLEO_F401RE/firmware.elf
GEN build-NUCLEO_F401RE/firmware.dfu
GEN build-NUCLEO_F401RE/firmware.hex

3. 接下來, 利用FileZila工具, 把firmware.hex抓到Windows電腦來
4. 再利用ST-LINK工具, 就可以把hex檔燒錄到開發板了.
5. 使用putty, 連上去看有REPL的訊息, 那就成功了

***********************************************
下次, 再來談怎麼把寫好的.py檔丟到開發板上的檔案系統(flash)
還有, GPIO的名稱是如何對應的.

另一個有用的相關連結: https://www.carminenoviello.com/2015/06/03/running-micropyton-stm32nucleo-f4/




留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel