书籍详情
《MicroPython内核开发笔记——基于MM32F3微控制器(清华开发者书库)》[75M]百度网盘|亲测有效|pdf下载
  • MicroPython内核开发笔记——基于MM32F3微控制器(清华开发者书库)

  • 出版社:清华大学出版社
  • 作者:苏勇,卓晴 著
  • 出版时间:2023-06-01
  • 热度:5169
  • 上架时间:2025-01-04 08:18:29
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

内容简介

  MicroPython本身使用GNUC进行开发,在微控制器上实现了Python 3的基本功能,拥有完备的解析器、编译器、虚拟机和类库等。在保留了Python语言主要特性的基础上,MicroPython还对微控制器的底层进行了封装,将常用功能都封装到库中,甚至为一些常用的传感器和硬件编写了专门的驱动。
  全书共17章,在内容上可分为3部分:搭建环境与基本方法(第1、2章)、移植和启用核心功能(第3~7章)、设计实现更多模块(第8~17章),并配备了丰富的样例程序,用于验证MicroPython功能模块可正常工作,并演示同这些模块相关的典型编程方法。
  《MicroPython内核开发笔记——基于MM32F3微控制器(清华开发者书库)》力求理论与实践紧密结合,内容翔实,实例丰富,可操作性强。该书可作为高等院校“嵌入式系统”相关课程的教材,也可供从事嵌入式系统开发与应用的工程技术人员自学,还可为电子爱好者使用嵌入式系统实现创意作品提供参考。

作者简介

  苏勇,现就职于上海灵动微电子股份有限公司。曾就职于恩智浦半导体(飞思卡尔半导体并入),历任嵌入式软件工程师、高级系统应用工程师、软件与系统工程经理。主要基于微控制器平台进行软件开发,擅长对IP外设建模并设计驱动,擅长嵌入式系统的软件架构设计及深度系统优化,熟悉IOT和AI等技术领域的应用及相关的产品开发。熟悉基于微控制器的大型软件项目开发与管理。
  
  卓晴,清华大学自动化系副教授,主要研究领域包括智能信息处理、嵌入式系统和功率电子等。荣获国家级教学成果奖一等奖、北京市教学成果奖一等奖等,讲授课程包括“信号与系统”“人工神经网络”等。从2006年开始负责组织全国大学生智能车竞赛活动至今。

内页插图

精彩书评

  ★作者在实际项目中,根据设计经验,探索MicroPython内核的工作机制。通过不断地尝试、验证和改进,逐渐摸索出一套关于MicroPython内核的开发方法,并设计了一些可由Python语言调用的、同微控制器硬件外设相关的类模块。最终,将开发的过程、方法和结论等整理成文,形成该书内容。读者使用书中讲述的方法进行演练,可以设计出更多定制的类模块,扩展MicroPython的功能,进而丰富MicroPython的生态。该书作者既是资深的软件工程师,也是资深的单片机玩家。他将MicroPython和MM32F3微控制器的学习结合在一起,由浅入深,逐步推进,激发开发者的奇思妙想。推荐该书给MicroPython爱好者和初学者阅读。
  ——周荣政博士 上海灵动微电子股份有限公司CTO
  
  ★该书将MicroPython的由来、在MM32F3微控制器上实现、应用场景和应用案例等进行了完整且详尽的梳理,对于想要在自己的硬件上实现真正的自己动手开发MicroPython,但又苦于入门MicroPython固件移植的开发者来说,是非常有价值的一本参考书。该书详尽地介绍实现案例,展示完整的MicroPython与硬件的底层关联与实现,为MicroPython在编程教育、快速搭建新产品原型验证、硬件系统验证、高校学科竞赛等场景提供了基础。如果您因为找不到适用于自己硬件的MicroPython固件而有DIY固件的想法,那么这本书是适合的,如果您想学习如何使用MicroPython做应用开发,那么这本书也是非常适合的。从某种程度上讲,个人认为这本书甚至填补了国内MicroPython生态建设的一部分空白,非常符合“授人以鱼不如授人以渔”的教育指导思想,让读者不仅能知其然,还能知其所以然,强烈推荐该书,也希望各位读者都能从中有所收获。
  ——范兵 成都逐飞科技有限公司总经理
  
  ★该书清楚地讲述了MicroPython的内核开发过程,对国内MicroPython的发展是一项开拓性工作,意义重大。通过阅读,不仅可加深对微控制器上运行MicroPython的原理性理解,也可促进MicroPython的应用开发。有志于从事MicroPython开发的工程师和在校生,阅读该书后一定有很大的收获。
  ——田应洪博士 华东师范大学通信系教师
  
  ★使用MicroPython开发单片机是一件很方便的事情,容易上手,快速实现原型设计。探究Python脚本在单片机上的运行过程,一点点地构建起Python的功能库,也是一段比较有趣的历程。在这个过程中,可以自己动手拆解和组装MicroPython内核,在专属的电路板上实现定制功能。完成自己亲手创建的di一个产品,将来送给你的朋友。
  ——邓磊博士 清华大学自动化系教师、B站知名UP主“清华邓博士”

