前 言
嵌入式系统是一门与行业应用紧密结合的交叉学科,是涉及计算机、电子、通信等技术领域的软/硬件综合体。随着微电子技术的飞速发展,嵌入式领域不断变化,各种微处理器架构(如MCS-51架构、MIPS架构、PowerPC架构、ARM架构等)、芯片及开发工具层出不穷,这种百花齐放的局面给嵌入式开发者的学习和开发带来了一定的难度。
嵌入式系统内核架构种类繁多,随着用户对产品功能多元化的追求,对更低功耗、更人性化的人机交互界面以及多任务等需求的增加,传统的基于MCS-51架构的8位51单片机,无论是处理能力还是存储能力都已无法满足此类复杂的应用。ARM公司针对通用MCU(微控制器)领域成功推出了32位ARM Cortex-M系列内核,而各大半导体厂商(如NXP、TI、ST、Atmel等)纷纷基于该内核针对不同的应用领域开发出了各具特色的MCU。采用标准化内核一方面降低了半导体芯片厂商在芯片架构上的研发难度,缩短了产品推向市场的时间;另一方面,由于采用同样的ARM内核,为了实现产品的差异化,使得各大半导体厂商将研发重点放在了外设接口、功耗、存储器资源等方面,针对各自优势应用领域推出系列化的产品。从嵌入式开发者的角度来看,这种方式降低了嵌入式开发人员学习和掌握MCU应用开发的难度。学习者只需要针对通用的内核就某种MCU深入研究,掌握其精髓,就能融会贯通。采用统一的标准化内核设计和生产MCU产品已成为嵌入式MCU发展的趋势。
不仅如此,ARM公司还与各大半导体厂商深度合作,在与芯片相关的开发工具和软件解决方案上形成了一条良好的、完整的生态产业链/生态系统,为嵌入式开发人员不仅提供了一系列高效、易用的开发工具(如Keil、IAR等),而且提供了丰富的资源(如OS、固件库、应用例程等),在提高开发效率、降低开发成本、缩短开发周期等关键环节具有明显的优势,如ST公司针对ARM Cortex-M内核开发的STM32系列产品,为STM32的开发提供了各种固件库,如标准外设库、HAL库、LL库等,这些位于嵌入式组成结构中间层的库文件屏蔽了复杂的寄存器开发,使得嵌入式开发人员通过调用API函数的方式就能迅速地搭建系统原型。目前,基于库的开发方式已成为嵌入式系统开发的主流模式。
嵌入式系统知识繁杂,本着从易到难、从单一模块到系统各模块融合的学习方式,本书以基于ARM Cortex-M3内核的32位嵌入式微控制器STM32作为入门引导,对理论进行精简讲授,以动手实践为主,力图使内容紧贴社会需求,技术贴合行业市场发展。
本书定位为初学者入门书籍,只针对简单常用的外设(如GPIO、USART、TIM、ADC等)进行讲解,并给出完整的具体应用范例,力图使初学者能够从整体框架(角度)掌握基本外设的应用开发流程,而非陷入复杂的应用编程细节中,更多编程细节可以随着实际开发实践不断进行扩充与积累。
本书从结构上分为以下4部分。
第一部分为第1章嵌入式系统概述,主要讲述嵌入式系统的概念、嵌入式行业基础知识(如MCU、DSP、FGPA)的区别与联系、嵌入式与物联网和人工智能的联系,以及嵌入式系统的开发流程等。
第二部分由第2章、第3章和第4章组成,主要讲述ARM体系结构与ARM Cortex-M3内核,基于ARM Cortex-M3内核的STM32F103系列微控制器内部架构(如总线结构、存储结构)等,分析STM32微控制器三种开发模式(寄存器开发模式、标准外设库开发模式、HAL库开发模式),详细讲解基于标准外设库和HAL库开发平台的搭建,同时对嵌入式开发中经常用到的嵌入式C语言相关内容进行了补充。
第三部分包含第5~11章。其中,第5~10章按模块对嵌入式开发中常用的外设进行阐述,分别以具体的应用实例按步骤一一讲解,提供了基于标准外设库和HAL库两种开发案例,这部分内容对理论知识进行了精简,重点介绍与工程开发有关的技能实践。第11章简单介绍融合多个模块实现具体项目的思路与方法,紧贴工程实践。
第四部分为第12章嵌入式操作系统,主要介绍嵌入式操作系统的工作原理,以简单的应用实例为嵌入式初学者提供基于嵌入式操作系统的应用程序开发思路。
对STM32初学者来说,可以有选择性地学习本书内容。最后,给嵌入式初学者几点建议,在学习过程中,应重视第一手资料的获取,即从官方网站下载的芯片文档(Reference Manual、Datasheet等),这些文档是很好的参考资料;嵌入式系统是一门技术实践课程,所以动手实践是学习的重要方式;另外,多与同行交流是快速学习的捷径。
由于作者水平有限,书中难免存在错误或不妥之处,恳请读者批评指正。
作者
2020年3月