micropython中可以将自己做的模块以.py文件的方式存储,以备调用,但是这种方式容易被用户更改或者抄袭,所以micropython允许用户将自己的模块增加到标准的固件里。由于这部分工作需要linux系统下进行的,所以我用了VNC控制树莓派进行编译。有些设置权限的步骤,如果在直接登录的linux上不需要的话,请自行忽略。
1.安装arm-none-eabi-gcc交叉编译工具和gcc编译器。
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install gcc
2.下载micropython源码包到本地,我下载到了pi目录下
sudo git clone --recursive https://github.com/micropython/micropython.git
3.修改micropython权限
sudo chmod -R 777 /home/pi/micropython/
4.编写自定义模块
在/home/pi/micropython/ports/stm32/modules/ #目录下增加自己的.py模块
5.更改运行目录到交叉编译工具
cd /home/pi/micropython/mpy-cross/ #切换至交叉编译器目录下
6.执行交叉编译
make #执行交叉编译
7.更改运行目录至STM32
cd /home/pi/micropython/ports/stm32/ #切换至STM32目录下
8.执行编译
sudo make BOARD=PYBV10 #编译生成UDF、HEX文件
编译完成后在stm32目录下有个build-PYBV10文件夹,在里面可以找到firmware.duf和firmware.hex,选择自己想要的文件烧写的硬件去吧!
2019-11-22补充:如果需要编译多线程固件,将STM32目录下mpconfigport.h中
#define MICROPY_PY_THREAD (0)
改为
#define MICROPY_PY_THREAD (1)
然后进行上面操作即可!
然而,github上最新的源码STM32/里面没有了modules/文件夹,查看makefile文件,发现少了FROZEN_MPY_DIR ?= modules,而多了这句话:FROZEN_MANIFEST ?= boards/manifest.py
打开boards/manifest.py,内容如下:
而这几个模块正是之前版本里modules文件夹里的模块
也就是说想要增加py文件到固件,除了增加py文件外还需要修改manifest.py里的内容。具体方法如下:
在micropython/drivers/里增加modules文件夹用来放置自定义的py模块,在manifest.py里增加如下代码:
freeze('$(MPY_DIR)/drivers/modules', )
然后正常编译就可以了!