Mandelbrot_Set 发表于 2018-5-24 16:41:18

msys2下编译stm32的micropython

先说明下环境确实不如linux好用,各种坑,虽然可以编译成功。
1.clone仓库.
由于有http://github.com/micropython/micropython/blob/v1.9.4/ports/stm32/modules/dht.py等symbolic link
直接在windows clone下来会变样(用的msys2自带的git)
所以:
admin@admin-PC MINGW64 ~/test
$ git clone -c core.symlinks=true http://github.com/micropython/micropython --branch v1.9.4 --depth=1
Cloning into 'micropython'...
remote: Counting objects: 2846, done.
remote: Compressing objects: 100% (2478/2478), done.
remote: Total 2846 (delta 460), reused 1426 (delta 181), pack-reused 0
Receiving objects: 100% (2846/2846), 5.01 MiB | 681.00 KiB/s, done.
Resolving deltas: 100% (460/460), done.
Note: checking out '421b84af9968e582f324899934f52b3df60381ee'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b <new-branch-name>

error: unable to create symlink examples/embedding/mpconfigport.h: No such file or directory
error: unable to create symlink ports/esp32/modules/ds18x20.py: No such file or directory
error: unable to create symlink ports/esp32/modules/ntptime.py: No such file or directory
error: unable to create symlink ports/esp32/modules/onewire.py: No such file or directory
error: unable to create symlink ports/esp32/modules/upip.py: No such file or directory
error: unable to create symlink ports/esp32/modules/upip_utarfile.py: No such file or directory
error: unable to create symlink ports/esp32/modules/upysh.py: No such file or directory
error: unable to create symlink ports/esp32/modules/urequests.py: No such file or directory
error: unable to create symlink ports/esp32/modules/webrepl.py: No such file or directory
error: unable to create symlink ports/esp32/modules/webrepl_setup.py: No such file or directory
error: unable to create symlink ports/esp32/modules/websocket_helper.py: No such file or directory
error: unable to create symlink ports/esp8266/modules/upip.py: No such file or directory
error: unable to create symlink ports/esp8266/modules/upip_utarfile.py: No such file or directory
error: unable to create symlink ports/unix/modules/upip.py: No such file or directory
error: unable to create symlink ports/unix/modules/upip_utarfile.py: No such file or directory
error: unable to create symlink tests/pyboard.py: No such file or directory
Checking out files: 100% (2698/2698), done.
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'

还是报错。。
如果不待-c core.symlinks=true参数,可能出现
MPY modules/dht.py
Traceback (most recent call last):
File "modules/dht.py", line 1
SyntaxError: invalid syntax
make: *** [../../py/mkrules.mk:114: build-NUCLEO_L476RG/frozen_mpy/dht.mpy] Error 1
原因在于modules/dht.py 已经不是它该有的样子了。。
将链接指向的文件copy过去覆盖也是可以的(这样可能就不需要step2了)

