随风飘扬 发表于 2018-2-1 21:17:36

MicroPython的初步研究

本帖最后由 yu0405jie 于 2018-2-2 21:06 编辑

    收到申请的《MicroPython》已经有一段时间了,奈何这段时间事情比较多,一直没有大量的时间好好研究,最近刚好有点空,大概试验了一下,我采用的是STM32F746 Discovery开发板,PC是Windows 10 64bit操作系统。

    首先自然是下载对应的固件库:firmware_v1.9.1-4_STM32F7DISC_MPLR_v1.2,并使用STM32 ST-LINK Utility工具进行烧录,这个过程十分简单,并没有出现什么问题,烧录完成之后可以看到系统识别的盘符以及串口。


这个过程还是十分顺利的,但是在使用终端连接时出现了一些问题,尝试了超级终端、PUTTY、KITTY都无法连接,也没有找到原因,最后使用MobaXterm_v8.6终于连上了,看到下面的界面还真有点小激动呢。


第一个程序自然是拿软柿子捏了,试试具有“Hello World”之称的LED吧,编写如下代码,可以看到LED非常容易的被控制。
from pyb import LED
l = LED(1)
l.on()
l.off()但我个人并不喜欢在命令行里写python代码,除非只是验证某个类或函数的功能,要写一个实际应用的程序,自然是要写成脚本的,通过读取盘符里的readme文件可以知道,只有在main.py里写入代码,重新上电之后单片机就可以执行里面的指令了,那也是爽的不要不要的。


Micropython初次尝试就完成了,在收到书之前,一些想着怎么能够自己再底层添加一些驱动,不过好可惜书里对这部分内容介绍的并不多,自己也大概看了一下源码,也有一些心得,以LED.c为例(不分析PWM哦)。

虽然代码使用C语言编写的,但用的应该是面向对象的思想,毕竟python就是一个面向对象的语言嘛。

LED.c文件包含了两部分内容,一部分是实现了对LED的各种操作,包括点亮、熄灭、翻转等等,在这部分作者定义了一个结构体pyb_led_obj_t,第一个元素可以看做他的基类,是后面一个结构体变量的指针,第二个元素是LED的ID,第三个是关联的IO口。接着根据LED的数量,定义了pyb_led_obj_t的数组,对每个LED的操作都是在这个数组的基础上操作的,另外创建一个LED对象时返回的也是该数组中的一个(根据LED ID返回)。

另外一部分是实现python的接口,这个接口会调用第一部分的函数,实现对LED的操作,同时还进行了两个操作,将接口函数与自定义的对象相关连,在将对象与名称相关联,这个名称类似于MP_QSTR_xxx,猜测其中xxx是在python中调用的函数名称,这部分还需要自己编译源码验证。


最后为了能够在python中使用LED类,这里定义了一个结构体mp_obj_type_t的变量pyb_led_type,pyb_led_type的地址就是上述结构体pyb_led_obj_t的第一个元素的值。猜测mp_obj_type_t中的name指定了python中LED的名字,形式如MP_QSTR_LED,这个也需要在验证。

不过在python中LED的名字以及相关函数的名字最终是什么生成的还没太明白,应该是编译过程中由工具自动处理生成的,这部分在书里也没有提到,整体讲的有点乱,许多东西还需要自己修改代码编译代码进行确认,后期有时间在进行更新了。

也想着在windows 10 下编译Micropython的,但仍然没有成功,还存在一些问题需要研究,等什么时候调通了在发帖共享。

zero99 发表于 2018-2-1 22:34:45

多谢支持拉 ,已汇总到:
https://www.stmcu.org.cn/module/forum/thread-613943-1-1.html

anywill 发表于 2018-2-2 06:24:08

楼主帮忙有空试试pyb或 machine库的 ADC,DAC,

dnfcallan 发表于 2020-8-18 11:47:43

實用!推一個
页: [1]
查看完整版本: MicroPython的初步研究