本书以ST公司内嵌Cortex-M4内核的STM32F4xx系列ARM控制器为重点,深入浅出地介绍了STM32应用开发所涉及的各个方面的关键技术。全书内容可分为四大部分:第1、2章主要介绍STM32处理器内嵌Cortex-M3/M4内核的架构与资源,包括工作模式与状态、寄存器、总线接口、指令系统、异常与中断、存储器组织映射等;第3、4章为STM32开发基础,主要介绍STM32F407处理器的软硬件资源、开发调试手段与方法以及最小系统设计与调试;第5~10章为STM32应用开发实践,主要介绍STM32的GPIO、中断、定时器、USART、SPI、I2C、ADC/DAC、DMA等接口的资源配置、软件编程以及应用实践;第11章为物联网感知层应用开发,主要介绍STM32在物联网应用开发中常搭配使用的无线通信模块WiFi、ZigBee、Bluetooth、NB-IoT、LoRa及其应用开发。
本书在内容安排上由浅入深,理论与实践相结合,将STM32资源配置、接口及外设的应用开发作为重点,列出了各种实践案例和结果,具有较强的实践性。
本书可作为高职高专院校计算机、信息科学、电子信息等相关专业STM32单片机开发课程的教材,也可作为教师、科研人员和相关培训机构的参考材料,还可作为物联网初中级开发人员、STM32单片机自学者的教材和参考书。
ARM处理器作为嵌入式系统应用技术中的领导者,在物联网、人工智能、机器人等各个行业和领域得到了广泛的应用。ARM处理器的应用开发作为高等院校IT类专业学生必备的专业技能,是大学毕业生从业的基础,在学生择业、就业的过程中发挥着重要的作用。因此,很多理工科类高等院校均将ARM处理器应用开发作为必修课或选修课列入了人才培养方案和教学计划中。
作为ARM内核的系列处理器,STM32的应用范围广、影响大。因此,本书以封装了Cortex-M3/M4内核的STM32F4xx处理器为主体,介绍了STM32应用开发关键技术和应掌握的核心技能,以满足教学要求、就业需求和企业对人才的需要。
本书的特色如下:
(1) 依照嵌入式系统开发的核心技能,在理论基础部分,重点介绍Cortex-M3/M4内核结构、寄存器、总线接口、指令系统、异常与中断、存储器保护单元,这是从事STM32嵌入式应用开发必备的基础;在STM32应用开发基础部分,介绍STM32F407处理器软硬资源、开发调试环境、最小系统组成,此部分主要让学生建立嵌入式系统框架的概念,理解最小系统的重要性,掌握STM32应用开发使用的软件和硬件环境以及开发手段和方法;在STM32应用开发实践部分,主要介绍STM32的GPIO、中断、定时器、USART、SPI、I2C、ADC/DAC、DMA等接口的资源配置、软件编程以及应用实践;最后为综合应用开发部分,综合应用前面各章节知识,独立完整地开发一套可用的物联网无线传感节点产品。
(2) 按照STM32应用开发的流程,对GPIO、USART、SPI、I2C、ADC/DAC等外设接口设计了多个导引式的学习情境案例,每个学习情境均将知识体系和实践技能相结合,由浅及深地讲解,使学生更容易理解和掌握,可以产生良好的教学效果。
(3) 充分体现了高职院校的教学特点,引入STM32开发案例,设计STM32综合应用项目,在提高学生应用技能的同时,强化项目驱动,实现“工学结合”,提高了理论教学和实践教学质量。
本书内容安排遵循嵌入式开发流程和循序渐进的学习规律,结合案例加深对嵌入式系统的理解,让学生掌握应用开发的核心技能和方法,并通过综合实践培养学生独立的工作能力。本书共11章,各章内容安排如下:
第1章为Cortex-M3/M4体系结构,主要介绍STM32的内核Cortex-M3/M4体系结构,从内核充分了解STM32的功能及性能特点。
第2章为STM32处理器概述,主要介绍STM32处理器的命名方式、功能、资源以及外形封装。
第3章为STM32开发与调试方法,主要介绍STM32开发环境的搭建、工程的创建、程序的下载以及不同的开发模式。
第4章为STM32最小系统,主要介绍满足STM32工作的最小电路的硬件组成结构,以及STM32工作的硬件基础知识。
第5章为GPIO的功能与应用,主要介绍GPIO的结构和功能、GPIO的寄存器与库函数以及GPIO口的应用案例。
第6章为STM32中断与编程,主要介绍STM32中断过程、中断控制器(NVIC)的配置过程、外部中断(EXTI)结构和配置过程以及中断相关的实践案例。
第7章为STM32定时器与编程,主要介绍STM32的三种不同用途的定时器,并按照不同用途讲解应用案例。
第8章为USART及其应用,主要介绍USART作为STM32频繁使用的片上外设的基本功能、串口中断、串口相关的寄存器和库函数以及串口应用案例。
第9章为同步串行总线SPI和I2C,主要介绍STM32中常用的总线协议——I2C协议和SPI协议及其应用与实践。
第10章为ADC/DAC与DMA的原理及应用,主要介绍STM32具有的ADC/DAC (模数/数模转换)功能的使用配置方法以及DMA概述与应用。
第11章为物联网感知层应用开发,主要介绍STM32单片机技术在物联网中的应用案例,以STM32搭配WiFi模块、ZigBee模块、Bluetooth模块、NB-IoT模块、LoRa模块等,实现不同场景的远距离无线通信。
本书的三位编者长期从事ARM嵌入式应用开发的各项工作,包括产品研发、ARM的应用推广、ARM嵌入式培训和教学工作。在撰写本书的过程中我们得到了深圳信息职业技术学院、北京旋极信息技术股份有限公司、深圳市鹤洲富通科技有限公司的鼎力支持和帮助,在此一并表示衷心的感谢!
由于编者水平有限,书中难免存在不足之处,恳请读者批评指正,我们将在随后的修订中逐步完善本书。衷心希望本书能在我国的职教事业发展中作出些许的贡献。
编 者
2022年1月
第1章 Cortex-M3/M4体系结构 1
1.1 Cortex-M3/M4内核结构 1
1.2 工作模式及状态 3
1.3 寄存器 4
1.4 总线接口 7
1.5 存储器组织与映射 9
1.6 指令集 13
1.6.1 ARM指令集 16
1.6.2 Thumb指令集 17
1.6.3 Thumb-2指令集 18
1.7 流水线 19
1.8 异常与中断 19
1.8.1 异常和中断的概念 19
1.8.2 中断控制器 20
1.8.3 中断、异常过程 21
1.8.4 嵌套优先级 21
1.8.5 咬尾中断 21
1.8.6 晚到异常 22
1.8.7 异常返回值 23
思考与练习 23
第2章 STM32处理器概述 24
2.1 STM32处理器命名 24
2.2 STM32处理器资源 25
2.3 STM32F407处理器 25
2.3.1 STM32F407系统架构 26
2.3.2 STM32F407功能单元 27
2.3.3 STM32F407处理器资源 27
2.3.4 STM32F407引脚和封装 29
思考与练习 31
第3章 STM32开发与调试方法 32
3.1 STM32的开发环境与使用 32
3.1.1 开发环境简介 32
3.1.2 开发环境的使用 33
3.2 STM32程序的开发模式 41
3.2.1 基于寄存器的开发模式 41
3.2.2 基于固件库的开发模式 43
3.2.3 基于操作系统的开发模式 46
3.3 STM32工程的创建 46
3.3.1 STM32固件库 46
3.3.2 创建工程 50
3.4 程序的下载(烧写) 55
3.4.1 基于串口的程序下载 56
3.4.2 基于JTAG接口的程序下载 57
3.4.3 ST-Link调试程序 61
3.5 实践案例(LED跑马灯) 64
思考与练习 66
第4章 STM32最小系统 67
4.1 电源模块 67
4.1.1 供电方案 67
4.1.2 电源管理器 69
4.1.3 低功耗模式 69
4.2 时钟电路 70
4.2.1 HES时钟和HSI时钟 71
4.2.2 PLL锁相环 72
4.2.3 LSE时钟和LSI时钟 73
4.2.4 系统时钟SysCLK 73
4.2.5 RCC寄存器 75
4.3 复位电路 78
4.4 程序下载电路 79
4.5 STM32的最小系统 80
思考与练习 81
第5章 GPIO的功能与应用 82
5.1 GPIO的结构与功能 82
5.1.1 GPIO的硬件结构 82
5.1.2 复用功能与钳位功能 83
5.1.3 GPIO的输入/输出功能 84
5.1.4 GPIO的速度选择 85
5.2 GPIO的寄存器与库函数 86
5.2.1 GPIO的寄存器 86
5.2.2 GPIO的库函数 88
5.2.3 寄存器与库函数的关系 91
5.3 实践案例 97
思考与练习 98
第6章 STM32中断与编程 100
6.1 STM32中断通道与中断过程 100
6.1.1 STM32中断通道 100
6.1.2 STM32的中断过程 104
6.2 NVIC结构及配置 105
6.2.1 NVIC结构 105
6.2.2 STM32中断优先级 105
6.2.3 中断向量表 106
6.2.4 NVIC寄存器和NVIC库函数 107
6.3 EXTI结构及配置 108
6.3.1 EXTI结构 108
6.3.2 EXTI中断与事件 109
6.3.3 EXTI中断通道与中断源 109
6.3.4 EXTI寄存器与EXTI库函数 110
6.4 实践案例 112
思考与练习 115
第7章 STM32定时器与编程 116
7.1 STM32通用定时器TIMx 116
7.1.1 时钟源和时基单元 116
7.1.2 捕获/比较通道 118
7.1.3 计数模式和定时中断 120
7.1.4 TIMx寄存器和库函数 121
7.2 STM32实时时钟RTC 126
7.2.1 RTC的功能和结构 126
7.2.2 RTC的控制寄存器和
备份寄存器 127
7.2.3 电源控制寄存器 129
7.2.4 RTC寄存器 130
7.3 STM32系统定时器 131
7.3.1 控制与状态寄存器 132
7.3.2 重装载寄存器 132
7.3.3 当前值寄存器 132
7.4 STM32定时器应用案例 133
7.4.1 TIMx应用案例 133
7.4.2 RTC应用案例 143
7.4.3 SysTick应用案例 150
思考与练习 153
第8章 USART及其应用 154
8.1 端口重映射 154
8.2 USART的功能和结构 155
8.3 USART的帧格式、波特率设置 157
8.4 USART的中断请求 159
8.5 USART的寄存器和库函数 161
8.6 USART应用案例 165
思考与练习 168
第9章 同步串行总线SPI和I2C 169
9.1 SPI概述及应用要点 169
9.2 SPI接口应用及实践 171
9.3 I2C概述及应用要点 177
9.4 I2C总线应用及实践 179
思考与练习 188
第10章 ADC/DAC与DMA的
原理及应用 189
10.1 STM32的ADC 189
10.1.1 ADC的功能与结构 189
10.1.2 ADC的工作模式 194
10.1.3 ADC中断 195
10.1.4 ADC的寄存器和库函数 195
10.1.5 ADC应用案例 199
10.2 DAC的结构和配置 204
10.3 DMA概述与应用 210
10.3.1 DMA的功能与结构 210
10.3.2 DMA的寄存器和库函数 212
10.3.3 DMA的配置要点 215
思考与练习 221
第11章 物联网感知层应用开发 222
11.1 AT指令集及应用 222
11.2 WiFi模块应用开发 224
11.2.1 WiFi模块结构 224
11.2.2 WiFi模块编程实践 229
11.3 ZigBee模块应用开发 246
11.3.1 ZigBee模块结构 246
11.3.2 ZigBee模块协议栈 247
11.3.3 ZigBee模块编程实践 254
11.4 Bluetooth模块应用开发 257
11.4.1 Bluetooth模块结构 257
11.4.2 Bluetooth模块编程实践 259
11.5 NB-IoT模块应用开发 265
11.5.1 NB-IoT模块的结构特点及
工作模式 265
11.5.2 NB-IoT模块编程实践 271
11.6 LoRa模块应用开发 274
11.6.1 LoRa模块的结构特点及数据
管理 275
11.6.2 LoRa模块编程实践 276
思考与练习 284
附录 英文缩略词中文对照 285
参考文献 288