|
本帖最后由 shaoziyang 于 2016-5-15 00:32 编辑
在最新的 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>
复制代码
make BOARD=NUCLEO_L476RG
- 编译后就得到了需要的hex文件,将文件下载到开发板就可以玩MicroPython了。
因为STM32L476的Micropython版本还在修改中,现在还存在一些问题,目前已知问题有:
- STLink的串口无法发送控制命令
- 串口设置波特率时会提示超出误差范围,但实际已经设置成功。
- DAC和ADC功能暂时不能使用
其他
- 最好使用macroUSB转接板将USBOTG引出来,因为只有这样才能使用内置的PYFLASH磁盘。具体方法见《【STM32L476 Nucleo】测试USB功能》
- 关于源码编译,我将另外开帖详细介绍。
- 为了方便那些只想体验又不想编译的网友,提供编译后hex文件,可以直接下载到开发板体验。
build-NUCLEO_L476RG.zip
(478.92 KB, 下载次数: 2, 售价: 5 IC币)
|
|