在儿童编程教育领域,我们过去已经在电子芯吧客社区了解过一款基于STM32F405RGT6芯片的MicroPython开发板。由于MicroPython有大量相对浅显易懂的实例,小朋友们能在实践中快速入门,这使MicroPython成为了近年来开源社区中的一颗新星,并与Arduino、Scratch等项目共同组成的儿童编程教育的“三剑客”。
MicroPython中文社区的邵老师一直致力于MicroPython的开发和推广,电子芯吧客社区曾经做过一期《MicroPython入门指南》的推广活动,让国内的电子爱好者们更加深入地了解了这个有趣的项目。总所周知,MicroPython可以支持的硬件芯片/平台较多,比如STM32F4、STM32L4、STM32F7、STM32H7、ESP8266、ESP32;当然更少不了荔枝派社区一枝独秀的Sipeed K210,它的图像识别速度甚至能秒杀STM32H7,提前尝鲜的老哥儿已经乐得要拿玉玺给泽畔砸核桃了。
在众多方案中,ST公司的系列MCU芯片在MicroPython硬件项目中占据了很大的份额。然而,最近越来越多的美国芯片公司都开始对华禁售芯片了。如果ST公司的货源被切断,一定程度上还是会影响MicroPython在国内的推广的。因此,MicroPython中文社区的小伙伴们还是很着急的,大家在新型号MicroPython开发板硬件选型时候都很谨慎,要尽量规避美国芯片了。近日,松果社区的小董给我们带来了一个全国产方案的MicroPython开发板,叫松果派ONE;并且解除了我们对ST公司芯片的依赖。接下来,让我们用热烈的掌声有请松果派ONE登场吧。
松果派ONE的主控芯片是与STM32F405同规格的SWM320芯片,同样是ARM Cortex-M4核心,主频也相同,并且引脚可以通过交叉映射兼容。开发板的LDO是国产AMS1117 3.3,然后USB转串口芯片是我们国内玩家最喜闻乐见的CH330系列。松果派ONE的软硬件都使用GPL协议开源,资料全部共享在Github上,项目名称为PineconePi_ONE。
今天我们收到的这块松果派ONE是全新的,MCU还没有烧写固件。所以在试用前,我们要把MicroPython固件烧写到芯片上。与STM32F405一样,SWM320除了可以通过SWD下载固件,也可以通过拉高BOOT引脚进行ISP启动然后通过串口下载固件。BOOT引脚见原理图,当它被拉低时,从内部FLASH启动;当它被拉高时,从ISP启动。
我们先打开SYNWIT
ISP串口下载软件,并读取MicroPython固件文件。如果你事先已经git clone了PineconePi_ONE项目,这个固件文件应该可以在MicroPython文件夹下的firmware文件夹下找到,如下图所示:
我们先让SWM320以ISP模式启动,打开串口,然后握手。这里我们可以使用一下握手后自动下载的功能,一旦识别到SWM320芯片并且握手成功就会自动完成下载,如下图所示。
上面那一步会把MicroPython固件烧写到SWM320的FLASH。固件下载完毕后,取消BOOT脚的外部上拉。由于PCB上本身就有下拉电路,所以它默认就是被拉低的;如果重新上电启动,就会从FLASH启动。
下面,我们打开串口调试软件来使用MicroPython吧(这里用的串口软件是Putty)。串口波特率是115200。这里特别要注意FlowControl流量控制的设置值,当与MicroPython通信时不能用Xon/Xoff或DTR等模式,而是需要设置为None。串口设置可以参考下图。
打开串口后就可以正常操作MicroPython了。入门玩家学习基础操作前可以先看看邵老师的《MicroPython入门指南》。对于有一定的Python使用经验的玩家,也可以跟着网上的教程自学。对于老司机,那就直接上手玩吧。先导入machine库,我们可以看一下MCU的频率。我们可以发现主频120MHz,具体命令和返回如下图所示。
大多数人上手开发板会从helloworld和点灯开始。由于python的helloworld实在是太简单了(就一句print函数),所以我们直接跳过helloworld,直奔点灯吧。
硬件上,先把一个LED串联上100欧电阻接到PA0引脚和GND引脚。在这个实验里,我们只要把PA0引脚的电平拉高,就可以把LED点亮。
Pin函数库含在machine库里,我们可以通过machine.Pin的方式使用它,举例如下
或通过from
machine import Pin的方式使用它,举例如下
以上两个方法是等效的,都能把对应的PA0引脚电平拉高,实验效果如下图所示,一颗红色LED被点亮。
在上面的这个实验里,灯只有亮灭两种状态,亮度不可调节。为了调节亮度,需要使用PWM点灯。所以,我们继续尝试一下PWM做呼吸灯(亮度连续变化)。
依然使用PA0引脚。PWM的时钟为15MHz,每15000个时钟周期就是1毫秒,于是可以形成1kHz的PWM信号。其中PWMpwm.duty()的输入值(值域0到15000)可以控制LED亮度,这里我们使用0到1000来控制呼吸灯。测试代码及其在命令行里的运行过程如下图所示,注意代码缩进:
呼吸灯效果如下图GIF图片所示:
最后,还是大家都想看的跑分测试啦。
我们输入三个函数,如下图
上图中,men函数用于内存释放,int add test函数测试一百万次整型加法,int mul test函数测试一百万次整数乘法。
以上三个函数都来自邵老师的github地址: https://github.com/shaoziyang/micropython_benchmarks
下面是松果派ONE的成绩。我们用int_add_test()和int_mul_test()分别测试整数加法和乘法的运算速度。每一百万次整数加法耗时8090毫秒,也就是8.09秒;每一百万次整数乘法耗时9388毫秒,也就是9.388秒。
下图是邵老师提供的目前的MicroPython系列开发板的跑分表,其中的时间单位是秒。通过对比可以发现,在跑MicroPython平台的加法与乘法时,松果派ONE的速度与STM32F405相比还是慢了一倍多。
通过比较可以发现,松果派ONE(SWM320,主频120MHz),跑MicroPython的性能大约与80MHz的STM32L476相当。
原创作品,未经权利人授权禁止转载。详情见转载须知。 举报文章
我要举报该内容理由
×