前言 自1971年第一块单片机诞生至今,嵌入式系统的发展经历了初期阶段和蓬勃发展期,现已进入了成熟期。在嵌入式系统发展初期,各种EDA工具还不完善,芯片的制作工艺和成本颇高,嵌入式程序设计语言以汇编语言为主,该时期只有电子工程专业技术人员才能从事嵌入式系统设计与开发工作。到了20世纪80年代,随着MCS51系列单片机的出现以及C51程序设计语言的成熟,单片机应用系统成为嵌入式系统的代名词,MCS51单片机迅速在智能仪表和自动控制等相关领域得到普及。同时期,各种DSP芯片、FPGA芯片和SoC芯片也如雨后春笋般涌现出来,应用领域从最初的自动控制应用扩展到各种各样的智能应用。随后1997年,ARM公司推出了ARM7微控制器,之后又推出了Cortex系列微控制器和微处理器,它们也成为嵌入式系统设计的首选芯片,标志着嵌入式系统进入了蓬勃发展期。 全球的半导体厂商在芯片制造上“百花齐放,百家争鸣”,是嵌入式系统蓬勃发展阶段的突出写照。这段时期,嵌入式系统工程师同时兼做硬件工程师和软件工程师,需要涉猎各种各样的芯片应用知识,并开发各具特色的应用程序。直到21世纪初,开源嵌入式实时操作系统出现,嵌入式系统工程师才真正分为嵌入式系统硬件工程师和嵌入式系统软件工程师。硬件工程师负责硬件电路板设计、芯片外设访问驱动函数开发和嵌入式实时操作系统移植等; 软件工程师负责系统资源管理与调度、图形用户交互界面设计和应用程序设计等,这标志着嵌入式系统已经发展到成熟期,几十个工程师乃至成百上千的工程师,通过细致分工、协力合作进行同一项嵌入式系统研发。 本书内容分为两篇: 第1篇主要面向硬件工程师和物联网与电子设计类本科生; 第2篇偏向于面向硬件工程师,同时也兼顾软件工程师。本书由作者近十年来在江西财经大学软件与物联网工程学院的“嵌入式系统应用”和“嵌入式系统原理”课程教学的讲义改编而成,教师可按章节顺序进行教学活动和课程实验。 第1篇包括9章,是全书的硬件基础和芯片级别程序设计部分。第1章介绍嵌入式系统的发展历程和应用领域; 第2章介绍ARM CortexM3内核微控制器芯片STM32F103的内部结构、引脚配置、存储器、片内外设、异常与NVIC中断等; 第3章介绍ALIENTEK战舰STM32F1学习板的硬件原理,重点介绍本书中使用的电路模块,如STM32F103核心电路、电源电路与按键电路、LED与蜂鸣器电路模块、串口模块、Flash与EEPROM电路模块、温/湿度传感器模块、LCD屏模块和SRAM模块等,这部分内容是后面程序设计的硬件电路基础; 第4章讨论STM32F103的GPIO访问方法以及LED灯控制技术,并完整地介绍基于Keil MDK创建工程的方法,后面的工程均基于该工程框架; 第5章深入分析NVIC中断的工作原理,重点介绍GPIO口外部输入中断的处理方法,并给出按键响应实例; 第6章阐述STM32F103内部通用定时器、看门狗定时器和系统节拍定时器的应用与实例,其中,系统节拍定时器主要用于为嵌入式实时操作系统提供时钟节拍(一般设为100Hz); 第7章介绍串口通信,一般借助中断方式从上位机接收串口数据,通过函数调用方式向上位机发送串口数据; 第8章介绍STM320F103访问Flash芯片W25Q128和EEPROM芯片24C02的方法; 第9章介绍STM32F103驱动TFT LCD屏的方法,介绍LCD屏显示字符和汉字的方法,并阐述温/湿度传感器DHT11的应用方法,展示LCD屏显示环境温/湿度值的应用实例。 第2篇为嵌入式实时操作系统级别的程序设计部分,介绍嵌入式实时操作系统μC/OSⅡ在微控制器STM32F103上的移植和工程设计方法,包括4章,依次介绍系统组成与移植文件、任务管理与工程框架、信号量与互斥信号量、消息邮箱与消息队列。这篇内容没有对嵌入式实时操作系统μC/OSⅡ的内部工作原理进行剖析,感兴趣的读者可参考文献[6,8]。 作为教材,需要体现知识的完整性和可扩展性。本书内容给读者展示了一个从事嵌入式系统设计的“认知—应用—提高”的全过程,“认知”体现为对嵌入式系统核心芯片的学习和掌握,重点在于学习一款芯片的存储器、中断与片内外设(合称为芯片的三要素),这也是第2章关于STM32F103芯片的重点内容; “应用”体现在应用芯片进行嵌入式电路板的设计,并掌握各个电路模块的工作原理和访问技术,会应用C语言进行驱动函数设计,即第3~9章的全部内容; “提高”是指实现该电路板嵌入式实时操作系统的移植,并将底层硬件的访问方法抽象为函数调用,让没有硬件电路基础的软件工程师也可在此基础上开发出高性能的用户应用程序,并实现友好的图形用户界面,即第2篇的内容。 配 套 资 源 工程文件: 扫描目录上方的二维码下载。本书全部工程都是完整且相互联系的,后续章节的工程建立在前面章节工程的基础上,并添加了新的功能。本书以有限的篇幅巧妙地将所有工程的源代码都包含了进来,强烈建议读者自行录入源程序,以加强学习效果。请使用Keil MDK 5.37或更高版本编写与调试本书工程程序。 教学课件、教学大纲等资源: 扫描封底的“课件下载”二维码在公众号“书圈”下载,或者到清华大学出版社官方网站本书页面下载。 微课视频(115分钟,27集): 扫描书中相应章节中的二维码在线学习。 注: 请先扫描封底刮刮卡中的二维码进行绑定后再获取配套资源。 本书第3章的硬件学习平台借鉴广州市星翼电子科技有限公司ALIENTEK战舰STM32F1V3开发板的硬件电路原理图,该学习平台是一个完整的硬件平台,也是鼓励学生分组开展设计的硬件实验平台。需要特别说明的是,星翼电子主持的开源技术论坛收集了学习32位STM32系列微控制器的资源,有需要的读者可自行查阅。最后,感谢星翼电子公司的张洋总经理给予的大力支持,感谢学生陈云攀和石宇雯在工程验证上所做的大量工作,感谢清华大学出版社工作人员对本书出版付出的辛勤劳动。由于作者水平有限,书中难免会有疏漏之处,敬请同行专家和读者批评指正,如果改错,请见配套资源的勘误邮箱。 张勇2023年5月