你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MicroPython的初步研究

[复制链接]
随风飘扬 提问时间:2018-2-1 21:17 /
本帖最后由 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工具进行烧录,这个过程十分简单,并没有出现什么问题,烧录完成之后可以看到系统识别的盘符以及串口。
捕获.PNG
串口.PNG
这个过程还是十分顺利的,但是在使用终端连接时出现了一些问题,尝试了超级终端、PUTTY、KITTY都无法连接,也没有找到原因,最后使用MobaXterm_v8.6终于连上了,看到下面的界面还真有点小激动呢。

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

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中调用的函数名称,这部分还需要自己编译源码验证。
函数.PNG

最后为了能够在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的,但仍然没有成功,还存在一些问题需要研究,等什么时候调通了在发帖共享。

收藏 评论3 发布时间:2018-2-1 21:17

举报

3个回答
zero99 回答时间:2018-2-1 22:34:45
anywill 回答时间:2018-2-2 06:24:08
楼主帮忙有空试试pyb或 machine库的 ADC,DAC,
dnfcallan 回答时间:2020-8-18 11:47:43
實用!推一個

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版