本书主要以基于ARM Cortex-M3内核的STM32F10xxx系列处理器为载体,介绍嵌入式系统的硬件结构与编程方法。全书共13章,包括嵌入式系统组成原理、ARM Cortex处理器内核结构、集成开发环境、STM32系列处理器时钟系统、GPIO接口及其应用、异常与中断、定时/计数器、A/D转换器、D/A转换器、USART串口通信、SPI通信接口、I2C总线接口和DMA控制器等内容。本书选取当前最为常用的Keil MDK集成开发环境介绍编程与软件调试的方法;针对与硬件内容相关的各章,配置了若干工程实例,读者可登录出版社网站下载这些工程实例进行实验。
本书适合作为普通高等学校计算机、通信、电子信息、自动化及测控技术与仪器等专业嵌入式系统基础等课程的教材,也可作为从事嵌入式系统开发工作的工程技术人员的参考书。
随着计算机技术的快速发展,嵌入式计算机系统的应用已逐渐遍布于工农业生产的各个领域,对社会的进步与发展起到了巨大的推动作用。伴随着新型工业化、智能制造、人工智能及大数据等技术的快速发展,作为支撑这些先进技术发展的计算机信息技术受到了国家和社会的高度重视。
嵌入式计算机技术是计算机技术的重要分支,是计算机信息技术、测控技术高度发展的必然产物,是实现生产自动化、产品智能化、服务信息化的关键。目前,我国对嵌入式技术人才的需求旺盛,为此许多高等学校在计算机、通信、电子信息、自动化及测控技术与仪器等相关专业开设了嵌入式系统基础等课程。为进一步推进嵌入式技术的教学,我们在充分吸收现有教材与教学经验的基础上编写了本书。本书具有以下特点:
(1) 知识体系体现先进性。本书紧密结合嵌入式计算机系统发展的最新成果,选取了当前嵌入式处理器中应用广泛、技术先进的基于ARM Cortex-M3内核的STM32F10xxx系列处理器,重点介绍嵌入式系统的硬件结构和工作原理;同时选取了当前最为常用的Keil MDK集成开发环境介绍编程与软件调试的方法,还介绍了最新的Keil μVision开发工具的使用,以紧跟当前的技术潮流。
(2) 充分考虑相关专业的教学需求,突出实用性和应用性。嵌入式系统基础课程目前针对的主要对象并非计算机专业的学生,而是电子信息、通信、自动化及测控技术等专业的学生。这些专业的学生通常不具有操作系统、编译原理等计算机基础知识,编程语言基础也较为薄弱,这为开展嵌入式系统基础课程的教学带来了很多的困难。基于这样的实际情况,结合以往的教学经验,面向广大非计算机专业的学生,选取结构先进、功能强大、性价比高的基于ARM Cortex-M3内核的STM32F10xxx系列处理器作为嵌入式系统的硬件教学内容,并在此硬件基础上进行无需操作系统支持的软件开发设计,是较为适合“嵌入式系统基础”教学的一种选择。
(3) 注重理论和实践相结合,突出实践,以激发读者的学习兴趣,提高学习效果。除前面几章基础内容外,本书其余各章均以理论和实践相结合的方式进行内容设计,即先介绍相关的基本软硬件的原理及方法,然后通过工程实例具体说明相关软硬件的使用方法,读者可登录出版社网站下载这些工程实例进行实验。
本书第1~9章由韩党群编写,第10~13章由琚晓涛编写。
由于编著者水平有限,书中难免存在不妥之处,敬请各位读者批评指正。
编著者
2021年7月
第1章 嵌入式系统组成原理 1
1.1 嵌入式系统 1
1.1.1 嵌入式系统概述 1
1.1.2 嵌入式系统的特点 3
1.1.3 嵌入式处理器 4
1.2 嵌入式系统的硬件结构原理 5
1.2.1 嵌入式系统的硬件组成 5
1.2.2 嵌入式处理器内核及其指标 7
1.2.3 嵌入式系统的存储器 9
1.2.4 嵌入式系统的外部设备 14
1.3 嵌入式系统软件及其开发 16
1.3.1 嵌入式系统软件 16
1.3.2 嵌入式系统软件开发 16
思考题与习题1 17
第2章 ARM Cortex处理器内核结构 18
2.1 ARM处理器概述 18
2.1.1 ARM公司简介 18
2.1.2 ARM内核架构与产品系列 18
2.1.3 ARM处理器内核的设计特点 19
2.1.4 经典ARM系列的主要特征 21
2.1.5 Cortex系列简介 22
2.1.6 ARM处理器的应用领域及
特点 22
2.2 Cortex-M3内核结构 23
2.2.1 Cortex-M3内核结构 23
2.2.2 Cortex-M3的存储器组织结构 25
2.2.3 Cortex-M3位带区的映射 26
2.2.4 Cortex-M3私有外设的映射 28
2.2.5 Cortex-M3片上外设映射区 29
2.3 STM32F10xxx系列处理器概述 29
2.3.1 STM32F10xxx系列处理器 29
2.3.2 STM32F10xxx系列处理器
架构 31
2.3.3 STM32F10xxx系列处理器的
片内存储器 35
2.3.4 STM32F10xxx系列处理器
片内外设 35
2.3.5 STM32F10xxx系列处理器
片外存储器和外设 38
2.4 STM32F10xxx最小系统 39
2.4.1 STM32F10xxx处理器芯片与
引脚 39
2.4.2 STM32F10xxx系列芯片
时钟源 45
2.4.3 STM32F10xxx系列处理器的
复位与启动模式 45
2.4.4 STM32F10xxx系列最小系统 46
思考题与习题2 47
第3章 集成开发环境 48
3.1 Keil μVision 4集成开发环境 48
3.1.1 Cortex-M3集成开发环境概述 48
3.1.2 Keil μVision 4集成开发环境 49
3.1.3 工程项目的创建 51
3.1.4 工程项目的配置 56
3.2 STM32标准外设库简介 60
3.2.1 STM32标准外设库结构 60
3.2.2 重要库文件介绍 60
3.2.3 工程模板的应用 62
3.3 Keil μVision 5集成开发环境 62
3.3.1 Keil μVision 5概述 63
3.3.2 Keil μVision 5集成开发环境 63
3.3.3 在Keil μVision 5环境中
新建工程 65
思考题与习题3 71
第4章 STM32系列处理器时钟系统 72
4.1 STM32系列处理器时钟系统 72
4.1.1 STM32F10xxx系列处理器时钟
系统结构 72
4.1.2 内部主要时钟信号 74
4.2 复位与时钟控制(RCC)寄存器 76
4.2.1 RCC寄存器简介 76
4.2.2 RCC寄存器的定义 84
4.2.3 RCC寄存器操作函数 86
思考题与习题4 94
第5章 GPIO接口及其应用 95
5.1 GPIO基础 95
5.1.1 GPIO的基本结构 95
5.1.2 GPIO的工作模式 96
5.1.3 GPIO的相关寄存器 99
5.2 GPIO库函数 103
5.2.1 GPIO相关寄存器的定义 103
5.2.2 GPIO库函数 104
5.3 GPIO编程应用 108
5.3.1 GPIO测试电路 109
5.3.2 GPIO库函数编程 109
5.3.3 GPIO寄存器编程 114
5.4 实验开发环境 119
5.4.1 实验开发环境概述 119
5.4.2 实验开发板的选择 120
5.4.3 仿真调试设备的选择 122
5.5 用仿真器实现程序下载 126
5.5.1 J-LINK仿真器的配置 126
5.5.2 用J-LINK仿真器实现程序下载 132
5.5.3 ST-LINK v2仿真器的应用 134
5.6 其他程序的下载方法 135
5.6.1 搭建串口下载电路 136
5.6.2 安装虚拟串口驱动程序 137
5.6.3 应用串口下载软件实现程序下载 137
5.7 程序仿真基础 144
5.7.1 软件仿真 144
5.7.2 硬件仿真 151
思考题与习题5 154
第6章 异常与中断 155
6.1 异常与中断系统基础 155
6.1.1 Cotex-M3异常与中断系统 155
6.1.2 STM32F10xxx系列中断系统 158
6.1.3 NVIC操作库函数 162
6.2 外部中断/事件控制器 165
6.2.1 外部中断控制器EXTI 166
6.2.2 外部中断的相关寄存器 167
6.2.3 外部中断的操作库函数 170
6.3 外部中断编程实践 172
6.3.1 使用外部中断的基本步骤 173
6.3.2 GPIO外部中断测试工程 177
思考题与习题6 181
第7章 定时/计数器 183
7.1 基本定时器 183
7.1.1 基本定时器的结构与原理 183
7.1.2 基本定时器的定时分析 185
7.1.3 基本定时器的相关寄存器 188
7.2 通用定时器 189
7.2.1 通用定时器的基本结构 189
7.2.2 通用定时器的计数模式 191
7.2.3 通用定时器的输入模式 195
7.2.4 通用定时器的输出模式 198
7.2.5 定时器的触发与同步 201
7.2.6 通用定时器的相关寄存器 202
7.3 高级定时器 203
7.3.1 高级定时器的结构 203
7.3.2 高级定时器的功能 203
7.3.3 高级定时器的相关寄存器 205
7.4 定时器的相关寄存器 206
7.4.1 控制与状态寄存器组 206
7.4.2 捕获/比较通道控制寄存器组 213
7.4.3 时基单元寄存器组 216
7.4.4 捕获/比较通道寄存器组 217
7.5 定时器的操作库函数 219
7.5.1 定时器的操作库函数概述 219
7.5.2 定时器的操作库函数 222
7.6 定时器基本定时应用编程 232
7.6.1 测试硬件环境 233
7.6.2 查询方式应用 233
7.6.3 中断方式应用 236
7.7 定时器PWM输出应用编程 239
7.7.1 PWM测试任务 239
7.7.2 PWM测试应用编程 239
7.7.3 PWM测试工程仿真 243
7.8 SysTick定时器 244
7.8.1 SysTick定时器概述 244
7.8.2 SysTick定时器的相关寄存器 245
7.8.3 SysTick定时器的操作库函数 247
7.8.4 SysTick定时器编程应用举例 248
思考题与习题7 252
第8章 A/D转换器 254
8.1 STM32F10xxx系列A/D转换器
基础 254
8.1.1 A/D转换器概述 254
8.1.2 A/D转换器的结构 255
8.1.3 A/D转换器的时钟 257
8.1.4 ADC独立工作模式 258
8.1.5 双ADC工作模式 259
8.1.6 A/D转换器校准 262
8.1.7 A/D转换器的相关寄存器 262
8.2 A/D转换器的操作库函数 271
8.2.1 A/D转换器的操作库
函数概述 271
8.2.2 A/D转换器的操作库函数 272
8.3 A/D转换器编程应用 281
8.3.1 单路A/D转换器编程实例 282
8.3.2 双路A/D转换器编程实例 289
思考题与习题8 293
第9章 D/A转换器 294
9.1 STM32F10xxx系列D/A
转换器基础 294
9.1.1 D/A转换器的基本特性 294
9.1.2 D/A转换器的结构与原理 294
9.1.3 DAC独立工作模式 296
9.1.4 双DAC工作模式 297
9.1.5 D/A转换器的相关寄存器 298
9.2 D/A转换器的操作库函数 302
9.2.1 D/A转换器的操作库函数概述 302
9.2.2 D/A转换器的操作库函数 302
9.3 D/A转换器编程应用 306
9.3.1 D/A转换器编程的基本步骤 306
9.3.2 单路D/A转换器编程实例 307
9.3.3 双路D/A转换器编程实例 312
思考题与习题9 318
第10章 USART串口通信 319
10.1 STM32F10xxx系列USART串口
?通信基础 319
10.1.1 USART的基本特性 319
10.1.2 USART的结构与原理 320
10.1.3 USART帧格式 321
10.1.4 硬件流控制 322
10.1.5 USART的相关寄存器 324
10.2 USART串口通信的操作库函数 330
10.2.1 USART串口通信的操作
库函数概述 330
10.2.2 USART串口通信的操作
库函数 330
10.3 USART串口通信编程应用 333
10.3.1 USART串口通信编程的
基本步骤 333
10.3.2 USART串口通信编程实例 334
思考题与习题10 340
第11章 SPI通信接口 341
11.1 STM32F10xxx系列SPI通信基础 341
11.1.1 SPI基础 341
11.1.2 SPI通信的基本特性 344
11.1.3 SPI通信的结构与工作原理 345
11.1.4 SPI的相关寄存器 346
11.2 SPI通信的操作库函数 350
11.2.1 SPI通信的操作库函数概述 350
11.2.2 SPI通信的操作库函数 351
11.3 SPI通信编程应用 354
11.3.1 SPI通信编程的基本步骤 354
11.3.2 单路SPI通信编程实例 355
思考题与习题11 373
第12章 I2C总线接口 374
12.1 I2C概述 374
12.1.1 I2C总线的基本特性 374
12.1.2 I2C基础 375
12.1.3 I2C结构 378
12.2 I2C操作 381
12.2.1 I2C的通信过程 381
12.2.2 I2C中断请求 382
12.2.3 I2C相关寄存器 384
12.3 I2C编程应用 390
12.3.1 I2C初始化结构体详解 390
12.3.2 I2C读/写EEPROM实验 393
思考题与习题12 413
第13章 DMA控制器 414
13.1 DMA控制器的结构与原理 414
13.1.1 DMA控制器的基本特性 414
13.1.2 DMA控制器的结构与原理 414
13.1.3 DMA控制器的相关寄存器 418
13.2 DMA控制器的操作库函数 422
13.2.1 DMA控制器的操作库
函数概述 422
13.2.2 DMA控制器的操作库函数 422
13.3 DMA控制器编程应用 426
13.3.1 DMA控制器编程的
基本步骤 426
13.3.2 DMA控制器编程实例 426
思考题与习题13 431
参考文献 432