2.clone stm32lib
make 时按理会自动clone,但是报错了,先手动.
[可能上面的错误导致的]
admin@admin-PC MINGW64 ~/test
$ cd micropython/
admin@admin-PC MINGW64 ~/test/micropython
$ git clone http://github.com/micropython/stm32lib ./lib/stm32lib
Cloning into './lib/stm32lib'...
remote: Counting objects: 1958, done.
remote: Total 1958 (delta 0), reused 0 (delta 0), pack-reused 1958
Receiving objects: 100% (1958/1958), 7.46 MiB | 905.00 KiB/s, done.
Resolving deltas: 100% (1508/1508), done.
Checking out files: 100% (776/776), done.3.下面可以编译了。
admin@admin-PC MINGW64 ~/test/micropython
$ make -C mpy-cross -j8
make: Entering directory '/aaaa/test/micropython/mpy-cross'
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
mkdir -p build/genhdr
mkdir -p build/
mkdir -p build/extmod/
mkdir -p build/lib/embed/
mkdir -p build/lib/utils/
mkdir -p build/py/
GEN build/genhdr/mpversion.h
GEN build/genhdr/qstr.i.last
GEN build/genhdr/qstr.split
GEN build/genhdr/qstrdefs.collected.h
QSTR updated
GEN build/genhdr/qstrdefs.generated.h
CC ../py/mpstate.c
CC ../py/nlr.c
CC ../py/nlrx86.c
CC ../py/nlrx64.c
CC ../py/nlrthumb.c
CC ../py/nlrxtensa.c
CC ../py/nlrsetjmp.c
CC ../py/malloc.c
CC ../py/gc.c
CC ../py/pystack.c
CC ../py/qstr.c
CC ../py/vstr.c
CC ../py/mpprint.c
CC ../py/unicode.c
CC ../py/mpz.c
CC ../py/reader.c
CC ../py/lexer.c
CC ../py/parse.c
CC ../py/scope.c
CC ../py/compile.c
CC ../py/emitcommon.c
CC ../py/emitbc.c
CC ../py/asmbase.c
CC ../py/asmx64.c
CC ../py/emitnx64.c
CC ../py/asmx86.c
CC ../py/emitnx86.c
CC ../py/asmthumb.c
CC ../py/emitnthumb.c
CC ../py/emitinlinethumb.c
CC ../py/emitnarm.c
CC ../py/asmarm.c
CC ../py/asmxtensa.c
CC ../py/emitnxtensa.c
CC ../py/emitinlinextensa.c
CC ../py/formatfloat.c
CC ../py/parsenumbase.c
CC ../py/parsenum.c
CC ../py/emitglue.c
CC ../py/persistentcode.c
CC ../py/runtime.c
CC ../py/runtime_utils.c
CC ../py/scheduler.c
CC ../py/nativeglue.c
CC ../py/stackctrl.c
CC ../py/argcheck.c
CC ../py/map.c
CC ../py/warning.c
CC ../py/obj.c
CC ../py/objarray.c
CC ../py/objattrtuple.c
CC ../py/objboundmeth.c
CC ../py/objbool.c
CC ../py/objcell.c
CC ../py/objclosure.c
CC ../py/objcomplex.c
CC ../py/objdeque.c
CC ../py/objdict.c
CC ../py/objexcept.c
CC ../py/objenumerate.c
CC ../py/objfilter.c
CC ../py/objfloat.c
CC ../py/objfun.c
CC ../py/objgenerator.c
CC ../py/objgetitemiter.c
CC ../py/objint.c
CC ../py/objint_longlong.c
CC ../py/objint_mpz.c
CC ../py/objlist.c
CC ../py/objmodule.c
CC ../py/objmap.c
CC ../py/objobject.c
CC ../py/objpolyiter.c
CC ../py/objproperty.c
CC ../py/objnone.c
CC ../py/objnamedtuple.c
CC ../py/objrange.c
CC ../py/objreversed.c
CC ../py/objset.c
CC ../py/objsingleton.c
CC ../py/objslice.c
CC ../py/objstr.c
CC ../py/objstrunicode.c
CC ../py/objstringio.c
CC ../py/objtuple.c
CC ../py/objtype.c
CC ../py/opmethods.c
CC ../py/sequence.c
CC ../py/objzip.c
CC ../py/stream.c
CC ../py/binary.c
CC ../py/builtinimport.c
CC ../py/builtinevex.c
CC ../py/builtinhelp.c
CC ../py/modarray.c
CC ../py/modbuiltins.c
CC ../py/modcollections.c
CC ../py/modgc.c
CC ../py/modio.c
CC ../py/modmath.c
CC ../py/modcmath.c
CC ../py/modmicropython.c
CC ../py/modsys.c
CC ../py/moduerrno.c
CC ../py/modstruct.c
CC ../py/modthread.c
CC ../py/vm.c
CC ../py/bc.c
CC ../py/showbc.c
CC ../py/repl.c
CC ../py/smallint.c
CC ../py/frozenmod.c
CC ../extmod/moductypes.c
CC ../extmod/modujson.c
CC ../extmod/modure.c
CC ../extmod/moduzlib.c
CC ../extmod/moduheapq.c
CC ../extmod/modutimeq.c
CC ../extmod/moduhashlib.c
CC ../extmod/modubinascii.c
CC ../extmod/virtpin.c
CC ../extmod/machine_mem.c
CC ../extmod/machine_pinbase.c
CC ../extmod/machine_signal.c
CC ../extmod/machine_pulse.c
CC ../extmod/machine_i2c.c
CC ../extmod/machine_spi.c
CC ../extmod/modussl_axtls.c
CC ../extmod/modussl_mbedtls.c
CC ../extmod/modurandom.c
CC ../extmod/moduselect.c
CC ../extmod/modwebrepl.c
CC ../extmod/modwebsocket.c
CC ../extmod/modframebuf.c
CC ../extmod/vfs.c
CC ../extmod/vfs_reader.c
CC ../extmod/vfs_fat.c
CC ../extmod/vfs_fat_diskio.c
CC ../extmod/vfs_fat_file.c
CC ../extmod/utime_mphal.c
CC ../extmod/uos_dupterm.c
CC ../lib/embed/abort_.c
CC ../lib/utils/printf.c
CC main.c
CC gccollect.c
LINK mpy-cross
   text    data   bss   dec   hex filename
