随着micropython 1.9.4版本的发布,micropython开始正式支持STM32H7微控制器。STM32H7作为目前STM32 Cotex-M系列控制器中性能最高的系列,micropython在它上面的表现如何呢?和其它型号相比,有什么优势?下面我们就在NUCELO_H743开发板上,看看MicroPython的表现。

从 1.9.4版开始,micropython在支持的开发板中增加了Nucleo-H743ZI开发板,不过官网上并没有提供开发板的二进制固件文件,要运行micropython就需要自己编译源码。如果安装过micropyhon编译环境,那么只要在micropython目录下,输入下面命令进行编译:

make -C ports/stm32 BOARD=NUCLEO_H743ZI

如果没有安装编译环境,可以参考另外一篇文章《在win10的ubuntu子系统下编译micropython》,按照文中的方法就可以安装编译环境。这个方法也可以用于其它虚拟机,或者ubuntu系统。

如果觉得安装编译环境太麻烦,或者网速太慢安装不了,可以直接下载我编译好的固件,将固件通过板载的STLink下载到芯片,就可以运行了。

在使用前,我们需要准备两根microUSB数据线(安卓手机的数据线),以及串口终端软件,如putty、kitty、MobaXterm等。注意不能使用串口助手之类的软件,因为它们不支持终端模式。

为什么需要两个数据线呢?因为ST-Link需要使用一个数据线,而开发板上的STM32H743的USB可以接入另外一个USB。写入固件后,先断电一次,然后连接ST-Link,再连接另外一边的用户USB。如果一切操作步骤正常,这时就会显示一个pybflash磁盘,我们可以往这个磁盘中写入文件,运行编写好的程序。默认情况下,会从main.py文件开始运行,所以我们可以将编写的程序放入main.py,让它自动运行。

如果是win10或者macos、Linux系统,无需安装任何驱动,如果是win7系统,还需要安装一个串口驱动,驱动程序就在这个PYBFLASH磁盘中。安装后,我们可以看到有两个串口,一个是ST-Link的串口,另外一个就是MicroPython的串口了。

运行一个终端软件,串口可以设置为上面两个串口中的任何一个,并设置波特率是115200,流量控制选择None。下面以kitty软件为例,其它软件的使用也是类似的:

设置好参数后,点open 按钮,就可以打开终端了。按下回车键,如果出现>>>提示,就代表运行成功了。这时按下ctrl-B键,就可以看到版本提示。

按照习惯,我们先从点灯开始。在MicroPython中,默认定义了LED类型,我们可以通过pyb.LED进行控制,如:

pyb.LED(1).on()pyb.LED(1).off()

因为NUCLEO_H743开发板上有3个LED,所以我们也可以使用它们做一个跑马灯:

while 1: for i in range(1, 4): pyb.LED(i).toggle() pyb.delay(500) pyb.LED(i).toggle() pyb.delay(500)

按键的使用也非常容易,MicroPython中有一个内置的Switch类,可以用来读取按键。下面的程序通过按键来控制LED1的状态:

sw=pyb.Switch()sw()while 1: if sw(): pyb.LED(1).on() else: pyb.LED(1).off()

定时器也是我们在编程时最常用的功能之一,下面的程序中,分别在定时器6和定时器7的回调函数中控制LED1和LED3,并使用不同的频率闪烁。

tm = pyb.Timer(6, freq=2)tm.callback(lambda t: pyb.LED(1).toggle())tm2 = pyb.TImer(7, freq=5)tm2.callback(lambda t: pyb.LED(3).toggle())虽然STM32H743有22个定时器,但是micropython目前只支持到定时器14,超过14的定时器可以定义,但是一旦使用就会死机。

PWM也是很常用的功能,它是通过定时器控制GPIO实现的,是定时器的一种特殊工作模式。下面是在MicroPython中使用PWM的方法,下面程序通过定时器3的CH3控制LED1(PB0),通过周期改变占空比实现了一个呼吸灯。

tm = pyb.TImer(3, freq=1000)pwm = tm.channel(3, mode=pyb.TImer.PWM, pin=pyb.Pin('B0'))pwm.pulse_width_percent(20)while 1: for i in range(100): pwm.pulse_width_percent(i) pyb.delay(20)