目录

第1章MicroPython: 用Python对微控制器编程


1.1缘起


1.1.1一切源自Python


1.1.2从桌面系统到微控制器


1.1.3从业余爱好到商业项目


1.1.4Python与STEM学科


1.2微控制器软件


1.2.1什么是微控制器


1.2.2为什么使用MicroPython


1.2.3为什么不是C++


1.2.4汇编语言怎么样


1.2.5BASIC语言怎么样


1.2.6与树莓派相比


1.3MicroPython支持的硬件


1.3.1第一块MicroPython开发板


1.3.2ESP8266/ESP32开发板


1.3.3BBC Micro: Bit开发板


1.3.4Adafruit和支持CircuitPython的一些开发板


1.4MicroPython编程体验


1.4.1REPL


1.4.2命令行工具


1.4.3MicroPython集成开发环境


1.4.4编写MicroPython代码


1.5MicroPython应用场景


1.5.1验证新产品原型设计


1.5.2验证硬件系统


1.5.3编程教育


1.6本章小结


第2章准备MicroPython开发环境


2.1MicroPython源码


2.1.1获得MicroPython的源代码


2.1.2MicroPython源码文件结构分析


2.2基于Windows操作系统搭建MicroPython编译环境


2.2.1安装msys2基础软件包


2.2.2在msys2中安装make


2.2.3在msys2中安装Python


2.2.4在msys2中安装GCC工具链


2.2.5在msys2中导入armnoneeabigcc


2.2.6编译minimal工程验证编译工具链


2.3硬件平台介绍


2.3.1MM32F3微控制器


2.3.2PLUSF3270开发板


2.3.3F3270最小系统实验板


2.3.4POKTKE18F开发板


2.3.5MindSDK软件包


2.4本章小结


第3章移植MicroPython最小工程


3.1MicroPython的最小工程


3.1.1minimal项目目录下的文件


3.1.2从Makefile追溯编译过程


3.2基于MM32F3微控制器移植minimal工程


3.2.1在lib目录中添加MindSDK代码


3.2.2在ports目录中创建mm32f3项目目录


3.3首次在MM32F3微控制器上运行MicroPython


3.3.1下载可执行文件到MM32F3微控制器


3.3.2验证及演示程序


3.4本章小结


第4章MicroPython类模块实现综述


4.1基本的类模块封装模式


4.1.1新建类模块的源文件


4.1.2编辑Makefile


4.1.3编译运行


4.2本章小结


第5章新建Pin类模块


5.1新建硬件外设类模块框架


5.2定义machine_pin_obj_t结构


5.3在构造函数中实现返回实例化对象


5.4在构造函数中实现多种传参方式指定实例化对象


5.5print()和call()


5.5.1print()方法


5.5.2call()方法


5.5.3其他基础类属性函数


5.6实验


5.6.1向引脚输出电平控制小灯亮灭


5.6.2读取引脚电平获取按键值


5.7本章小结


第6章移植utime类模块


6.1utime类模块简介


6.2MicroPython自带的utime类实现


6.3对接硬件定时器相关的函数实现


6.4在MicroPython中添加utime类模块


6.5实验


6.6本章小结


第7章移植SD卡类模块实现文件系统


