记录下为自己的板子编译MicroPython的过程。 m b! T; U0 W" h" H3 f 1、搭建环境 下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。 下载gcc-arm-none-eabi,1 o0 \; S; g/ z. B# s4 Z! o 在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加# Z5 G) _! l8 q* `2 D# ~5 s4 @ | export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin"PATH 保存,重新打开msys2.exe使配置生效。. c. ?' i X; |1 f1 N* n& i% { 下载源码。$ git clone --recursive http://github.com/micropython/micropython.git4 }, U3 j. t/ s0 ~, \& K4 p- b8 X 完成时如下* `6 z1 L1 o" _9 k0 g 打开D:\msys32\home\Administrator (换成自己的目录) 会多出一个micropython 的文件夹,里面就是所有源码了。 9 [" W. b1 e4 ^1 o) E$ @ 2、移植 i( Y! f7 I9 q8 E 打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。 mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。% g1 ?& C" J U' q2 k, e) Z #define MICROPY_HW_BOARD_NAME "F407" I; S! y7 Y$ d #define MICROPY_HW_MCU_NAME "STM32F407" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_FLASH (1) #define MICROPY_HW_ENABLE_RNG (1)8 n6 K v u' s; ]3 D- H2 y- j #define MICROPY_HW_ENABLE_RTC (0) #define MICROPY_HW_ENABLE_DAC (1) #define MICROPY_HW_ENABLE_USB (1)- R, ~+ f' X0 Z5 M5 K #define MICROPY_HW_HAS_SDCARD (1) // HSE is 8MHz #define MICROPY_HW_CLK_PLLM (25) #define MICROPY_HW_CLK_PLLN (336) #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2) #define MICROPY_HW_CLK_PLLQ (7)8 o, R5 s, |6 f7 r q F5 z- G // UART config2 H$ }5 {4 `( Z* U // 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_TX (pin_A9)+ R* ]" c$ F5 M8 z& | #define MICROPY_HW_UART1_RX (pin_A10) #define MICROPY_HW_UART2_TX (pin_A2)" p5 ?8 s/ c- Q7 J #define MICROPY_HW_UART2_RX (pin_A3) 9 V/ ^$ d. q# ]5 f% \) K #define MICROPY_HW_UART3_TX (pin_D8)$ X0 { U! B6 i0 N3 _ #define MICROPY_HW_UART3_RX (pin_D9) M" _" L( C) t8 P 7 G0 [2 @; \8 j0 \ // NOTE: A0 also connects to the user switch. To use UART4 you should 9 `* {& }- q9 |! a3 N // set MICROPY_HW_HAS_SWITCH to 0, and also remove SB20 (on the back$ {' M1 O' [' N- R3 Z0 Y8 ?. k // of the board near the USER switch).$ g* }, {) K! ~# N$ }/ Q% u1 W' Y #define MICROPY_HW_UART4_TX (pin_A0)* Y$ l9 n! G5 w! [ #define MICROPY_HW_UART4_RX (pin_A1)* ]) V# u& D/ i2 M/ v9 G) S // 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; I9 S9 I# T7 I6 m& w) Z4 ]7 | // be fine to use as a UART pin. // I2C busses {8 P) y: I! a& Z. U" G# _' F1 r5 s #define MICROPY_HW_I2C1_SCL (pin_B6): u3 b$ D2 w& K: W+ T0 w( F #define MICROPY_HW_I2C1_SDA (pin_B7) 8 F! h7 N2 Z; \+ u+ T + q! Z* ] W" m# n7 w // SPI busses #define MICROPY_HW_SPI1_NSS (pin_A4)% U! y2 P# m* \. r2 ~5 W #define MICROPY_HW_SPI1_SCK (pin_A5); s! [1 }5 i9 a \* K #define MICROPY_HW_SPI1_MISO (pin_A6) #define MICROPY_HW_SPI1_MOSI (pin_A7)6 T6 X. B: R% D/ S #define MICROPY_HW_SPI3_NSS (pin_A15)$ p9 e# w3 o+ {8 l' e% P& F4 T #define MICROPY_HW_SPI3_SCK (pin_B3) #define MICROPY_HW_SPI3_MISO (pin_B4) \6 X9 Q0 G) W$ i #define MICROPY_HW_SPI3_MOSI (pin_B5)' z2 }9 W. r" A- G' E4 @: ` // CAN busses" n% [8 J9 i0 c. ~' g #define MICROPY_HW_CAN1_TX (pin_B9)) p( x2 ]0 G) _9 }& P: | #define MICROPY_HW_CAN1_RX (pin_B8) 4 H$ D5 T" k& z8 k // USRSW is pulled low. Pressing the button makes the input go high. #define MICROPY_HW_USRSW_PIN (pin_C0)8 Z9 x( v! l, W, [! { G6 h #define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)' l" |% \ K" E0 Y7 g: Q: @( f$ C #define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_RISING) #define MICROPY_HW_USRSW_PRESSED (1)! J2 V2 J$ v& x2 J4 }1 O) [4 N$ Y // LEDs #define MICROPY_HW_LED1 (pin_E0) // red #define MICROPY_HW_LED2 (pin_E1) // green! ~) t6 C6 z3 H #define MICROPY_HW_LED3 (pin_E2) // orange* I) p8 |1 F& r8 Q! i% ~, c" B #define MICROPY_HW_LED4 (pin_E3) // blue* z2 [& w; z/ a+ Y z5 P #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin)) #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))+ m$ O6 C+ H" r5 M# i3 t' K% k/ V // USB config #define MICROPY_HW_USB_FS (1): C& f b2 ]0 |- r0 v2 ? //*************end mpconfigboard.h 7 r0 X t- x5 n3 F4 b pins.csv 用记事本打开修改。) N+ d: Y' g) c5 l6 E( K+ P# J, X 缺少PB3 ,按格式添加。 最后的LED SW对应mpconfigboard.h 的引脚修改。 ( Y, o. s% S$ |! I4 I9 w p 接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。 E* Q- q* c6 V( _ 打开stm32文件夹下的sdcard.c, 注释掉163行 引脚初始化。: H! P6 t; b, R3 e 检测函数直接返回1。 bool sdcard_is_present(void) { return 1;8 _/ w9 Y9 I1 ^ d //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;$ t# C# u. W0 u }% _) @5 [+ X. k$ V8 ?" f6 V ( F- P5 ^$ x4 u( {* Z modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。- z' s+ u& ?& `$ I) y' W8 d* U 2 F& e" J" V R6 z2 B$ ` g, r+ @: R 3、编译 msys2 进入到ports/stm32目录,执行 make BOARD=F407: O8 P: R; r3 J* s* O 0 I4 n, r) G* j! c |
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
不应该和keil,iar相比了。是实现在单片机上用python语言编程。
python相对c来说语法更简单更易学。; k* _& ^$ T% ^/ q+ C" w4 x
我也没接触过micropython,不知道说的对不对。
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。 S6 x" _1 c4 v9 O
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。