STM32H743带有两路DAC,分别是PA4和PA5,通过DAC我们可以输出模拟电压、产生各种波形。如下面分别使用8位(默认情况)和12位方式控制DAC的输出:

d1 = pyb.DAC(1)d1.write(100)d1 = pyb.DAC(1, 12)d1.write(3000)

除了直接输出模拟电压,也可以输出不同波形:

三角波

d1.triangle(2048)

白噪声

d1.noise(1000)

还可以输出预定义的用户波形。利用这个特点和STM32H7的高速特性,完全可以将它作为一个简易的波形发生器。

MicroPython还有很多功能,这里就不一一介绍了,大家可以自己运行一下,体验MicrPython带来的方便。

最后,为了测试MicroPython在STM32H743上的性能,我们做了一个计算性能对比测试,在不同的硬件平台上,进行加法、乘法、除法、圆周率计算,并记录下计算消耗的时间。通过不同硬件计算时间的对比,就可以直观的比较性能了(这可能是目前最全面的MicroPython计算性能对比测试,将目前常见的硬件都包括了)。

完整的测试程序

from microbit import running_TImedef pi(places=100): # 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_test(n=5000): t1=running_time() t=pi(n) t2=running_time() print('Pi test: ', (t2-t1)/1000, 's')def add_test(n=1000000, a = 1234, b = 5678): t1=running_time() sum = 0 for i in range(n): sum = a + b t2=running_time() print('Add test: ', (t2-t1)/1000, 's')def mul_test(n=1000000, a = 1234, b = 5678): t1=running_time() sum = 0 for i in range(n): sum = a * b t2=running_time() print('Mul test: ', (t2-t1)/1000, 's')def div_test(n=1000000, a = 1234, b = 5678): t1=running_time() sum = 0 for i in range(n): sum = a / b t2=running_time() print('Div test: ', (t2-t1)/1000, 's')print('Speed test starting...')add_test()add_test()mul_test()mul_test()div_test()div_test()pi_test()pi_test()

测试结果

主频

整数加法

乘法

除法

圆周率

microbit

nRF51822

16M

61.888

74.075

103.935

Nucleo_F091

STM32F091

48M

19.882

25.89

51.78

82.851

PYBNano

STM32F401

84M

6.959

7.222

12.524

18.236

Nucleo_F411

STM32F411

96M

5.858

6.076

10.478

16.467

PYBV10

STM32F405

168M

3.436

3.563

6.067

10.18

STM32L476DISC

STM32L476

80M

8.586

8.989

14.913

18.932

STM32F7DISC

STM32F746

192M

1.946

2.304

3.68

4.579

Nucleo_H743

STM32H743

400M

0.856

0.942

1.534

2.835

ESP8266

ESP8266

80M

15.546

18.302

19.706

41.926

ESP32

ESP32

240M

2.607

2.794

3.839

7.729

ESP32_psRAM

ESP32

240M

3.365

3.553

18.902

15.012

ESP32_LoBo

ESP32

240M

3.396

3.499

13.02

9.607

ESP32_psRAM_LoBo

ESP32

240M

4.228

4.15

18.902

18.757

计算结果的单位是秒

所有固件都更新到最新版本,除了Microbit、ESP32 Lobo外,固件版本都是1.9.4-479。