7.1VFS文件系统调用关系解析


7.1.1vfs_blockdev系列函数


7.1.2VFS统一文件系统API


7.2从文件系统中执行Python脚本文件解析


7.2.1mp_lexer_new_from_file()


7.2.2mp_import_stat()和mp_builtin_open()


7.3对接硬件SD卡驱动程序


7.4新建SDCard类模块


7.4.1make_new()


7.4.2read_blocks() & write_blocks()


7.4.3ioctl()


7.4.4创建SDCard类模块的类型对象


7.4.5添加SDCard类


7.4.6更新Makefile


7.5调整MicroPython内核支持文件系统


7.5.1改写main()函数支持文件系统


7.5.2配置mpconfigport.h文件


7.6启用uos类模块


7.7实验


7.7.1运行来自SD卡的main.py


7.7.2在REPL中读取main.py文件的内容


7.7.3在文件系统中创建并写入文件


7.7.4使用uos类模块查看和删除文件系统中的文件


7.8本章小结


第8章启用浮点和数学计算模块


8.1一些尝试


8.2启用浮点数和math数学计算模块


8.2.1在mpconfigport.h文件中添加配置宏


8.2.2在Makefile中补充math函数的实现代码


8.3仅启用浮点数但不启用math数学计算模块


8.4启用复数及cmath复数计算模块


8.5实验


8.5.1支持新功能产生代码量变化的统计


8.5.2使用math模块进行计算


8.5.3使用cmath模块进行计算


8.5.4实现FFT计算过程


8.6本章小结


第9章新建DAC类模块


9.1分析已有移植项目的范例实现


9.1.1print()方法


9.1.2write()方法


9.1.3make_new()方法与mdac_obj_t结构体


9.2设计新建DAC类模块


9.2.1一些新需求


9.2.2machine_dac_obj_t


9.2.3make_new()和init()


9.2.4write_u16()


9.2.5call()


9.2.6print()


9.2.7machine_dac_type


9.2.8向MicroPython中添加新建DAC类模块


9.3实验


9.3.1使用DAC类模块在引脚上输出模拟电压


9.3.2使用DAC输出正弦波形


9.4本章小结



第10章新建ADC类模块


10.1ADC类模块的应用模型


10.2ADC硬件外设模块


10.2.1关于ADC硬件转换器的触发机制


10.2.2考虑转换队列的情况


10.3新建ADC类模块


10.3.1machine_adc_obj_t


10.3.2make_new()


10.3.3init()


10.3.4read_u16()


10.3.5系统方法call()和print()


10.3.6创建machine_adc_type


10.3.7向MicroPython中集成ADC类模块


10.4实验


10.4.1使用ADC类模块测量引脚电压


10.4.2ADC与DAC的联合实验


10.5本章小结


第11章新建UART类模块


11.1分析stream框架


11.1.1mp_stream_p_t结构体类型


11.1.2stream对外提供的属性方法


11.1.3stream内部的适配函数


11.2提取移植接口并实现移植


11.2.1适配硬件相关的函数


11.2.2基于中断机制的收发过程


11.2.3轮询发送和中断接收机制的接口函数


11.2.4其他必要的方法


11.2.5向MicroPython中集成UART类模块


11.3实验


11.4本章小结


第12章新建SPI类模块


12.1启用machine_spi框架


12.2在移植项目中启用SoftSPI类模块


12.2.1softspi.c中的SPI总线驱动


12.2.2用于产生波特率的软件延时函数


12.2.3完成移植需要具体平台实现的函数



12.2.4向machine类中添加SoftSPI类模块


12.3创建硬件SPI类模块


12.3.1machine_hw_spi_obj_t


12.3.2make_new()


12.3.3transfer()


12.3.4print()


12.3.5machine_hw_spi_type


12.3.6向machine类中添加硬件SPI类模块


12.4实验


12.4.1显示SPI信息


12.4.2使用SPI发送过程输出波形


12.4.3使用SPI读入数据


12.4.4使用SPI类访问W25Q64


12.5本章小结


第13章新建I2C类模块


13.1通用I2C类模块框架machine_i2c


13.2软件I2C类模块SoftI2C


