记录下为自己的板子编译MicroPython的过程。5 F5 G% h: ?; ]* t1 W , v1 g* T# E2 m 1、搭建环境 下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。 下载gcc-arm-none-eabi, 在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加 export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH9 \ L3 t5 a- v$ H+ s/ }& H7 U. p# L% r 保存,重新打开msys2.exe使配置生效。 & }! q1 j. d3 k8 e6 A- C7 p 下载源码。$ git clone --recursive http://github.com/micropython/micropython.git 完成时如下' N$ e6 _3 k; s& o' f( g ( c/ J+ _$ D( ?. R4 @: | |) s* v 打开D:\msys32\home\Administrator (换成自己的目录)1 k; [( _6 \& Z 会多出一个micropython 的文件夹,里面就是所有源码了。, L6 [# }) d" K# E 2、移植( S8 A7 w) L3 l% b& Z 打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。 mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。 #define MICROPY_HW_BOARD_NAME "F407"/ ?8 C9 G1 p1 b% Q; g& r6 w #define MICROPY_HW_MCU_NAME "STM32F407" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_FLASH (1)% X( g. m5 V ^! U #define MICROPY_HW_ENABLE_RNG (1): l8 M$ [* Y, o; k- Q2 M #define MICROPY_HW_ENABLE_RTC (0) #define MICROPY_HW_ENABLE_DAC (1) #define MICROPY_HW_ENABLE_USB (1), v- B K* h# r' Q( T$ x, T #define MICROPY_HW_HAS_SDCARD (1) + w0 n# H7 u& N) @* A6 q" P // HSE is 8MHz #define MICROPY_HW_CLK_PLLM (25)& F8 l4 _; c' |& x #define MICROPY_HW_CLK_PLLN (336)! I! M# r7 ~& X7 X; \; D #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2) h( T# c: e9 h) C3 a& l' I6 p #define MICROPY_HW_CLK_PLLQ (7)& X; `& ?( Z9 D5 { // UART config2 _5 d3 t# Y1 g6 Y4 g! v, Z // 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.+ B5 Q3 \0 @2 h' o$ Y- X* j // Without board modifications, this makes UART1 unusable on this board. #define MICROPY_HW_UART1_TX (pin_A9) #define MICROPY_HW_UART1_RX (pin_A10)( S+ h' I8 p& H& e( L, u #define MICROPY_HW_UART2_TX (pin_A2) #define MICROPY_HW_UART2_RX (pin_A3)" m4 Z4 s4 f4 e H& i8 h ' i8 v/ j3 P4 K #define MICROPY_HW_UART3_TX (pin_D8) #define MICROPY_HW_UART3_RX (pin_D9) . E6 d" E$ S9 |: K3 p // 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_TX (pin_A0)- ^5 I1 @& K# J0 t #define MICROPY_HW_UART4_RX (pin_A1) 0 b% b D# G; t) y: h# V0 G- d7 @ // 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 should9 P7 K( Q. i; }: j# C. {6 f // be fine to use as a UART pin.& f4 H3 R, H0 @0 t" v ! |- n) U( q1 M- t0 r5 _ ! Q4 n; i- ~3 S8 F4 K& v6 } // I2C busses #define MICROPY_HW_I2C1_SCL (pin_B6)# i0 y$ v: m# m2 q3 K! [* X4 | #define MICROPY_HW_I2C1_SDA (pin_B7)4 T t4 D6 Q4 `. N8 _$ N8 Y // SPI busses #define MICROPY_HW_SPI1_NSS (pin_A4)9 i* o& y. m: {* m. T0 P8 j+ @2 u #define MICROPY_HW_SPI1_SCK (pin_A5) #define MICROPY_HW_SPI1_MISO (pin_A6)' n5 g2 ?& z1 |1 x: a# e #define MICROPY_HW_SPI1_MOSI (pin_A7) #define MICROPY_HW_SPI3_NSS (pin_A15)+ ?- i& D% }! y; E, H) V" l. K$ e #define MICROPY_HW_SPI3_SCK (pin_B3) #define MICROPY_HW_SPI3_MISO (pin_B4)# ~/ D$ o" q$ ~' N6 I5 \4 x #define MICROPY_HW_SPI3_MOSI (pin_B5)- h* ?7 |4 @( R+ }6 M6 Y0 { // CAN busses #define MICROPY_HW_CAN1_TX (pin_B9)6 ^. D+ ^; V) S4 Z #define MICROPY_HW_CAN1_RX (pin_B8)! i" O" J. L2 E& u% t" }- F% U : h i+ s* b- A3 V% K, b // USRSW is pulled low. Pressing the button makes the input go high. #define MICROPY_HW_USRSW_PIN (pin_C0) #define MICROPY_HW_USRSW_PULL (GPIO_NOPULL); Y6 h9 y6 ]4 Q/ `9 C2 s; s* z #define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_RISING) #define MICROPY_HW_USRSW_PRESSED (1) ; Z% N& e0 V- j; T // LEDs #define MICROPY_HW_LED1 (pin_E0) // red# ^) Q' @% J( l4 I8 @/ [ #define MICROPY_HW_LED2 (pin_E1) // green2 A, X/ r w6 S$ Z #define MICROPY_HW_LED3 (pin_E2) // orange #define MICROPY_HW_LED4 (pin_E3) // blue5 e+ \, \8 d+ d/ E #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin)) #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))$ `" S" o2 e8 C1 U- f! {- Q // USB config( z# `: M: p X #define MICROPY_HW_USB_FS (1): m' r7 d+ s3 O. N- ]$ t) N8 S //*************end mpconfigboard.h; `9 I, Q- U2 {( h) Z) y pins.csv 用记事本打开修改。& F- X3 T1 C- o! F! A9 Z9 T 缺少PB3 ,按格式添加。 最后的LED SW对应mpconfigboard.h 的引脚修改。% G5 s A2 S4 B8 ?, T }/ T7 O1 q3 ^. ?% Z! o, I 接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。 打开stm32文件夹下的sdcard.c,) m/ w8 q# O2 i) E, H W 注释掉163行 引脚初始化。 检测函数直接返回1。 6 t2 n; n" o# S+ G' J bool sdcard_is_present(void) {& z r: W$ v0 |+ Q return 1; //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT; } h( i% a: I) O# d% n0 v , k1 p- F; X( q* _ modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。 3、编译 msys2 进入到ports/stm32目录,执行 make BOARD=F407 * r+ n2 Y. N% D0 ^* Q ( H* C5 \+ F7 O# \, ?* w |
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用; c5 E- L) x: I) S! o9 @' F/ j
不应该和keil,iar相比了。是实现在单片机上用python语言编程。
python相对c来说语法更简单更易学。
我也没接触过micropython,不知道说的对不对。
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。
" Z1 I4 M/ q" d) T/ Z0 H
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。1 J7 r) J- y6 \6 v/ r' A. A
相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。" M5 h2 H+ c9 e
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。