stm32与micropython_在NUCLEO_H743上玩MicroPython相关推荐

  1. 在MM32F3273上运行MicroPython,对于性能进行测试

    简 介: 通过设计简单的测试电路,验证了MicroPython在MM32F3273上运行的情况.初步证实它可以运行移植后的MicroPython. 关键词: MM32F3273,MicroPython ...

  2. 在mm32f3270上为MicroPython启用Timer模块

    在mm32f3270上为MicroPython启用Timer模块 文章目录 在mm32f3270上为MicroPython启用Timer模块 Requirements Implementation A ...

  3. 怎么锁定电脑屏幕_和平精英怎么在电脑上玩?匹配手机最简单的方式玩你值得拥有...

    怎么在电脑上玩和平精英手游?刺激战场和全军出击下架之后,氪金版吃鸡和平精英昨天几乎同步上线,上线就是公测,腾讯就是这么牛!不论你喜不喜欢和平精英,它还是会再火一波就是了. 看到有不少玩家在问怎么在电脑 ...

  4. 如何用计算机玩我的世界,怎样在电脑上玩《我的世界》

    <我的世界>是一款带有生存与冒险元素的3D第一人称沙盘游戏.没有非常华丽的画面和特效,有的只是通过乐高积木的拼凑,制作出属于自己的小房子.堡垒甚至城市.玩家可以选择独自一人,也可与他人一起 ...

  5. 在通知栏上玩游戏,Steve iOS 游戏实现思路

    在通知栏上玩游戏,Steve iOS 游戏实现思路 最近有一款游戏特别的火爆,叫做Steve ,一种可以在通知中心直接玩的游戏.作者的脑洞也是非常的大,实在让人佩服.其实实现起来也简单,就是用到了iO ...

  6. ubuntu上玩3D,把状态栏面板栏给玩没了

    ubuntu上玩3D,把状态栏面板栏给玩没了,整个界面里只有几个桌面的图标,上下任务栏都没了,按照网上的一些方法,结束gnome-panle,再重新加载,结果,两个面板回来了,不过是空空的,什么也没有 ...

  7. 教你如何用计算机玩游戏,《永恒战士2》教你如何在PC电脑上玩秘籍

    虽然说安卓设备现在已经覆盖了很多的用户,但是不少朋友还是喜欢使用电脑版安卓模拟器来运行安卓游戏,这样玩起来要简单的多,不过电脑版安卓模拟器质量参差不齐,而且安装教程很繁琐.所以这次就为大家带来安卓模拟 ...

  8. 如何在K8S上玩转TensorFlow ?

    女主宣言 该文章出自于ADDOPS团队,是关于如何在K8S上玩转tensorflow的主题,该文章深入浅出的给我们介绍了当前tensorflow的现状和架构特点等,然后介绍了让tensorflow如何 ...

  9. 电脑上玩和平精英_《和平精英》怎么投屏到电脑上?手把手教你电脑键鼠玩手游...

    <<和平精英>怎么投屏到电脑上玩?作为一款由端游移植到手机上得FPS射击手游,相比较其他类型的手游,在手机上操作存在一定的局限性,压枪.拾取装备.走位等这些在游戏中的日常操作还是在电 ...

最新文章

  1. 刷脸取件遭小学生破解,丰巢智能柜紧急下线相关功能
  2. C#String与string大小写的区别
  3. 区块链BaaS云服务(35)亦笔科技ODRChain
  4. 如何找出SAP Fiori launchpad URL start_up请求发起的具体位置
  5. Android dependency 'com.android.support:support-v4' has different version for the compile (26.1.0...
  6. 华为的冬天(来自网路)---任正非
  7. VC返回文件所在的路径
  8. php抓取动态数据,php+ajax实现无刷新动态加载数据技术
  9. php txtsql 说明,PHP学习笔记(2)txtSQL文档错误
  10. linux bes二进制查看工具,Linux的命令及工具
  11. 插槽的使用_思维导图
  12. struts框架搭建及validator示例
  13. building for production...Killed
  14. [草稿]几款硬盘数据共享产品技术选型
  15. 决胜未来,2019年前端开发十大战略性技术布局
  16. 国内开发商品基金的一些设想
  17. 通过JAVA获取优酷、土豆、酷6、6间房、56视频
  18. Linux面试题总结
  19. PDF怎么在手机上删除不要的页
  20. Java正则匹配淘口令

热门文章

  1. 眼下发展最迅猛的十家网络安全公司
  2. Oracle EBS 入门
  3. 几个高效做事的法则,让你的一天有 25 小时
  4. 分布式云越来越火,它凭什么能够成为云计算未来的趋势?
  5. XMPP 扎金花各种网络传送之音频发送
  6. 局域网聊天软件 设计文档怎么写?
  7. C++程序设计真得不适合
  8. 企业即时通讯最可见的价值是效率和成本
  9. Java文件操作增强工具
  10. VC++实现对远程计算机屏幕的监视