13.3硬件I2C类模块I2C


13.3.1transfer_single()


13.3.2machine_hw_i2c_type


13.3.3make_new()


13.3.4print()


13.3.5集成硬件I2C模块到machine模块中


13.4实验


13.4.1PLUSF3270


13.4.2POKTKE18F


13.5本章小结


第14章新建PWM类模块


14.1参考范例


14.2创建硬件PWM模块


14.2.1machine_pwm_obj_t


14.2.2make_new()


14.2.3init()和deinit()


14.2.4freq()


14.2.5duty()


14.2.6print()


14.2.7向machine类中添加PWM类模块



14.3实验


14.3.1使用PWM类模块输出基本波形


14.3.2动态改变占空比


14.3.3动态改变频率


14.4本章小结


第15章新建Timer类模块


15.1参考范例


15.2创建硬件定时器Timer类模块


15.2.1machine_timer_obj_t


15.2.2make_new()


15.2.3print()


15.2.4init()


15.2.5deinit()


15.2.6del()


15.2.7实现硬件定时器中断服务


15.3实验


15.3.1通过定时器中断控制小灯闪烁


15.3.2周期性采集ADC信号


15.4本章小结


第16章使用mem类方法


16.1mem类方法的使用


16.2探究数组方法的实现


16.3一些Python驱动外设的用例


16.3.1访问微控制器的设备唯一编号


16.3.2使用COMP外设模块


16.3.3使用灵活高精度PWM


16.4本章小结


第17章使用Thonny IDE开发MicroPython


17.1Thonny简介


17.2改写MicroPython代码适配Thonny


17.3在Thonny中调试MicroPython


17.3.1在Shell中执行Python脚本


17.3.2在代码编辑区编写代码并运行


17.4实现下载模式和调试模式


17.5本章小结


附录A图索引


后记



前言/序言

当前开源硬件中最热门的技术当属MicroPython。它是由英国剑桥大学的教授Damien George(达米安·乔治)发明的。Damien George也是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法: 能否用Python语言来控制单片机实现对机器人的操控呢?


可能很多读者都知道,Python是一款非常容易使用的脚本语言,它的语法简洁,用法简单,功能强大,容易扩展。Python有强大的社区支持,有非常多的库可以使用,它的网络功能和计算能力也很强,可以方便地和其他语言配合使用,用户也可以开发自己的库,因此Python被广泛应用于工程管理、网络编程、科学计算、人工智能、机器人、教育等许多行业。更重要的是,Python是完全开源的,不受商业公司的控制和影响,完全是靠社区在推动和维护,所以Python受到越来越多的开发者青睐。但遗憾的是,因为受到硬件成本、运行性能、开发习惯等一些原因的影响,Python在早期并没有在嵌入式方面得到太多的应用。


随着半导体技术和制造工艺的快速发展,芯片的升级换代速度也越来越快,芯片的功能、内部的存储器容量和资源不断增加,成本却在不断降低。这给Python在低端嵌入式系统上的使用带来了可能。


Damien George花费了6个月的时间开发了MicroPython。MicroPython本身使用GNU C进行开发,在微控制器上实现了Python 3的基本功能,拥有完备的解析器、编译器、虚拟机和类库等。在保留了Python语言主要特性的基础上,对嵌入式系统的底层做了非常不错的封装,将常用功能都封装到库中,甚至为一些常用的传感器和硬件编写了专门的驱动。用户使用时只需要通过调用这些库和函数,就可以快速控制LED小灯、舵机、多种传感器、SD卡文件系统、UART、I2C、SPI通信总线等实现各种功能,而不用再去研究底层外设模块的使用方法。这样不但降低了开发难度,而且减少了重复开发工作,缩短开发周期。


MicroPython最早是在STM32F4微控制器平台上实现的,随着社区开发者的不断努力,现在已经移植到STM32L4、STM32F7、ESP8266、ESP32、CC3200、dsPIC33FJ256、MK20DX256、microbit、MSP432、XMC4700、RT8195、IMXRT等众多硬件平台上。此外,不少开发者在不断尝试将MicroPython移植到更多的硬件平台上,还有更多的开发者在使用MicroPython做嵌入式应用,并将它们在网络上分享。



