记录下为自己的板子编译MicroPython的过程。9 r5 S$ J8 p: N 1、搭建环境 下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。- x5 P1 G: _6 N# [ 下载gcc-arm-none-eabi,: r/ e; }; l; y3 H* e! S& f% [- P# X 在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加 export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH6 G& [4 s. U! d1 X g; M 保存,重新打开msys2.exe使配置生效。 3 \6 z. ^7 J& w: d! g 下载源码。$ git clone --recursive http://github.com/micropython/micropython.git 完成时如下1 c$ @( e1 U7 K * m8 I& x# _3 E5 ` 打开D:\msys32\home\Administrator (换成自己的目录)" H2 W2 @' w- ] 会多出一个micropython 的文件夹,里面就是所有源码了。 2、移植 打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。& b6 e7 I. l; F9 }( K( i/ ] / N. {0 A2 \: K8 D |3 H% N' | mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。4 L. O4 J4 o5 x' X6 s$ O #define MICROPY_HW_BOARD_NAME "F407"4 m) U: f O& L- ^6 @ P #define MICROPY_HW_MCU_NAME "STM32F407"5 Q$ v2 q, q [ b3 K( G7 E0 W, M% t #define MICROPY_HW_HAS_SWITCH (1)) _6 N0 @. P9 b7 E #define MICROPY_HW_HAS_FLASH (1) #define MICROPY_HW_ENABLE_RNG (1)$ ?" Y9 S. V& d. E# u1 ^ #define MICROPY_HW_ENABLE_RTC (0) #define MICROPY_HW_ENABLE_DAC (1) #define MICROPY_HW_ENABLE_USB (1) #define MICROPY_HW_HAS_SDCARD (1) f+ C6 s G& G F/ v8 W& | ( N8 c) \' t7 O, X; {. _ // HSE is 8MHz# R( W. b$ j' }+ ^! Z8 W0 b2 u #define MICROPY_HW_CLK_PLLM (25)1 F, f. U5 Q# X4 p$ b #define MICROPY_HW_CLK_PLLN (336) #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2) #define MICROPY_HW_CLK_PLLQ (7)2 T6 V3 T$ n# h // UART config & P0 G$ x4 [7 a1 s // A9 is used for USB VBUS detect, and A10 is used for USB_FS_ID.5 a% u) M, [. }. P // 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.4 I# j2 T% i+ y ~ #define MICROPY_HW_UART1_TX (pin_A9)/ `) c5 g2 s3 u5 L #define MICROPY_HW_UART1_RX (pin_A10)* ]! [6 S3 ?1 r' d* J+ L- \ ! o% i. A# {, F8 b- X #define MICROPY_HW_UART2_TX (pin_A2) #define MICROPY_HW_UART2_RX (pin_A3) #define MICROPY_HW_UART3_TX (pin_D8) #define MICROPY_HW_UART3_RX (pin_D9) 7 O7 N& i! d% {2 z) E: ~' j% [8 u $ P9 H) Z+ ?% C7 z3 W, ?9 ` // NOTE: A0 also connects to the user switch. To use UART4 you should & J- Y: O4 w' Q* ^ // set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back- Z `! Q+ ?$ S# j // of the board near the USER switch). #define MICROPY_HW_UART4_TX (pin_A0)* K, _+ C; m$ P/ V3 Q4 Q. X n #define MICROPY_HW_UART4_RX (pin_A1) . i# t4 b, i# I- U // 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.2 E$ q3 Q4 m+ z$ S5 ]0 b * v( K. e$ U$ \0 U // I2C busses) ^5 L, W* ]0 [3 ^ J7 Z) A #define MICROPY_HW_I2C1_SCL (pin_B6) #define MICROPY_HW_I2C1_SDA (pin_B7)/ q/ t ?: f9 t6 I2 V - O, \, e9 j! E4 t/ u* M % U0 W7 y: E" J4 Y6 o+ \0 K" ~3 p // SPI busses" V$ h9 P) L" }/ D" N# P #define MICROPY_HW_SPI1_NSS (pin_A4) #define MICROPY_HW_SPI1_SCK (pin_A5): i, |$ ]% U$ u1 P #define MICROPY_HW_SPI1_MISO (pin_A6) #define MICROPY_HW_SPI1_MOSI (pin_A7)* ]6 X7 H3 W* Z3 j J #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) 0 g- N( c \3 Z // CAN busses #define MICROPY_HW_CAN1_TX (pin_B9) #define MICROPY_HW_CAN1_RX (pin_B8)# T( ?0 i$ H$ }: z - {5 z; S+ Z3 M! N k0 x/ u // USRSW is pulled low. Pressing the button makes the input go high. #define MICROPY_HW_USRSW_PIN (pin_C0)! g, ~6 j$ h& x2 F: s3 \! o #define MICROPY_HW_USRSW_PULL (GPIO_NOPULL) #define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_RISING) #define MICROPY_HW_USRSW_PRESSED (1) // LEDs5 f: N# j0 a3 w# V. s( m: B+ C #define MICROPY_HW_LED1 (pin_E0) // red #define MICROPY_HW_LED2 (pin_E1) // green% _2 a5 Q( b, V #define MICROPY_HW_LED3 (pin_E2) // orange: H j( Q" H4 F+ t& M2 h- {2 p4 A #define MICROPY_HW_LED4 (pin_E3) // blue, A7 W4 {, q' Z #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))5 e* N$ |/ J% T% {- C #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))- S! j& a0 }: D // USB config #define MICROPY_HW_USB_FS (1)3 b8 x! h- ^( ? //*************end mpconfigboard.h; M4 U0 W2 Y: Z( E) p* Z - E% _& h( o! x6 G pins.csv 用记事本打开修改。* x% [+ q/ b5 t e P. ]- k u 缺少PB3 ,按格式添加。$ }' A% [+ ~7 g: i5 _! j 最后的LED SW对应mpconfigboard.h 的引脚修改。- h5 D4 E' S+ ]3 T5 n 2 o/ R+ k6 o& V( W% H5 w 接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。 打开stm32文件夹下的sdcard.c,# I% ^2 r: u. d( C- Y! } 注释掉163行 引脚初始化。 检测函数直接返回1。 bool sdcard_is_present(void) {$ K+ v: ?( @5 m$ u! R& ^ return 1; //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;" _5 P+ F: I& n% m& S# h. f; L; T/ a }5 E5 j; r& {9 s- X / b2 W% b2 k, K% x, d8 p 2 l ], w# v, P3 p, N* ^ modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。) b1 |' K2 V& j* B. P 3、编译 msys2 进入到ports/stm32目录,执行 make BOARD=F407 . _1 ^2 ^5 C! ] |
4 `2 `7 C6 f; x8 d! L& F" z9 M
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
5 Z5 W, [5 V' ~/ t- ?$ E4 d8 }* A6 L
不应该和keil,iar相比了。是实现在单片机上用python语言编程。
python相对c来说语法更简单更易学。
我也没接触过micropython,不知道说的对不对。
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。! g, }6 C: \, I0 P" M% t
8 Y7 y; O8 E, E3 j
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。9 M' n2 x+ t: x# b6 \3 w# x
目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。