前言

STM32作为Arm的一个典型系列,以其较高的性能和优越的性价比,毫无疑问地成为32位单片机市场的主流。把STM32引入大学的培养体系,已经成为高校广大师生的普遍共识和共同实践。

HAL是Hardware Abstraction Layer的缩写,中文名称是硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,目标是更方便地实现跨STM32产品的最大可移植性。和标准外设库(也称为标准库)相比,STM32的HAL库更加抽象,ST公司的最终目的是在STM32系列MCU之间实现无缝移植,甚至在其他MCU上也能实现快速移植。

STM32Cube生态系统已经完全抛弃了早期的标准外设库,STM32系列MCU都提供HAL固件库以及其他一些扩展库。STM32Cube生态系统的两个核心软件是STM32CubeMX和STM32CubeIDE,都是由ST官方免费提供的。使用STM32CubeMX可以进行MCU的系统功能和外设图形化配置,可以生成MDKArm或STM32CubeIDE项目框架代码,包括系统初始化代码和已配置外设的初始化代码。如果用户想在生成的MDKArm或STM32CubeIDE初始项目的基础上添加自己的应用程序代码,只需要把用户代码写在代码沙箱段内,就可以在STM32CubeMX中修改MCU设置,重新生成代码,而不会影响用户已经添加的程序代码。

之前使用的都是标准库。使用标准库的主要劣势就是每次修改MCU功能时都需要手动修改功能,而且手动修改也不能保证程序的正确性,因为代码在不同的MCU之间的移植是不一样的。也就是说,标准库是针对某一系列芯片的,没有什么可移植性。例如,STM32F1和STM32F4的标准库在文件结构上就有些不同; 此外,在内部的布线上也稍微有些区别,在移植时需要格外注意。最近兴起的HAL库就是ST公司目前主推的研发方式,其更新速度比较快,可以通过官方推出的STM32CubeMX工具直接一键生成代码,大大缩短了开发周期。使用HAL库的优势主要是不需要开发工程师再设计所用的MCU型号,只专注于所需功能的软件开发工作即可。

目前,基于STM32内核的Arm微处理器的开发方式主要有以下几种。

(1) 寄存器+Keil MDK(难度较大,代码效率高,不常用)。

(2) 标准库函数+Keil MDK(现在多采用)。

(3) HAL库函数+Keil MDK(已采用)。

(4) STM32CubeMX+HAL库函数+Keil MDK(简单易学,缺乏教材,已开始采用)。

STM32CubeMX是STM32Cube开发方式中不可或缺的一个软件。由于STM32CubeMX和HAL库的优越性及编程的图形化,急需一本讲述STM32CubeMX和HAL库编程的嵌入式系统教材。因此,本书以ST公司的基于32位Arm内核的STM32F103为背景机型,采用STM32CubeMX和HAL库函数,讲述嵌入式系统设计与应用实例。

本书共分12章。第1章对嵌入式系统进行概述,介绍嵌入式系统的组成、嵌入式系统的软件、嵌入式系统的应用领域、嵌入式系统的体系、Arm嵌入式微处理器、嵌入式处理器的分类和特点,以及CortexM3嵌入式微处理器; 第2章对STM32系列微控制器进行概述,介绍STM32F1系列产品系统架构和STM32F103ZET6内部架构、STM32F103ZET6的存储器映像、STM32F103ZET6的时钟结构、STM32F103VET6的引脚、STM32F103VET6最小系统设计; 第3章讲述STM32CubeMX和HAL库,包括安装STM32CubeMX、安装MCU固件包、软件功能与基本使用和HAL库; 第4章讲述嵌入式开发环境的搭建,包括Keil MDK安装配置、Keil MDK新工程的创建、Cortex微控制器软件接口标准(CMSIS)、STM32F103开发板的选择和STM32仿真器的选择; 第5章讲述STM32 GPIO,包括STM32 GPIO接口概述、STM32的GPIO功能、GPIO的HAL驱动程序、STM32的GPIO 使用流程、采用STM32CubeMX和HAL库的GPIO输出应用实例及其输入应用实例; 第6章讲述STM32中断,包括中断概述、STM32F1中断系统、STM32F1外部中断/事件控制器、STM32F1中断HAL驱动程序、STM32F1外部中断设计流程和采用STM32CubeMX和HAL库的外部中断设计实例; 第7章讲述STM32定时器,包括STM32定时器概述、基本定时器、通用定时器,STM32定时器HAL库函数,采用STM32CubeMX和HAL库的定时器应用实例; 第8章讲述STM32通用同步/异步收发器,包括串行通信基础、STM32的USART工作原理、USART的HAL驱动程序、采用STM32CubeMX和HAL库的USART串行通信应用实例; 第9章讲述STM32 SPI串行总线,包括STM32 SPI通信原理、STM32F1 SPI串行总线的工作原理、SPI的HAL驱动程序、采用STM32CubeMX和HAL库的SPI应用实例; 第10章讲述STM32 I2C串行总线,包括STM32 I2C串行总线的通信原理、STM32 I2C串行总线接口、I2C的HAL驱动程序、采用STM32CubeMX和HAL库的I2C应用实例; 第11章讲述STM32 ADC,包括模拟量输入通道、模拟量输入信号类型与量程自动转换、STM32F103ZET6集成的ADC模块、ADC的HAL驱动程序、采用STM32CubeMX和HAL库的ADC应用实例; 第12章讲述STM32 DMA控制器,包括STM32 DMA的基本概念、STM32 DMA的结构和主要特征、STM32 DMA的功能描述、DMA的HAL驱动程序、采用STM32CubeMX和HAL库的DMA应用实例。

本书结合编者多年的科研和教学经验,遵循“循序渐进,理论与实践并重,共性与个性兼顾”的原则,将理论实践一体化的教学方式融入其中。书中实例开发过程用到的是目前使用最广的“野火STM32开发板F103霸道”,由此开发各种功能,书中实例均进行了调试。读者也可以结合实际或手里现有的开发板开展实验,均能获得实验结果。

本书数字资源丰富,配有程序代码、教学大纲、教学课件、测验试题和习题解答等配套资源。

对本书中所引用的参考文献的作者,在此一并表示真诚的感谢。

由于编者水平有限,加上时间仓促,书中不妥之处在所难免,敬请广大读者不吝指正。


编者