190489    2852    1280194621   2f83d mpy-cross
make: Leaving directory '/aaaa/test/micropython/mpy-cross'
admin@admin-PC MINGW64 ~/test/micropython
$ make -C ports/stm32 BOARD=NUCLEO_L476RG -j8
make: Entering directory '/aaaa/test/micropython/ports/stm32'
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
mkdir -p build-NUCLEO_L476RG/genhdr
mkdir -p build-NUCLEO_L476RG/boards/
mkdir -p build-NUCLEO_L476RG/build-NUCLEO_L476RG/
mkdir -p build-NUCLEO_L476RG/drivers/bus/
mkdir -p build-NUCLEO_L476RG/drivers/dht/
mkdir -p build-NUCLEO_L476RG/drivers/memory/
mkdir -p build-NUCLEO_L476RG/extmod/
mkdir -p build-NUCLEO_L476RG/lib/embed/
mkdir -p build-NUCLEO_L476RG/lib/libc/
mkdir -p build-NUCLEO_L476RG/lib/libm/
mkdir -p build-NUCLEO_L476RG/lib/mp-readline/
mkdir -p build-NUCLEO_L476RG/lib/netutils/
mkdir -p build-NUCLEO_L476RG/lib/oofatfs/
mkdir -p build-NUCLEO_L476RG/lib/oofatfs/option/
mkdir -p build-NUCLEO_L476RG/lib/stm32lib/STM32L4xx_HAL_Driver/Src/
mkdir -p build-NUCLEO_L476RG/lib/timeutils/
mkdir -p build-NUCLEO_L476RG/lib/utils/
mkdir -p build-NUCLEO_L476RG/py/
mkdir -p build-NUCLEO_L476RG/usbdev/class/src/
mkdir -p build-NUCLEO_L476RG/usbdev/core/src/
MPY modules/dht.py
MPY modules/lcd160cr.py
MPY modules/lcd160cr_test.py
MPY modules/onewire.py
GEN stmconst build-NUCLEO_L476RG/genhdr/modstm_const.h
GEN build-NUCLEO_L476RG/pins_NUCLEO_L476RG.c
GEN build-NUCLEO_L476RG/genhdr/pybcdc.inf
GEN build-NUCLEO_L476RG/genhdr/pllfreqtable.h
GEN build-NUCLEO_L476RG/genhdr/pybcdc_inf.h
GEN build-NUCLEO_L476RG/genhdr/mpversion.h
GEN build-NUCLEO_L476RG/genhdr/qstr.i.last
GEN build-NUCLEO_L476RG/genhdr/qstr.split
GEN build-NUCLEO_L476RG/genhdr/qstrdefs.collected.h
QSTR updated
GEN build-NUCLEO_L476RG/genhdr/qstrdefs.generated.h
CC ../../py/mpstate.c
CC ../../py/nlr.c
CC ../../py/nlrx86.c
CC ../../py/nlrx64.c
CC ../../py/nlrthumb.c
CC ../../py/nlrxtensa.c
CC ../../py/nlrsetjmp.c
CC ../../py/malloc.c
CC ../../py/gc.c
CC ../../py/pystack.c
CC ../../py/qstr.c
CC ../../py/vstr.c
CC ../../py/mpprint.c
CC ../../py/unicode.c
CC ../../py/mpz.c
CC ../../py/reader.c
CC ../../py/lexer.c
CC ../../py/parse.c
CC ../../py/scope.c
CC ../../py/compile.c
CC ../../py/emitcommon.c
CC ../../py/emitbc.c
CC ../../py/asmbase.c
CC ../../py/asmx64.c
CC ../../py/emitnx64.c
CC ../../py/asmx86.c
CC ../../py/emitnx86.c
CC ../../py/asmthumb.c
CC ../../py/emitnthumb.c
CC ../../py/emitinlinethumb.c
CC ../../py/asmarm.c
CC ../../py/emitnarm.c
CC ../../py/asmxtensa.c
CC ../../py/emitnxtensa.c
CC ../../py/emitinlinextensa.c
CC ../../py/formatfloat.c
CC ../../py/parsenumbase.c
CC ../../py/parsenum.c
CC ../../py/emitglue.c
CC ../../py/persistentcode.c
CC ../../py/runtime.c
CC ../../py/runtime_utils.c
CC ../../py/scheduler.c
CC ../../py/nativeglue.c
CC ../../py/stackctrl.c
CC ../../py/argcheck.c
CC ../../py/warning.c
CC ../../py/map.c
CC ../../py/obj.c
CC ../../py/objarray.c
CC ../../py/objattrtuple.c
CC ../../py/objbool.c
CC ../../py/objboundmeth.c
CC ../../py/objcell.c
CC ../../py/objclosure.c
CC ../../py/objcomplex.c
CC ../../py/objdeque.c
CC ../../py/objdict.c
CC ../../py/objenumerate.c
CC ../../py/objexcept.c
CC ../../py/objfilter.c
CC ../../py/objfloat.c
CC ../../py/objfun.c
CC ../../py/objgenerator.c
CC ../../py/objgetitemiter.c
CC ../../py/objint.c
CC ../../py/objint_longlong.c
CC ../../py/objint_mpz.c
CC ../../py/objlist.c
CC ../../py/objmap.c
CC ../../py/objmodule.c
CC ../../py/objobject.c
CC ../../py/objpolyiter.c
CC ../../py/objproperty.c
CC ../../py/objnone.c
CC ../../py/objnamedtuple.c
CC ../../py/objrange.c
CC ../../py/objreversed.c
CC ../../py/objset.c
CC ../../py/objsingleton.c
CC ../../py/objslice.c
CC ../../py/objstr.c
CC ../../py/objstrunicode.c
CC ../../py/objstringio.c
CC ../../py/objtuple.c
CC ../../py/objtype.c
CC ../../py/objzip.c
CC ../../py/opmethods.c
CC ../../py/sequence.c
CC ../../py/stream.c
CC ../../py/binary.c
CC ../../py/builtinimport.c
CC ../../py/builtinevex.c
CC ../../py/builtinhelp.c
CC ../../py/modarray.c
CC ../../py/modbuiltins.c
CC ../../py/modcollections.c
CC ../../py/modgc.c
CC ../../py/modio.c
CC ../../py/modmath.c
CC ../../py/modcmath.c
CC ../../py/modmicropython.c
CC ../../py/modstruct.c
CC ../../py/modsys.c
CC ../../py/moduerrno.c
CC ../../py/modthread.c
CC ../../py/vm.c
CC ../../py/bc.c
CC ../../py/showbc.c
CC ../../py/repl.c
CC ../../py/smallint.c
CC ../../py/frozenmod.c
CC ../../extmod/moductypes.c
CC ../../extmod/modujson.c
CC ../../extmod/modure.c
CC ../../extmod/moduzlib.c
CC ../../extmod/moduheapq.c
CC ../../extmod/modutimeq.c
CC ../../extmod/moduhashlib.c
CC ../../extmod/modubinascii.c
CC ../../extmod/virtpin.c
CC ../../extmod/machine_mem.c
CC ../../extmod/machine_pinbase.c
CC ../../extmod/machine_signal.c
CC ../../extmod/machine_pulse.c
CC ../../extmod/machine_i2c.c
CC ../../extmod/machine_spi.c
CC ../../extmod/modussl_axtls.c
CC ../../extmod/modussl_mbedtls.c
CC ../../extmod/modurandom.c
CC ../../extmod/moduselect.c
CC ../../extmod/modwebsocket.c
CC ../../extmod/modwebrepl.c
CC ../../extmod/modframebuf.c
CC ../../extmod/vfs.c
CC ../../extmod/vfs_reader.c
CC ../../extmod/vfs_fat.c
CC ../../extmod/vfs_fat_diskio.c
CC ../../extmod/vfs_fat_file.c
CC ../../extmod/utime_mphal.c
CC ../../extmod/uos_dupterm.c
CC ../../lib/embed/abort_.c
CC ../../lib/utils/printf.c
GEN build-NUCLEO_L476RG/frozen_mpy.c
CC ../../lib/libc/string0.c
CC ../../lib/oofatfs/ff.c
CC ../../lib/oofatfs/option/unicode.c
CC ../../lib/mp-readline/readline.c
CC ../../lib/netutils/netutils.c
CC ../../lib/timeutils/timeutils.c
CC ../../lib/utils/pyexec.c
CC ../../lib/utils/interrupt_char.c
CC ../../lib/utils/sys_stdio_mphal.c
CC ../../lib/libm/math.c
CC ../../lib/libm/thumb_vfp_sqrtf.c
CC ../../lib/libm/acoshf.c
CC ../../lib/libm/asinfacosf.c
CC ../../lib/libm/asinhf.c
CC ../../lib/libm/atan2f.c
CC ../../lib/libm/atanf.c
CC ../../lib/libm/atanhf.c
CC ../../lib/libm/ef_rem_pio2.c
CC ../../lib/libm/erf_lgamma.c
CC ../../lib/libm/fmodf.c
CC ../../lib/libm/kf_cos.c
CC ../../lib/libm/kf_rem_pio2.c
CC ../../lib/libm/kf_sin.c
CC ../../lib/libm/kf_tan.c
CC ../../lib/libm/log1pf.c
CC ../../lib/libm/nearbyintf.c
CC ../../lib/libm/sf_cos.c
CC ../../lib/libm/sf_erf.c
CC ../../lib/libm/sf_frexp.c
CC ../../lib/libm/sf_ldexp.c
CC ../../lib/libm/sf_modf.c
CC ../../lib/libm/sf_sin.c
CC ../../lib/libm/sf_tan.c
CC ../../lib/libm/wf_lgamma.c
CC ../../lib/libm/wf_tgamma.c
CC ../../extmod/modonewire.c
CC ../../drivers/bus/softspi.c
CC ../../drivers/bus/softqspi.c
CC ../../drivers/memory/spiflash.c
CC ../../drivers/dht/dht.c
CC main.c
CC system_stm32.c
CC stm32_it.c
CC usbd_conf.c
CC usbd_desc.c
CC usbd_cdc_interface.c
CC usbd_hid_interface.c
CC usbd_msc_storage.c
CC mphalport.c
CC mpthreadport.c
CC irq.c
CC pendsv.c
CC systick.c
CC pybthread.c
CC timer.c
CC led.c
CC pin.c
CC pin_defs_stm32.c
CC pin_named_pins.c
CC bufhelper.c
CC dma.c
CC i2c.c
CC pyb_i2c.c
CC spi.c
CC qspi.c
CC uart.c
CC can.c
CC usb.c
CC wdt.c
CC gccollect.c
CC help.c
CC machine_i2c.c
CC modmachine.c
CC modpyb.c
CC modstm.c
CC moduos.c
CC modutime.c
CC modusocket.c
CC modnetwork.c
CC extint.c
CC usrsw.c
CC rng.c
CC rtc.c
CC flash.c
CC flashbdev.c
CC spibdev.c
CC storage.c
CC sdcard.c
CC fatfs_port.c
CC lcd.c
CC accel.c
CC servo.c
CC dac.c
CC adc.c
AS boards/startup_stm32l4.s
AS resethandler.s
AS gchelper.s
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_adc.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_adc_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dac.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dac_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pcd.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pcd_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_sd.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_ll_sdmmc.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_ll_usb.c
CC ../../lib/stm32lib/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_can.c
CC usbdev/core/src/usbd_core.c
CC usbdev/core/src/usbd_ctlreq.c
CC usbdev/core/src/usbd_ioreq.c
CC usbdev/class/src/usbd_cdc_msc_hid.c
CC usbdev/class/src/usbd_msc_bot.c
CC usbdev/class/src/usbd_msc_scsi.c
CC usbdev/class/src/usbd_msc_data.c
CC build-NUCLEO_L476RG/pins_NUCLEO_L476RG.c
CC build-NUCLEO_L476RG/frozen_mpy.c
LINK build-NUCLEO_L476RG/firmware.elf
   text    data   bss   dec   hex filename
313520   108   27828341456   535d0 build-NUCLEO_L476RG/firmware.elf
GEN build-NUCLEO_L476RG/firmware.dfu
GEN build-NUCLEO_L476RG/firmware.hex
make: Leaving directory '/aaaa/test/micropython/ports/stm32'

admin@admin-PC MINGW64 ~/test/micropython

以上仅供参考.


页: [1]
查看完整版本: msys2下编译stm32的micropython