![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
记录下为自己的板子编译MicroPython的过程。 8 g( ?2 l! ^5 [% f 1、搭建环境8 Y$ {; M) P0 x% N. ^9 Z% S6 K* _ 下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。 下载gcc-arm-none-eabi, 在home\Administrator 下建立新目录tools,解压gcc到tools下。用记事本打开.bashrc文件,最后一行添加6 _9 U, d/ O) ?) N8 { export PATH="D:\msys32\home\Administrator\tools\gcc-arm-none-eabi-7\bin" ![]() 保存,重新打开msys2.exe使配置生效。- E+ ]$ k+ W' ` 下载源码。$ git clone --recursive http://github.com/micropython/micropython.git' m- t o5 G$ b 完成时如下7 N0 L7 k& A: t. t! v2 ^9 f8 | 2 I) e8 K# g8 W9 P+ s0 z9 F 打开D:\msys32\home\Administrator (换成自己的目录) 会多出一个micropython 的文件夹,里面就是所有源码了。 - `1 m) s( r, _" h& b7 f 2、移植, i, {& {! X; @' | 打开micropython下 ports/stm32/boards,新建目录F407,拷贝STM32F4DISC下所有文件到F407下。删掉staccel.py。; G$ z) P' d1 L, i mpconfigboard.h 中是板子的配置文件,pins.csv 中是引脚定义。+ H: [0 t" I/ s& b #define MICROPY_HW_BOARD_NAME "F407": _( v3 P7 }! P+ X #define MICROPY_HW_MCU_NAME "STM32F407"+ P0 ~% v: p, W" U0 K2 o 5 |& \. x1 B" s# l7 w4 ~; q5 R #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_FLASH (1) #define MICROPY_HW_ENABLE_RNG (1); s6 H4 ~+ Q+ n1 V$ ?: A1 ] #define MICROPY_HW_ENABLE_RTC (0)3 k! p9 \5 W f4 H. O" b( B. f #define MICROPY_HW_ENABLE_DAC (1)7 x4 A/ ?5 W; a! \) |1 e) F" { #define MICROPY_HW_ENABLE_USB (1) #define MICROPY_HW_HAS_SDCARD (1) // HSE is 8MHz #define MICROPY_HW_CLK_PLLM (25)1 T6 J5 W9 r. e7 Y #define MICROPY_HW_CLK_PLLN (336)- V+ E, x- F! u7 g( k" p: e #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)( M& }3 l: B; \, i6 j! j #define MICROPY_HW_CLK_PLLQ (7) ! u6 i4 q6 y8 ]/ |+ Y2 k // UART config! P! Q: J5 s$ |6 T0 \# H1 K x( B % O) I$ X* I! W1 T, B7 y% ~ // 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.! ~! U# s6 S; V1 T% W4 a #define MICROPY_HW_UART1_TX (pin_A9)) Y6 ~3 I! b! t' m' L #define MICROPY_HW_UART1_RX (pin_A10) #define MICROPY_HW_UART2_TX (pin_A2)- k! m6 T- v6 M/ j e8 |8 B- B #define MICROPY_HW_UART2_RX (pin_A3) #define MICROPY_HW_UART3_TX (pin_D8): y3 Y5 k6 K0 K #define MICROPY_HW_UART3_RX (pin_D9)/ y! e4 K! G, v6 O4 e . ~, i; X* N8 o1 d" I( `& y# O ! M3 d8 W. a( Y2 l0 C // NOTE: A0 also connects to the user switch. To use UART4 you should 5 }' ~4 W: K" y! K; M // 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)! Y* ]; h) X, b9 @( k+ X1 _ #define MICROPY_HW_UART4_RX (pin_A1)8 g( |2 A2 l* g3 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. // I2C busses #define MICROPY_HW_I2C1_SCL (pin_B6) #define MICROPY_HW_I2C1_SDA (pin_B7) 7 J1 W9 ^0 W' ]# R. U ) A. E0 v, h K' f // SPI busses #define MICROPY_HW_SPI1_NSS (pin_A4) #define MICROPY_HW_SPI1_SCK (pin_A5)5 v$ |1 h5 O% H; Y7 P #define MICROPY_HW_SPI1_MISO (pin_A6) #define MICROPY_HW_SPI1_MOSI (pin_A7)* Y/ m# }9 E% i- \' C" N #define MICROPY_HW_SPI3_NSS (pin_A15) #define MICROPY_HW_SPI3_SCK (pin_B3)6 {% A7 f. ]0 ~1 N; W! R #define MICROPY_HW_SPI3_MISO (pin_B4) m& [, Y- N, V& ?' F# |, [1 S$ \ #define MICROPY_HW_SPI3_MOSI (pin_B5)9 q+ Z! P% }& p: _+ `! o / ~ y' X' e6 |. K" K& ]4 E z1 b // CAN busses #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.* }# |% Z1 X% l h #define MICROPY_HW_USRSW_PIN (pin_C0) #define MICROPY_HW_USRSW_PULL (GPIO_NOPULL) #define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_RISING)) X+ ~, L& i( d: e5 h1 l% N3 m$ k# l #define MICROPY_HW_USRSW_PRESSED (1) 0 w) J4 p3 b4 p+ M3 T9 l( r // LEDs1 k- W' T$ G: b8 g. ]3 h$ t #define MICROPY_HW_LED1 (pin_E0) // red #define MICROPY_HW_LED2 (pin_E1) // green #define MICROPY_HW_LED3 (pin_E2) // orange% b; z7 T: f: R& \# Q, H6 v( d #define MICROPY_HW_LED4 (pin_E3) // blue% K7 _3 t' k3 ] q" K #define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin)) #define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin)) // USB config8 p! e: l3 d' ~. \: B0 C #define MICROPY_HW_USB_FS (1)# E+ u. k9 f. k //*************end mpconfigboard.h3 [$ J$ M' A5 G6 T" @) I , I' _" V0 y. C4 h pins.csv 用记事本打开修改。 缺少PB3 ,按格式添加。4 {( e. u+ T" D j; n2 {' X& b 最后的LED SW对应mpconfigboard.h 的引脚修改。 0 _6 X8 A& O- B 接下来是修改sd卡的文件,因为我的板子没有检测sd卡插入引脚。 i5 T9 X# ]5 h2 `4 X; w/ x& f+ ^ 打开stm32文件夹下的sdcard.c, 注释掉163行 引脚初始化。' j d" J, \% T( } 检测函数直接返回1。5 ~2 y3 K2 r8 J: W. V3 i bool sdcard_is_present(void) {: j9 K& g4 Z# c% s return 1;0 F# h' _8 C, d% I8 |+ I- Z2 J+ M8 L //return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT; }* o( J' J- q! u. Q2 k+ Y' N 3 J! d+ k+ I2 \/ N2 y modules下有几个py文件,是软连接的,msys2下有问题。从micropython\drivers 下复制对应的文件覆盖掉。 3、编译 msys2 进入到ports/stm32目录,执行 make BOARD=F407 |
6 }# w) E5 S7 e! \/ l
SD卡问题纠结了好久,还是不能从sd卡启动,但是可以使用
4 A; z' W2 _* @$ S/ k( Y! n- D: n
不应该和keil,iar相比了。是实现在单片机上用python语言编程。( a2 t' X: ~6 J2 ~
python相对c来说语法更简单更易学。
我也没接触过micropython,不知道说的对不对。
micro python 类似python语法,如果配置好了单片机和micro python之间的过渡层,就可以直接用python的方式操作单片机。但这并不意味着万能!micropython毕竟只是一个类似于语法解释器的东西(这个可以参考原子大神的usmart组件,一个道理),如果要实现的功能在单片机上并没有对应的执行函数,也就没有任何用。4 ~0 l# H# N/ K6 b2 V0 n
这种解释性的语法,目前比较多,vsf,micro python,nodemcu下面的lua,c语言解释器pico c等。
相当于二次开发,Python语法简单,开发环境简单只要一个文本编辑器即可。
目前也有不少库,像sqlite3 这种移植C代码工作量巨大,用MicroPython 可以直接用了。% X1 {9 K i( n) X
试过esp8266的,二、三十行即可实现移动的onenet控制开发板的led 、开关。