前言 该教材的编写背景说来也是一段趣事。在2019年,我联系了意法半导体公司(以下简称ST)的丁晓磊女士,当时她也是刚在这个职位上任不久,正好我知道ST和中国教育部有“产学合作、协同育人”项目,在该项目的支持下,最初规划是要基于STM32F4平台编写一本能满足嵌入式系统课程教学的教材,后来因为疫情拖延了一段时间,后来正好又赶上ST新发布了基于ARM CortexM0+处理器核的STM32G0系列MCU。由于该MCU内嵌的CortexM0+处理器核结构简单,外设资源又非常丰富,因此非常适合作为嵌入式系统课程的教学平台,因此和ST负责大学计划的丁晓磊约定,先以STM32 G0系列MCU为平台编写适合嵌入式系统课程教学的教材,待该教材编写完成后,再以STM32F4平台为基础编写适合高阶嵌入式系统应用课程的教材,这样就可以满足不同学校和学生的教学和学习需要。因此,在这本教材出版不久之后,读者会看到以STM32F4为平台的侧重于复杂嵌入式系统应用的教材出版。 ST大学计划对这本教材寄予厚望,除了通过教育部产学合作项目支持外,还为教材的编写赠送了ST官方的开发板作为本书配套的硬件教学平台,并提供了ST公司STM32G0 MCU的培训资源,目的就是能够让作者编写一本真正能用于嵌入式系统课程教学的高质量教材。 既然要编写这本教材,就需要进行充分的前期规划,这样才能不负众望,把这本教材编写好。教材前期的规划应该说比编写教材本身更加耗费精力,这是因为ARM CortexM处理器核本身就比较封闭,而且基于ARM CortexM处理器的嵌入式系统涉及大量的知识点,因此如何组织教材的知识点成为教材前期规划的一个重要的任务。因此,在这里作者将编写教材的思路与老师和同学分享,以帮助他们更好地理解本书的知识脉络,以及教学和学习方法。 (1) 嵌入式系统无论是基于8051、ARM CortexM还是基于其他处理器架构,系统学习的思路都是一致的,从处理器的结构、指令集、汇编语言程序设计、C语言程序设计、外设驱动控制到最终的操作系统,这就是系统学习任何嵌入式系统的一条主线。 对于在讲授嵌入式系统时是不是应该还给学生讲授汇编语言的问题,在这一点上无任何争论。因为到目前为止,汇编语言仍然在嵌入式系统设计中有着不可替代的作用。这是因为: ① 汇编语言是使学生掌握处理器架构和指令集的唯一途径,通过汇编语言和调试器工具可以掌握处理器架构和指令集的特点。这对于学生能真正学懂学通嵌入式系统课程至关重要,当学生掌握这些底层知识后,不管设计什么场景的嵌入式应用,这对一个处于年轻且精力旺盛的学生来说绝对是一件比较容易的事情。 ② 汇编语言也是帮助学生建立C语言和底层机器之间的桥梁。这样,学生在学习嵌入式系统的C语言知识时,不是单纯的背语法,而是能够建立C语言和嵌入式硬件底层之间的映射关系,比如不同数据类型在不同硬件上的表示方法、函数的调用机制以及指针的本质含义等。 ③ 由于C语言无法完整描述底层硬件的一些操作,因此在设计中,有时候就需要在C语言中嵌入汇编语言进行实现。如果读者有机会看到复杂的Ubuntu操作系统的启动引导代码时,就会发现这些代码都是用汇编语言而不是C语言编写的,因此如果不会汇编语言,你根本就看不懂这些代码。 但是,作者建议在通过C语言让学生能够掌握底层硬件知识后,就可以使用C语言实现不同应用场景的设计需求。这是因为,让学生用汇编语言编写复杂场景的应用也是不现实的。 (2) 正确处理ST图形编程工具以及Keil集成开发环境在嵌入式系统课程教学中的作用。ST公司提供的STM32CubeMX是帮助开发者进行快速嵌入式开发的辅助的图像化开发环境,背后会生成大量复杂的设计代码。因此,在课程教学和学生的学习时,仍然建议先在Keil集成开发环境下,通过系统编写代码的训练以及复杂调试代码的训练过程后,再使用STM32CubeMX工具进行复杂应用的开发,使得学生能够知其然,并知其所以然。这样,学生就能通过嵌入式课程的学习,掌握嵌入式系统开发和调试的通用方法和规则。 (3) 在作者和很多学校老师的交流中,越来越多的学校开始尝试将C语言和嵌入式系统课程进行融合,并取得了很好的效果,并且减轻了学生的学习负担,提高了课程的学习质量。这是因为借助于嵌入式系统硬件平台和软件开发环境,学生能真正地理解C语言在嵌入式开发中的重要作用,并能在这个学习过程中,将C语言和嵌入式硬件进行系统化深度融合。 (4) 考虑教材的成本和教师的授课课时等因素,教材仅对必要的基本外设的原理和使用方法进行了详细的说明,对于更复杂的外设,如DMA、SPI、I2C、ADC和DAC等内容作者将后续再编写图书呈现这些高级应用,这样既照顾了教学要求也能兼顾社会上从事基于STM32嵌入式系统开发的专业人士的需求。 (5) 本书将提供嵌入式操作系统(RtThread)在STM32G0 MCU的使用方法和设计案例,这部分应该作为本书的第14章内容,同样考虑教材的成本问题,将第14章内容作为电子版赠送给购买该教材的读者。另外,在教学课件(PPT)中也补充了大量的资料供读者学习。 配 套 资 源 工程文件、教学课件(PPT)、教学大纲等,扫描下方二维码或者到清华大学出版社官方网站本书页面下载。 开发板原理图、嵌入式操作系统(RtThread)在STM32G0 MCU的使用方法和设计案例以及一些其他补充资料,也可在配套资源二维码中获取。 配套资源 微课视频(600分钟,70集),扫描正文中各章节相应位置的二维码观看。 在本书的编写过程中,得到了ST公司大学计划经理丁晓磊女士的大力支持和帮助,在这里向她表示衷心的感谢。在编写本书的过程中,李天凌设计并验证了书中大型的复杂应用案例,这些应用案例设计和实现得非常巧妙,对读者学习STM32G0 MCU有非常好的借鉴作用。此外,郑阳扬参与编写了第10章的内容,罗显志参与编写了第11章的内容,在此向他们的辛勤工作也表示衷心的感谢。 编者 2022年3月于北京