MicroPython移植

MicroPython移植

1.目標板

stm32f407zgt6
在這裏插入圖片描述

2.下載移植準備

micropython源碼
arm交叉編譯工具

sudo apt-get install git
sudo apt-get install gcc-arm-none-eabi
mkdir MicroPython
cd MicroPython
git clone https://github.com/micropython/micropython
cd micropython/mpy-cross
make
cd ../ports/stm32/boards
cp -r STM32F4DISC/ myboard
gedit myboard/mpconfigboard.h  					#修改#define MICROPY_HW_BOARD_NAME       "myboard"
cd ..
gedit Makefile	#修改BOARD ?= myboard
make											#自動下載需要的庫
編譯成功:
LINK build-myboard/firmware.elf
text	   data	    bss	    dec	    hex	filename
325776	     32	  27556	 353364	  56454	build-myboard/firmware.elf
GEN build-myboard/firmware.dfu
GEN build-myboard/firmware.hex

使用jflash燒寫build-myboard/firmware.hex到目標板

3.目標板的基本硬件配置

gedit boards/myboard/pins.csv
# 內容改成如下
PC10,PC10
PA15,PA15
PA14,PA14
PA13,PA13
PA12,PA12
PA11,PA11
PA10,PA10
PA9,PA9
PA8,PA8
PC9,PC9
PC8,PC8
PC7,PC7
PC6,PC6
PG8,PG8
PG7,PG7
PG6,PG6
PG5,PG5
PG4,PG4
PF6,PF6
PF8,PF8
PF7,PF7
PF10,PF10
PF9,PF9
PH1,PH1
PH0,PH0
PC1,PC1
PC0,PC0
PC3,PC3
PC2,PC2
PA1,PA1
PA0,PA0
PA3,PA3
PA2,PA2
PA5,PA5
PA4,PA4
PA7,PA7
PA6,PA6
PC5,PC5
PC4,PC4
PB1,PB1
PB0,PB0
PB2,PB2
PF12,PF12
PF11,PF11
PF14,PF14
PF13,PF13
PG0,PG0
PF15,PF15
PE7,PE7
PG1,PG1
PE9,PE9
PE8,PE8
PE11,PE11
PE10,PE10
PE13,PE13
PE12,PE12
PE15,PE15
PE14,PE14
PB11,PB11
PB10,PB10
PB13,PB13
PB12,PB12
PB15,PB15
PB14,PB14
PD9,PD9
PD8,PD8
PD11,PD11
PD10,PD10
PD13,PD13
PD12,PD12
PD15,PD15
PD14,PD14
PG3,PG3
PG2,PG2
LED_GREEN,PF9 
LED_RED,PF10
SW,PA0
USB_DM,PA11
USB_DP,PA12
gedit boards/myboard/mpconfigboardconfig.h
# 內容改成如下:

#define MICROPY_HW_BOARD_NAME       "myboard"
#define MICROPY_HW_MCU_NAME         "STM32F407"

//#define MICROPY_PY_STM              (1)
//#define MICROPY_PY_PYB_LEGACY       (1)
#define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (1)
#define MICROPY_HW_ENABLE_RTC       (1)
#define MICROPY_HW_ENABLE_RNG       (1)
#define MICROPY_HW_ENABLE_ADC       (1)
#define MICROPY_HW_ENABLE_DAC       (1)
#define MICROPY_HW_ENABLE_DCMI      (0)
#define MICROPY_HW_ENABLE_USB       (1)
#define MICROPY_HW_ENABLE_SERVO     (0)
#define MICROPY_HW_HAS_SWITCH       (1)
#define MICROPY_HW_HAS_FLASH        (1)
#define MICROPY_HW_HAS_LCD          (0)
#define MICROPY_HW_FLASH_FS_LABEL   "pyb_f4_internal_flash"

#define MICROPY_HW_ENABLE_SDCARD    (1)
#define MICROPY_HW_SDMMC_BUS_WIDTH  (4)

//#define MICROPY_HW_HAS_LCD          (1)

// HSE is 8MHz
#define MICROPY_HW_CLK_PLLM (8)
#define MICROPY_HW_CLK_PLLN (336)
#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
#define MICROPY_HW_CLK_PLLQ (7)

