前言 STM32作为Arm的一个典型系列,以其较高的性能和优越的性价比,毫无疑问地成为32位单片机市场的主流。把STM32 引入大学的培养体系,已经成为广大师生的普遍共识。 HAL库是意法半导体公司(简称ST公司)为STM32的MCU最新推出的抽象层嵌入式软件,目标是更方便地实现跨STM32产品的最大可移植性。和标准外设库(也称为标准库)相比,STM32的HAL库更加抽象,ST公司最终的目的是实现在STM32系列MCU之间无缝移植,甚至与其他MCU也能实现快速移植。 STM32Cube生态系统已经完全抛弃了早期的标准外设库,STM32系列MCU都提供HAL固件库以及其他一些扩展库。STM32Cube 生态系统的两个核心软件是 STM32CubeMX和STM32CubeIDE,另外还有程序下载软件STM32CubeProgrammer,这些都是由ST公司官方免费提供的。使用STM32CubeMX可以进行MCU的系统功能和外设图形化配置,可以生成MDKArm或STM32CubeIDE项目框架代码,包括系统初始化代码和已配置外设的初始化代码。如果用户想在生成的MDKArm或STM32CubeIDE 初始项目的基础上添加自己的应用程序代码,只需把代码写在代码沙箱段内,就可以在STM32CubeMX中修改MCU设置,重新生成代码,而不会影响用户已经添加的程序代码。 之前使用的都是标准库,使用标准库的主要劣势就是每次修改MCU功能时,都需要手动修改,而且手动修改也不能保证程序的正确性,因为代码在不同的MCU之间移植的结果是不一样的,也就是说标准库是针对某一系列芯片的,没有什么可移植性。此外,在内部的布线上也稍微有些区别,移植时需要格外注意。最近兴起的HAL库就是ST公司目前主推的研发方式,其更新速度比较快,可以通过官方推出的STM32CubeMX工具一键生成代码,大大缩短开发周期。使用HAL库的优势主要就是不需要开发工程师再设计所用的MCU型号,只需要专注于所需功能的软件开发工作即可。 目前,基于STM32内核的Arm微处理器的开发方式主要有以下几种。 (1) 寄存器+Keil MDK(难度较大,代码效率高,不常用)。 (2) 标准库函数+Keil MDK(现在多采用)。 (3) HAL库函数+Keil MDK(已采用)。 (4) STM32CubeMX+HAL库函数+Keil MDK(简单易学,缺乏教材,但已开始采用)。 (5) STM32CubeMX+STM32CubeIDE+HAL库函数(简单易学,开发平台不涉及版权,未来趋势)。 STM32CubeMX和STM32CubeIDE是STM32Cube开发中不可或缺的两款软件。由于STM32CubeMX和STM32CubeIDE的优越性及编程的图形化,读者急需一本讲述STM32CubeMX和STM32CubeIDE编程的嵌入式系统教材。 因此,本书以ST公司的基于32位Arm内核的STM32F407为背景机型,采用STM32CubeMX、STM32CubeIDE和HAL库函数,讲述嵌入式系统设计与应用实例,限于篇幅且Keil MDK在国内的应用较为普遍,只在GPIO输出应用实例中详细地讲述了STM32CubeIDE开发平台的应用,其他应用实例均采用Keil MDK开发平台。 本书共分12章。第1章内容是概述嵌入式系统,介绍嵌入式系统的组成、嵌入式系统的软件、嵌入式系统的应用领域、嵌入式系统的体系、Arm嵌入式微处理器、存储器系统、嵌入式处理器的分类和特点; 第2章概述STM32系列微控制器,介绍STM32F407ZGT6概述、STM32F407ZGT6芯片内部结构、STM32F407VGT6芯片引脚和功能,以及STM32F407VGT6最小系统设计; 第3章讲述STM32CubeMX和HAL库,包括安装STM32CubeMX、安装MCU固件包、软件功能与基本使用,以及HAL库; 第4章讲述STM32CubeIDE开发平台,包括安装STM32CubeIDE、STM32CubeIDE的操作、STM32CubeProgrammer软件、STM32CubeMonitor软件、STM32F407开发板的选择和STM32仿真器的选择; 第5章讲述STM32 GPIO,包括STM32 GPIO接口概述、STM32的GPIO功能、GPIO的HAL驱动程序、STM32的GPIO 使用流程、采用STM32CubeMX和HAL库的GPIO输出应用实例、采用STM32CubeMX和HAL库的GPIO输入应用实例; 第6章讲述STM32中断,包括中断概述、STM32F4中断系统、STM32F4外部中断/事件控制器、STM32F4中断HAL驱动程序、STM32F4外部中断设计流程和采用STM32CubeMX和HAL库的外部中断设计实例; 第7章讲述STM32定时器系统,包括STM32定时器概述、STM32基本定时器、STM32通用定时器、STM32定时器HAL库函数、采用STM32CubeMX和HAL库的定时器应用实例; 第8章讲述STM32 通用同步/异步收发器,包括串行通信基础、STM32的USART工作原理、USART的HAL驱动程序、采用STM32CubeMX和HAL库的USART串行通信应用实例; 第9章讲述STM32 SPI串行总线,包括STM32 SPI通信原理、STM32F4 SPI串行总线的工作原理、SPI的HAL驱动程序、采用STM32CubeMX和HAL库的 SPI应用实例; 第10章讲述STM32 I2C串行总线,包括STM32 I2C串行总线的通信原理、STM32 I2C串行总线接口、I2C的HAL驱动程序、采用STM32CubeMX和HAL库的 I2C应用实例; 第11章讲述STM32 A/D转换器,包括模拟量输入通道、模拟量输入信号类型与量程自动转换、STM32F407微控制器的ADC结构、STM32F407微控制器的ADC功能、ADC的HAL驱动程序、采用STM32CubeMX和HAL库的A/D转换器应用实例; 第12章讲述STM32 DMA控制器,包括STM32 DMA的基本概念、STM32 DMA的结构和主要特征、STM32 DMA的功能描述、DMA的HAL驱动程序、采用STM32CubeMX和HAL库的DMA应用实例。 本书结合编者多年的科研和教学经验,遵循“循序渐进,理论与实践并重,共性与个性兼顾”的原则,将理论实践一体化的教学方式融入其中。书中实例的开发过程用到的是目前使用最广的“野火STM32开发板F407霸天虎”,由此开发各种功能,书中的实例均进行了调试。读者也可以结合实际或手里现有的开发板开展实验,均能获得实验结果。 本书数字资源丰富,配有电路文件、程序代码(Keil MDK工程和STM32CubeIDE工程)、教学大纲、教学课件、测验试题和习题解答等电子配套资源。 对本书引用的参考文献的作者,在此一并向他们表示真诚的感谢。由于编者水平有限,加上时间仓促,书中不妥之处在所难免,敬请广大读者不吝指正。 编者