本帖最后由 shaoziyang 于 2016-8-1 11:58 编辑
前面介绍了在NUCLEO_F767ZI上移植MicroPython,下面在简单介绍在在NUCLEO_F767ZI上使用MicroPython。
首先写入MicroPython固件,然后通过一个终端连接到开发板,串口的参数需要设置为115200, n, 8, ,1, none。不要使用一般的串口辅助调试软件,而需要使用支持串口的终端软件,如WindowsXP自带的超级终端、xshell、MobaTerm、putty等。连接后,将会显示版本信息,已经python的命令提示符: >>>
在命令提示符后,可以直接输入各种python命令和程序,如print、数学计算等。值得一提的是python带有大整数计算功能,支持超大整数运算,例如我们可以直接用 ** 进行指数计算。
利用大整数,还可以精确计算圆周率到任意位数,下面的程序可以计算圆周率。
import time
def pi(places=10):
# 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
# The numerators 1, 9, 25, ... are given by (2x + 1) ^ 2
# The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
extra = 8
one = 10 ** (places+extra)
t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24
while t > 1:
n, na, d, da = n+na, na+8, d+da, da+32
t = t * n // d
c += t
return c // (10 ** extra)
def pi_t(n=10):
t1=time.ticks_us()
t=pi(n)
t2=time.ticks_us()
print('elapsed: ', time.ticks_diff(t1,t2)/1000000, 's')
return t
计算100位大约需要6ms,计算1000位用了0.21s,虽然和PC上专业程序比有点慢,但是在威控制器上有这个速度,还是可以体现出STM32F7的性能不错。
计算更多位数,10000位使用了21s,30000位使用了188s。
在计算到50000位时,因为内存不足提示错误:
>>> pi_t(500000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 19, in pi_t
File "<stdin>", line 8, in pi
MemoryError: memory allocation failed, allocating 54428 bytes
除了进行计算,MicroPython控制硬件也非常方便,如控制LED,可以用pyb.LED(1).toggle(),代表翻转LED1,on()和off()可以开关LED。在NUCLEO_F767ZI上,有3个用户LED。
也可以通过定时器去控制LED,如下面用定时器1每秒翻转依次LED2:
>>> tm = pyb.Timer(1)
>>> tm.init(freq = 1)
>>> tm.callback(lambda t: pyb.LED(2).toggle())
使用I2C、ADC、RTC也非常简单,如图:
MicroPython的功能很多,这里只简单介绍了一点,更多内容大家可以参考官方文档和其他帖子。MicroPython的功能很强大,适合DIY、快速原型设计,是Arduino进阶的最好选择。
|