简 介: 编写了python脚本程序,它可以自动生成MicroPython内部执行程序,借助于STM32-BOOTLOADER通过REPL发送MicroPython, 由MicroPython完成对SD卡中的main.py文件进行清空或者更新。这需要原来的main.py能够退回到REPL,与STM32-BOOTLOADER配合下载程序。否则需要通过USB SD卡读写器完成对于SD卡中的main.py的修改。
关键词
: MicroPython,MM32F3277,mainpy
§01 MicroPython执行main.py
一、MicroPython启动过程
在 设计带有SD卡的 MM32F3277 MicroPython 实验板 测试了带有SD卡的 MM32F3277 MicroPython实验板。该电路移植MicroPython来自于MindMotion 苏勇(2021-11-5版本),在上电后确认SDIO端口是否连接有SD卡(现在这个版本需要SD卡的容量大于 4Gb),并检测其中是否具有main.py文件。如果找到main.py, 则开始执行main.py。
对于SD卡main.py的文件,往往需要另外SD卡读写器有计算机写入和删除。下面测试是否可以借助于MicroPython软件完成对于main.py的修改与存储过程。
▲ 图1.1.1 读写SD卡USB接插口
二、删除main.py
在现在的版本中,并没有直接支持对于SD卡中文件删除的指令。不过可以借助写入功能,将原有的main.py的文件进行清空。
1、测试起始条件
首先,使用SD卡USB读写器,在SD卡中写入一个测试main.py程序。
from machine import Pin
import utime
for _ in range(10):
print(_)
utime.sleep_ms(100)
测试电路在上点之后,会先执行main.py,在显示10个数字之后,退到REPL状态。
[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...
0
1
2
3
4
5
6
7
8
9
[Y] done. 1
MicroPython v1.16 on 2021-11-05; MB_F3270 with MM32F3277G7P
>>>
2、清空main.py
编写测试程序对于SD 卡中的main.py进行清空。
(1)清空代码
from machine import Pin
import utime
with open('main.py', 'w') as f:
f.write('')
(2)执行过程
Reset MicroPython...
Wait for MicroPython coming back...
Download MicroPython : 22 lines/507 characters.
Begin to download program...
-------------------------------------------------------------------------
0
>>>
(3)检查清空效果
上电执行,下面是显示信息。可以看到,此时MicroPython
虽然检测到main.py
的存在,但由于main.py
是空文件,所以直接返回到 REPL .
[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...
[Y] done. 1
MicroPython v1.16 on 2021-11-05; MB_F3270 with MM32F3277G7P
>>>
三、写入main.py
将文件写入SD卡中的main.py,需要将待写入的程序编程一个可以执行的程序,吧main.py程序作MicroPython打开main.py之后需要写入的参数。
1、待写入测试main.py
下面是需要在SD卡写入的main.py 代码。
from machine import Pin
import utime
for _ in range(10):
print(_)
utime.sleep_ms(100)
2、Python命令
编写Python脚本程序 pymain.py。它的功能:
- 根据是否带有参数确定是生成清空main.py的执行程序,还是将当前编辑窗口程序写入SD卡main.py;
- 生成MicroPython执行代码;
- 拷贝到clipboard,往STM32-Bootloader发送"MPDLD"命令,由STM32-BOOTLOADER通过REPL送到MicroPython, 由其完成清空main.py,或者将程序写入main.py.
(1)pymain.py代码
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# PYMAIN.PY -- by Dr. ZhuoQing 2021-11-07
#
# Note:
#============================================================
from head import *
from tsmodule.tsstm32 import *
#------------------------------------------------------------
pastestr = ''
if len(sys.argv) == 1:
tspcopyclipboard()
pastestr = clipboard.paste().replace('\r', '').replace('\n', '\\n')
writestr = 'with open("main.py", "w") as f:\n f.write("%s")\n\n'%pastestr
clipboard.copy(writestr)
stm32cmd("MPDLD")
tspfocuswindow("TEASOFT:1")
printf('\a')
#------------------------------------------------------------
# END OF FILE : PYMAIN.PY
#============================================================
(2)功能测试
使用TEASOFT编辑下载的main.py程序,执行下面pymain程序。
➤Ⅰ.清除main.py
- 发送命令: pymain +
➤Ⅱ.写入main.py
- 发送命令: pymain (无参数)
经过测试,上面过程满足设计功能。
四、存在问题
完成上面功能,需要MicroPython 能把返回REPL才行。如果原来main.py是一个死循环,无法有外部的条件退回到REPL,那么上述程序无法完成工作。只能通过USB SD读写器完成对于main.py的清除。
※ 测试总结 ※
编写了python脚本程序,它可以自动生成MicroPython内部执行程序,借助于STM32-BOOTLOADER通过REPL发送MicroPython, 由MicroPython完成对SD卡中的main.py文件进行清空或者更新。
这需要原来的main.py能够退回到REPL,与STM32-BOOTLOADER配合下载程序。否则需要通过USB SD卡读写器完成对于SD卡中的main.py的修改。
一、完整的pymain.py程序
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# PYMAIN.PY -- by Dr. ZhuoQing 2021-11-07
#
# Usage:
# pymain * # Clear main.py content
# pymain # Write the current edit file into micropython main.py
#
# Note:
#============================================================
from head import *
from tsmodule.tsstm32 import *
#------------------------------------------------------------
pastestr = ''
if len(sys.argv) == 1:
tspcopyclipboard()
pastestr = clipboard.paste().replace('\r', '').replace('\n', '\\n')
printf("Write the main.py code.")
else:
printf("Clear MicroPython main.py.")
writestr = 'with open("main.py", "w") as f:\n f.write("%s")\n\n'%pastestr
clipboard.copy(writestr)
stm32cmd("MPDLD")
tspfocuswindow("TEASOFT:1")
printf('\a')
#------------------------------------------------------------
# END OF FILE : PYMAIN.PY
#============================================================
■ 相关文献链接:
- 设计带有SD卡的 MM32F3277 MicroPython 实验板
● 相关图表链接:
- 图1.1.1 读写SD卡USB接插口