// UART config
#if 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_NAME 	"UART1"
#define MICROPY_HW_UART1_TX     (pin_A9)
#define MICROPY_HW_UART1_RX     (pin_A10)
#endif
#define MICROPY_HW_UART2_NAME 	"UART2"
#define MICROPY_HW_UART2_TX     (pin_A2)
#define MICROPY_HW_UART2_RX     (pin_A3)
#define MICROPY_HW_UART2_RTS    (pin_A1)
#define MICROPY_HW_UART2_CTS    (pin_A0)
#define MICROPY_HW_UART3_NAME 	"UART3"
#define MICROPY_HW_UART3_TX     (pin_D8)
#define MICROPY_HW_UART3_RX     (pin_D9)
#define MICROPY_HW_UART3_RTS    (pin_D12)
#define MICROPY_HW_UART3_CTS    (pin_D11)

// NOTE: A0 also connects to the user switch. To use UART4 you should 
//       set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back
//       of the board near the USER switch).
#define MICROPY_HW_UART4_NAME 	"UART4"
#define MICROPY_HW_UART4_TX     (pin_C10)
#define MICROPY_HW_UART4_RX     (pin_A1)


#if 0
#define MICROPY_HW_UART5_NAME 	"UART5"
#define MICROPY_HW_UART5_TX     (pin_C12)
#define MICROPY_HW_UART5_RX     (pin_D2)
#endif
// NOTE: PC7 is connected to MCLK on the Audio chip. This is an input signal
//       so I think as long as you're not using the audio chip then it should
//       be fine to use as a UART pin.
#define MICROPY_HW_UART6_NAME 	"UART6"
#define MICROPY_HW_UART6_TX     (pin_G14)
#define MICROPY_HW_UART6_RX     (pin_G9)

// I2C busses
#define MICROPY_HW_I2C1_NAME "I2C1"
#define MICROPY_HW_I2C1_SCL (pin_B6)
#define MICROPY_HW_I2C1_SDA (pin_B7)
#if 1
#define MICROPY_HW_I2C2_NAME "I2C2"
#define MICROPY_HW_I2C2_SCL (pin_B10)
#define MICROPY_HW_I2C2_SDA (pin_B11)
#endif
// SPI busses
#define MICROPY_HW_SPI1_NAME "SPI1"
#define MICROPY_HW_SPI1_NSS  (pin_A4)
#define MICROPY_HW_SPI1_SCK  (pin_A5)
#define MICROPY_HW_SPI1_MISO (pin_A6)
#define MICROPY_HW_SPI1_MOSI (pin_A7)
#define MICROPY_HW_SPI2_NAME "SPI2"
#define MICROPY_HW_SPI2_NSS  (pin_B12)
#define MICROPY_HW_SPI2_SCK  (pin_B13)
#define MICROPY_HW_SPI2_MISO (pin_C2)
#define MICROPY_HW_SPI2_MOSI (pin_C3)
#define MICROPY_HW_SPI3_NAME "SPI3"
#define MICROPY_HW_SPI3_NSS  (pin_A15)
#define MICROPY_HW_SPI3_SCK  (pin_B3)
#define MICROPY_HW_SPI3_MISO (pin_B4)
#define MICROPY_HW_SPI3_MOSI (pin_B5)
// CAN busses
#define MICROPY_HW_CAN1_TX (pin_B9)
#define MICROPY_HW_CAN1_RX (pin_B8)
#if 0
#define MICROPY_HW_CAN2_TX (pin_B6)
#define MICROPY_HW_CAN2_RX (pin_B12)
#endif
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN        (pin_A0)
#define MICROPY_HW_USRSW_PULL       (GPIO_PULLDOWN)
#define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_RISING)
#define MICROPY_HW_USRSW_PRESSED    (1)

// LEDs
#define MICROPY_HW_LED1             (pin_F10) // red
#define MICROPY_HW_LED2             (pin_F9) // green 
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_low(pin))
#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_high(pin))

// USB config
#define MICROPY_HW_USB_FS              (1)
//#define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9)
//#define MICROPY_HW_USB_OTG_ID_PIN      (pin_A10)

#if 0
// SDCard
#define MICROPY_HW_SDMMC_D0 (pin_C8)
#define MICROPY_HW_SDMMC_D1 (pin_C9)
#define MICROPY_HW_SDMMC_D2 (pin_C10)
#define MICROPY_HW_SDMMC_D3 (pin_C11)
#define MICROPY_HW_SDMMC_CK (pin_C12)
#define MICROPY_HW_SDMMC_CMD (pin_D2)

// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN        (pin_A8)
#define MICROPY_HW_SDCARD_DETECT_PULL       (GPIO_PULLUP)
#define MICROPY_HW_SDCARD_DETECT_PRESENT    (GPIO_PIN_RESET)
#endif

重新編譯生成hex

4.extmod裁剪

裁剪re,json,zlib等模塊可以通過修改mpconfigport.h文件中相關宏實現

5.後續

後續準備移植LCD

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