在STM32F401RE(小鋼炮CANNON開發板)移植MicroPython

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

小鋼炮開發板STM32F401RE的MCU支持MicroPython,手頭恰好有一塊。因爲在衆多支持MicroPython的STM32芯片中數他性價比高點,作爲實驗的小白鼠就先拿他做測試了。下面介紹移植MicroPython的方法。

準備工具:樹莓派3B+,小鋼炮開發板,Windos下安裝ST的DfuSe軟件(不再說明方法),MicroPython的源碼,USB線一根。

  1. 首先在樹莓派下載並安裝gcc編譯器。

    sudo apt-get install gcc
    sudo apt-get install gcc-arm-none-eabi
  2. 下載MicroPython源碼(https://github.com/micropython/micropython)解壓到/home/pi/micropython-master。

  3. 下載stm32的hal庫文件(https://github.com/micropython/stm32lib/tree/668d7a9e54aea98f8fe8a858eac1d3daa80fa824),複製解壓後的庫文件到/home/pi/micropython-master/lib/stm32lib。

  4. 打開/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/

  5. 進入/home/pi/micropython-master/mpy-cross文件夾,執行編譯make.

    cd /home/pi/micropython-master/mpy-cross
    make
    

     

  6. 進入/home/pi/micropython-master/ports/stm32文件夾,執行編譯sudo make BOARD=CANNON。

    cd /home/pi/micropython-master/ports/stm32
    sudo make BOARD=CANNON

  7. 經過上面的操作基本編譯通過產生dfu和hex文件,驗證了源碼文件健全無誤。接下來修改小鋼炮的板子參數一些配置(小鋼炮和官方401開發板的配置是不一樣的,這修改部分也可以在上面第4步之後進行,不過建議驗證源碼編譯無誤後在進行修改)。

  8. 修改stm32/boards/CANNON目錄下stm32f4xx_hal_conf.h文件

    小鋼炮使用的是16M的外部晶振,

    修改#define HSE_VALUE (8000000)爲#define HSE_VALUE (16000000)

  9. 修改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)

     

  10. 修改stm32/boards/CANNON目錄下pins.csv文件(文本編輯器下修改的)修改GPIO的預定義名。

    修改
    
    LED_GREEN,PA5
    
    LED_ORANGE,PA5
    
    LED_RED,PA5
    
    爲
    
    LED_GREEN,PB3
    
    LED_ORANGE,PB3 
    
    LED_RED,PB3

     

  11. 修改/home/pi/micropython-master/ports/stm32目錄下sdcard.c文件

    小鋼炮的SD卡狀態檢測沒有連接到stm32引腳上,屏蔽SD卡檢測。
    
    修改bool sdcard_is_present(void) 函數爲
    
    bool sdcard_is_present(void) {
        return 1;
    }
  12. 適配小鋼炮板參數修改完畢,再次進入/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)

有圖有真相 

PYBFLASH盤

PYBfile

PYBLED

 

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