小鋼炮開發板STM32F401RE的MCU支持MicroPython,手頭恰好有一塊。因爲在衆多支持MicroPython的STM32芯片中數他性價比高點,作爲實驗的小白鼠就先拿他做測試了。下面介紹移植MicroPython的方法。
準備工具:樹莓派3B+,小鋼炮開發板,Windos下安裝ST的DfuSe軟件(不再說明方法),MicroPython的源碼,USB線一根。
-
首先在樹莓派下載並安裝gcc編譯器。
sudo apt-get install gcc sudo apt-get install gcc-arm-none-eabi
-
下載MicroPython源碼(https://github.com/micropython/micropython)解壓到/home/pi/micropython-master。
-
下載stm32的hal庫文件(https://github.com/micropython/stm32lib/tree/668d7a9e54aea98f8fe8a858eac1d3daa80fa824),複製解壓後的庫文件到/home/pi/micropython-master/lib/stm32lib。
-
打開/home/pi/micropython-master/ports/stm32/boards文件夾,新建CANNON文件夾,複製NUCLEO_F401RE下全部文件到CANNON。
cd /home/pi/micropython-master/ports/stm32/boards sudo mkdir CANNON sudo cp NUCLEO_F401RE/* CANNON/
-
進入/home/pi/micropython-master/mpy-cross文件夾,執行編譯make.
cd /home/pi/micropython-master/mpy-cross make
-
進入/home/pi/micropython-master/ports/stm32文件夾,執行編譯sudo make BOARD=CANNON。
cd /home/pi/micropython-master/ports/stm32 sudo make BOARD=CANNON
-
經過上面的操作基本編譯通過產生dfu和hex文件,驗證了源碼文件健全無誤。接下來修改小鋼炮的板子參數一些配置(小鋼炮和官方401開發板的配置是不一樣的,這修改部分也可以在上面第4步之後進行,不過建議驗證源碼編譯無誤後在進行修改)。
-
修改stm32/boards/CANNON目錄下stm32f4xx_hal_conf.h文件
小鋼炮使用的是16M的外部晶振,
修改#define HSE_VALUE (8000000)爲#define HSE_VALUE (16000000)
-
修改stm32/boards/CANNON目錄下mpconfigboard.h文件
1.小鋼炮沒有用戶按鍵, 修改#define MICROPY_HW_HAS_SWITCH (1)爲#define MICROPY_HW_HAS_SWITCH (0) 2.對應晶體宏定義, 修改 #define MICROPY_HW_CLK_USE_HSI (1) #if MICROPY_HW_CLK_USE_HSI #define MICROPY_HW_CLK_PLLM (16) #else #define MICROPY_HW_CLK_PLLM (8) #endif 爲 #define MICROPY_HW_CLK_PLLM (16) 3.SPI1片選腳, 修改#define MICROPY_HW_SPI1_NSS (pin_A15)爲#define MICROPY_HW_SPI1_NSS (pin_A4) 4.小鋼炮只有一個用戶LED(PB3)並且驅動電平與官方相反, 修改 #define MICROPY_HW_LED1 (pin_A5) #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin)) #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin)) 爲 #define MICROPY_HW_LED1 (pin_B3) #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin)) #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin)) 5.添加如下宏定義: // The pyboard has a 32kHz crystal for the RTC #define MICROPY_HW_RTC_USE_LSE (1) #define MICROPY_HW_RTC_USE_US (0) #define MICROPY_HW_RTC_USE_CALOUT (1) //A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID. // UART1 is also on PB6/7 but PB6 is tied to the Audio SCL line. // Without board modifications, this makes UART1 unusable on this board. #define MICROPY_HW_UART1_TX (pin_A9) #define MICROPY_HW_UART1_RX (pin_A10) // USB config #define MICROPY_HW_ENABLE_USB (1) #define MICROPY_HW_USB_FS (1)
-
修改stm32/boards/CANNON目錄下pins.csv文件(文本編輯器下修改的)修改GPIO的預定義名。
修改 LED_GREEN,PA5 LED_ORANGE,PA5 LED_RED,PA5 爲 LED_GREEN,PB3 LED_ORANGE,PB3 LED_RED,PB3
-
修改/home/pi/micropython-master/ports/stm32目錄下sdcard.c文件
小鋼炮的SD卡狀態檢測沒有連接到stm32引腳上,屏蔽SD卡檢測。 修改bool sdcard_is_present(void) 函數爲 bool sdcard_is_present(void) { return 1; }
- 適配小鋼炮板參數修改完畢,再次進入/home/pi/micropython-master/ports/stm32文件夾,執行編譯sudo make BOARD=CANNON。
cd /home/pi/micropython-master/ports/stm32 sudo make BOARD=CANNON
最後,複製出/home/pi/micropython-master/ports/stm32/build-CANNON目錄下的firmware.dfu文件在Windows下使用DfuSe軟件燒錄即可(DfuSe軟件的下載安裝及使用不在詳述)。
小試牛刀:插上下載好固件的小鋼炮開發板,打開電腦上多出來的PYBFLASH盤,打開main.py編寫一個閃燈程序(輸出hello world就算了)。
from pyb import Pin
import time
led=Pin('B3')
while True:
print(1)
led.off()
time.sleep(1)
led.on()
time.sleep(1)
有圖有真相