记录下为自己的板子编译MicroPython的过程。/ E: Z* ^: H) U7 U3 q - u) ?7 T4 `" Z! d( G4 e 1、搭建环境% U# A- v a0 B1 ^8 y 下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。2 o8 E- Q6 M! t. T. C Y 下载gcc-arm-none-eabi,' Y* ~; B g a' T, l2 _; u 在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加/ F# d1 I" k4 R0 M* ^2 W export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH 保存,重新打开msys2.exe使配置生效。7 ` y9 `; K+ c* h7 h; K& B. E& K 下载源码。$ git clone --recursive http://github.com/micropython/micropython.git 完成时如下 0 l2 g& X0 O3 R0 w8 T 6 l# V* r3 k4 E) |) b 打开D:\msys32\home\Administrator (换成自己的目录)$ o( N- |' ?1 O 会多出一个micropython 的文件夹,里面就是所有源码了。' P7 R3 X e; [4 W3 [( E. E* ` 2、移植 打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。( s5 G; G8 ~2 t; i+ M 7 n% |- P: U1 L: a0 ?& R mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。3 ?: E$ _% o" I+ ~# ?* l7 H #define MICROPY_HW_BOARD_NAME "F407" #define MICROPY_HW_MCU_NAME "STM32F407" #define MICROPY_HW_HAS_SWITCH (1)5 c- T/ F. i7 N" l' L/ K #define MICROPY_HW_HAS_FLASH (1) #define MICROPY_HW_ENABLE_RNG (1)- {( p! W% |, m- L3 j! c' v #define MICROPY_HW_ENABLE_RTC (0) #define MICROPY_HW_ENABLE_DAC (1)# w; q( i5 V' F: `" K* K #define MICROPY_HW_ENABLE_USB (1)* W2 D3 S9 W \: \2 U% a* V #define MICROPY_HW_HAS_SDCARD (1) 3 q6 F" e" D+ i // HSE is 8MHz #define MICROPY_HW_CLK_PLLM (25)( S D G' }" J0 E #define MICROPY_HW_CLK_PLLN (336)% x. R0 }6 S. v* P) N$ ] #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2) #define MICROPY_HW_CLK_PLLQ (7) ! y( u7 F& Z- e$ z // UART config2 J- \, H8 N+ U) n% h) P T // 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.7 n4 P& K. d! V# e" c t // Without board modifications, this makes UART1 unusable on this board.$ [/ G. ?" s5 _" q3 x7 [ #define MICROPY_HW_UART1_TX (pin_A9) #define MICROPY_HW_UART1_RX (pin_A10)1 _+ V1 n' r n #define MICROPY_HW_UART2_TX (pin_A2) #define MICROPY_HW_UART2_RX (pin_A3) " s5 I9 F l; d) a #define MICROPY_HW_UART3_TX (pin_D8)# O4 E' K; _ G/ X6 [8 y #define MICROPY_HW_UART3_RX (pin_D9)8 L! L9 |6 f i! H 2 s/ X( V$ |6 _. B # b% l5 }6 q% U# s7 m5 ~ // 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 back0 q! t. H0 |5 R9 L$ U3 \ // of the board near the USER switch).1 W, O' x- R$ N/ s6 p2 M #define MICROPY_HW_UART4_TX (pin_A0)9 D# B1 ?+ f1 h% ^+ v! v& a. f #define MICROPY_HW_UART4_RX (pin_A1) 9 t: B2 Q& p9 A' D+ | // 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. 3 v, S8 p3 G' U, A2 \$ R8 g1 Q $ _! d2 q- q4 s // I2C busses2 D, z5 L( F6 V5 ^ #define MICROPY_HW_I2C1_SCL (pin_B6)' Y, {* q% R7 ?& q) O' w( _6 H/ | #define MICROPY_HW_I2C1_SDA (pin_B7), Z" d, i6 B$ U, C% A4 f. ?1 g + @( N9 t/ _. o // SPI busses #define MICROPY_HW_SPI1_NSS (pin_A4) #define MICROPY_HW_SPI1_SCK (pin_A5)2 ~- s6 }; h9 q$ I( W. _4 N #define MICROPY_HW_SPI1_MISO (pin_A6) #define MICROPY_HW_SPI1_MOSI (pin_A7) #define MICROPY_HW_SPI3_NSS (pin_A15) #define MICROPY_HW_SPI3_SCK (pin_B3) m( c3 F1 @# v- @4 T. u #define MICROPY_HW_SPI3_MISO (pin_B4) #define MICROPY_HW_SPI3_MOSI (pin_B5)- K# D: X7 W( B ! Q* G# P* ]/ T" ~ // CAN busses5 V P( f. s7 Q; V1 { #define MICROPY_HW_CAN1_TX (pin_B9) #define MICROPY_HW_CAN1_RX (pin_B8) // USRSW is pulled low. Pressing the button makes the input go high. #define MICROPY_HW_USRSW_PIN (pin_C0)" N0 L( Q; m3 O) p #define MICROPY_HW_USRSW_PULL (GPIO_NOPULL) #define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_RISING)% @, v6 [! y- j, W #define MICROPY_HW_USRSW_PRESSED (1) // LEDs$ ] D; |: ~/ |& z, A! L6 ~- ]# z #define MICROPY_HW_LED1 (pin_E0) // red9 W! L" Y6 h! E1 r #define MICROPY_HW_LED2 (pin_E1) // green #define MICROPY_HW_LED3 (pin_E2) // orange #define MICROPY_HW_LED4 (pin_E3) // blue #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin)) #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin)) 7 T1 k; k, C3 l: Z' _: a$ F4 x // USB config& B3 ]$ ~5 ^! a5 h/ m7 c/ ?2 N- t #define MICROPY_HW_USB_FS (1) //*************end mpconfigboard.h# b- |7 Y7 f& |# @9 U; R/ y pins.csv 用记事本打开修改。" J% |; P( j) L& I- l 缺少PB3 ,按格式添加。 最后的LED SW对应mpconfigboard.h 的引脚修改。 接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。 打开stm32文件夹下的sdcard.c,7 f% O# I9 A& ?0 T$ b9 U4 Q- l 注释掉163行 引脚初始化。& v' @; {: u* j 检测函数直接返回1。 2 F9 }4 L6 k! g9 Q! X9 u9 Q bool sdcard_is_present(void) {* v' N( L" J% [4 {. `, H return 1; //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;9 B- m. O8 @# h8 p A1 o" P }" C; T7 `# @1 E3 M; U0 E { modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。 ! V- D6 h" `4 ]5 j$ ?' ^ 3、编译" F, i6 s) O9 [1 C" z ^$ [( x msys2 进入到ports/stm32目录,执行 make BOARD=F407. w# \- @; t$ \- w4 {! i$ { |
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
4 D7 e/ E. S4 P4 A! s) t7 X7 q8 \
不应该和keil,iar相比了。是实现在单片机上用python语言编程。
python相对c来说语法更简单更易学。
我也没接触过micropython,不知道说的对不对。
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。
& P4 Q- M# N4 @' i
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
8 U! C3 j1 h8 v5 ~/ x7 z
相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。