首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

移植MicroPython到NUCLEO_L476RG开发板

移植MicroPython到NUCLEO_L476RG开发板

在最新的 MicroPython 源码中,已经加入了STM32L476DISC开发板,但是还没有NUCLEO-L476RG开发板。而我只有NUCLEO-L476RG开发板,要在NUCLEO-L476RG开发板上跑MicroPython,只有自己移植一下了。好在两个开发板使用的MCU是一样的,所以移植起来并不困难,主要就是修改一些参数配置,将LED、按键、串口等指定为开发板使用的GPIO。
  • 首先下载MicroPython源码,使用zip方式或者git方式都可以。推荐使用git方式,它更适合深入学习研究。
  • 此外还需要安装gcc-arm-none-eabi编译器,MicroPython的STM32需要使用这个编译器才能进行编译。
  • 进入源码的stmhal目录,用记事本或者其他编辑器修改makefile文件,将下面一行中编译器的路径改为实际的目录。注意一定要使用右斜杠。
CROSS_COMPILE = e:/gcc-arm/bin/arm-none-eabi-
  • 在进入stmhal/board目录,新建一个NUCLEO_L476RG目录,然后将STM32L476DISC目录下的所以文件复制过来。
  • 打开mpconfigboard.h文件,修改下面的内容:
#define MICROPY_HW_BOARD_NAME       "NUCLEO-L476RG"#define MICROPY_HW_MCU_NAME         "STM32L476"#define MICROPY_HW_HAS_SWITCH       (1)#define MICROPY_HW_HAS_FLASH        (1)#define MICROPY_HW_HAS_SDCARD       (0)#define MICROPY_HW_HAS_MMA7660      (0)#define MICROPY_HW_HAS_LIS3DSH      (0)#define MICROPY_HW_HAS_LCD          (0)#define MICROPY_HW_ENABLE_RNG       (1)#define MICROPY_HW_ENABLE_RTC       (1)#define MICROPY_HW_ENABLE_TIMER     (1)#define MICROPY_HW_ENABLE_SERVO     (0)#define MICROPY_HW_ENABLE_DAC       (0)#define MICROPY_HW_ENABLE_CAN       (0)// HSI is 4MHz#define MICROPY_HW_CLK_PLLM (1)#define MICROPY_HW_CLK_PLLN (40)#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV7)#define MICROPY_HW_CLK_PLLR (RCC_PLLR_DIV2)#define MICROPY_HW_CLK_PLLQ (RCC_PLLQ_DIV2)#define MICROPY_HW_FLASH_LATENCY    FLASH_LATENCY_4// USART config#define MICROPY_HW_UART2_PORT (GPIOA)#define MICROPY_HW_UART2_PINS (GPIO_PIN_2 | GPIO_PIN_3)// I2C busses#define MICROPY_HW_I2C1_SCL (pin_B8)#define MICROPY_HW_I2C1_SDA (pin_B9)// We use an array of baudrates and corresponding TIMINGR values.//// The value 0x90112626 was obtained from the DISCOVERY_I2C1_TIMING constant// defined in the STM32L4Cube file Drivers/BSP/STM32L476G-Discovery/stm32l476g_discovery.h#define MICROPY_HW_I2C_BAUDRATE_TIMING  {{100000, 0x90112626}}#define MICROPY_HW_I2C_BAUDRATE_DEFAULT 100000#define MICROPY_HW_I2C_BAUDRATE_MAX     100000// SPI busses#define MICROPY_HW_SPI1_NSS     (pin_A15)#define MICROPY_HW_SPI1_SCK     (pin_A5)#define MICROPY_HW_SPI1_MISO    (pin_A6)#define MICROPY_HW_SPI1_MOSI    (pin_A7)// USRSW is pulled low. Pressing the button makes the input go high.#define MICROPY_HW_USRSW_PIN        (pin_C13)#define MICROPY_HW_USRSW_PULL       (GPIO_NOPULL)#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_FALLING)#define MICROPY_HW_USRSW_PRESSED    (0)// LEDs#define MICROPY_HW_LED1             (pin_A5) // red#define MICROPY_HW_LED_OTYPE        (GPIO_MODE_OUTPUT_PP)         #define MICROPY_HW_LED_ON(pin)      (pin->gpio->BSRR = pin->pin_mask#define MICROPY_HW_LED_OFF(pin)     (pin->gpio->BSRR = pin->pin_mask<<16)// USB config// #define MICROPY_HW_USB_OTG_ID_PIN (pin_C12) // This is not the official ID Pin which should be PA10>
  • 修改后,在stmhal目录中输入命令编译源码
make BOARD=NUCLEO_L476RG
  • 编译后就得到了需要的hex文件,将文件下载到开发板就可以玩MicroPython了。
        因为STM32L476的Micropython版本还在修改中,现在还存在一些问题,目前已知问题有:
  • STLink的串口无法发送控制命令
  • 串口设置波特率时会提示超出误差范围,但实际已经设置成功。
  • DAC和ADC功能暂时不能使用
返回列表