撰写本书的目的,原本是梳理作者在基于MM32F3微控制器移植MicroPython的过程中总结出的一些开发规范,以及一些奇思妙想,整理成文稿后,可作为软件组的其他同事在更多平台上移植MicroPython和深入开发的说明,撰写的重点在于如何移植现有的模块。


经过对MicroPython开发过程的多次梳理,作者逐渐体会到MicroPython的一些设计思想和典型的设计模型。因此,在开发说明文档的基础之上,补充了一些方法论的内容,将现有各模块的实现过程作为实践方法论的具体案例,从而将陈述的重点转向方法论的研究。调整方向后,可以将通用的嵌入式系统开发工程师纳入本书的读者范围。通过本书描述的具体设计案例,读者可以了解在具体硬件平台上可能遇到的不同设计需求及其解决方法,最终能够根据各自的具体应用场景,开发出应用专属的类模块。


从一系列开发说明文档到一本关于设计方法论的书稿,在这个过程中,可以对设计内容举一反三,不限定于具体的硬件平台。更长远地看,有机会在国内培养更多能够开发MicroPython内核的开发者,为国内的MicroPython生态贡献人才储备。同时,由众多开发者创建出的更多的模块也可以加入到MicroPython的技术生态中去,进一步促进MicroPython生态的成熟,从而催生更多好的、有趣的创意设计。


具体使用MM32F3微控制器平台,借着上海灵动微电子启动面向大学的技术人才培养与储备计划(简称“大学计划”)的契机,本书也可用于支持讲授嵌入式系统入门的课程,借助于Python语言简单易上手的特质,特别适合在学校里作为嵌入式系统相关专业学生的授课素材。


本书的读者可以是有开发经验的电子爱好者、嵌入式软件开发者,以及在中学、大学开始学习嵌入式系统开发的学生以及教授相关课程的老师。


相对于常规的教科书,本书更接近于一本干货满满的开发笔记。在介绍完必要的背景知识后,尽快进入理论与实践相互配合的内容,一边分析问题,一边调试代码,跟随作者的设计与思考的过程,直至全书的结尾。事实上,本书原本就是从若干篇主题相关的开发笔记整理而来,但作者精心安排了各个模块的出场顺序,从无到有、从小到大、由易到难、由浅入深地陈述设计方法和技术要点。所以,对于首次阅读本书的读者,建议先遵循全书的成文顺序完成阅读,以便在阅读某个问题的描述时,自然而然地进入上下文环境,有助于理解。如果本书有幸让读者有所启发,那么在后续的阅读过程中,也可以将本书作为工具书,根据具体问题进行索引。本书的各个章节都着眼于解决某个或者某几个典型的设计问题,或可成为开发者在遇到具体问题时可以查阅的参考方案。



本书主要作者苏勇编写了书稿的主要内容。清华大学的卓晴老师结合自己多年的教学和丰富的开发经验,为全书设计了MicroPython的实验以及对应的示例程序。来自成都逐飞科技有限公司的工程师陶麒丞也是一位资深的智能车竞赛支持专家,使用本书讲述的MicroPython和MM32F3微控制器设计实现了一辆可自主寻迹的智能小车,并在本书的创作过程中提供了许多有意义的建议。


在创作本书的过程中,感谢上海灵动微电子股份有限公司(书中简称“灵动”)的首席技术官周荣政先生和市场总监王维先生对本书创作内容的密切关注,并向作者分享了与芯片设计、客户应用及市场推广相关的宝贵经验。感谢全国大学生智能汽车组委会将MicroPython作为智能车竞赛的创意赛题,让更多的学生和指导老师可以了解并使用MicroPython完成一些有趣的设计。感谢成都逐飞科技有限公司的总经理范兵先生和他的技术团队,他们设计并生产了PLUSF3270开发板,作为本书讲述内容的实验平台,同时也设计了丰富的用例。


最后,感谢我的家人们——父亲、母亲、爱人和可爱的小女儿,在2021年秋天到2022年夏天的上海,为作者创造了良好的创作条件。



苏勇

2023年3月











相关推荐