在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盘

在STM32F401RE(小钢炮CANNON开发板)移植MicroPython_第1张图片

在STM32F401RE(小钢炮CANNON开发板)移植MicroPython_第2张图片

 

你可能感兴趣的:(在STM32F401RE(小钢炮CANNON开发板)移植MicroPython)