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', )
然后正常編譯就可以了!