本帖最后由 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进阶的最好选择。
|