编辑推荐:
第1章 嵌入式系统 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的定义 1
1.1.2 嵌入式系统的特点 1
1.1.3 嵌入式系统的应用 2
1.2 嵌入式系统的体系 2
1.2.1 硬件架构 3
1.2.2 软件层次 3
1.3 嵌入式硬件系统 6
1.3.1 嵌入式处理器分类 6
1.3.2 典型嵌入式处理器 7
1.3.3 存储系统 9
1.3.4 I/O接口 10
1.3.5 人机接口 10
1.3.6 电源及其他设备 10
1.4 嵌入式操作系统 10
1.4.1 嵌入式操作系统的发展 10
1.4.2 嵌入式操作系统的分类 11
1.4.3 嵌入式实时操作系统的功能 12
1.4.4 常用的嵌入式操作系统 13
1.5 嵌入式系统的设计 14
1.5.1 嵌入式系统设计流程 14
1.5.2 嵌入式系统开发环境搭建 15
习题 16
第2章 ARM Cortex-M体系架构 18
2.1 ARM Cortex体系架构概述 18
2.1.1 CISC和RISC 18
2.1.2 ARM架构发展史 20
2.1.3 ARM处理器的类型 20
2.1.4 Cortex-M系列处理器 22
2.2 Cortex-M4内核基础 23
2.2.1 寄存器组 24
2.2.2 堆栈操作 26
2.2.3 特殊功能寄存器组 27
2.2.4 操作模式 28
2.3 存储器系统 30
2.3.1 数据类型 30
2.3.2 存储形式 30
2.3.3 存储器映射 31
2.3.4 位带区 32
2.4 异常和中断 33
2.4.1 向量表 34
2.4.2 优先级 35
2.4.3 响应过程 36
2.4.4 复位 38
习题 39
第3章 STM32F429微控制器 40
3.1 STM32系列微控制器 40
3.1.1 STM32系列微控制器概述 40
3.1.2 芯片命名规则 41
3.1.3 开发工具 41
3.1.4 STM32标准函数库介绍 46
3.2 STM32F429微控制器结构 51
3.2.1 芯片资源 51
3.2.2 芯片内部结构 52
3.2.3 芯片引脚和功能 55
3.2.4 电源系统 57
3.2.5 复位系统 60
3.3 STM32F4系列微控制器存储器映射和寄存器 61
3.3.1 存储器映射 61
3.3.2 自举配置 63
3.3.3 寄存器映射 63
习题 67
第4章 启动文件和SysTick 69
4.1 启动文件 69
4.1.1 启动文件概述 69
4.1.2 启动步骤 69
4.2 启动文件代码讲解 70
4.3 SysTick 75
4.3.1 SysTick概述 75
4.3.2 SysTick的库函数 76
4.3.3 应用实例 78
习题 79
第5章 GPIO 80
5.1 GPIO结构原理 80
5.1.1 GPIO功能描述 80
5.1.2 GPIO输入配置 81
5.1.3 GPIO输出配置 82
5.1.4 GPIO复用功能配置 84
5.1.5 GPIO模拟功能配置 85
5.2 GPIO相关寄存器 86
5.2.1 模式寄存器 86
5.2.2 输出类型寄存器 86
5.2.3 输出速度寄存器 87
5.2.4 上拉/下拉寄存器 87
5.2.5 输入数据寄存器 88
5.2.6 输出数据寄存器 88
5.2.7 置位/复位寄存器 89
5.2.8 配置锁存寄存器 90
5.2.9 复用功能寄存器 90
5.3 GPIO典型应用步骤及常用库函数 92
5.3.1 GPIO典型应用步骤 92
5.3.2 常用库函数 93
5.4 应用实例 97
5.4.1 GPIO输出应用实例 97
5.4.2 GPIO输入应用实例 99
5.4.3 GPIO复用应用实例 101
5.4.4 矩阵按键应用 102
习题 106
第6章 NVIC 108
6.1 NVIC的中断类型及中断管理方法 108
6.1.1 中断类型 108
6.1.2 中断管理方法 109
6.2 常用库函数 110
6.3 应用实例 112
习题 113
第7章 EXTI 114
7.1 EXTI概述 114
7.1.1 EXTI结构 114
7.1.2 GPIO相关EXTI线 116
7.2 EXTI典型应用步骤及常用库函数 116
7.2.1 EXTI典型应用步骤 116
7.2.2 常用库函数 117
7.3 应用实例 119
习题 121
第8章 时钟系统 122
8.1 时钟系统结构 122
8.1.1 时钟源 124
8.1.2 HSE时钟 124
8.1.3 PLL配置 125
8.1.4 LSE 时钟 126
8.1.5 LSI时钟 126
8.1.6 时钟输出功能 126
8.2 PLL时钟系统配置步骤及常用库函数 126
8.2.1 PLL时钟系统配置步骤 127
8.2.2 常用库函数 127
8.3 应用实例 130
习题 132
第9章 定时器系统 133
9.1 定时器系统概述 133
9.1.1 定时器结构 134
9.1.2 时钟源 134
9.2 基本定时功能 137
9.2.1 时基单元 137
9.2.2 计数模式 138
9.3 捕抓/比较功能 141
9.3.1 输入捕抓/比较输出通道 141
9.3.2 输入捕抓模式 143
9.3.3 输出模式 144
9.3.4 编码器接口模式 147
9.4 定时器典型应用步骤及常用库函数 150
9.4.1 基本定时功能应用步骤 150
9.4.2 输入捕抓模式应用步骤 150
9.4.3 PWM输出应用步骤 152
9.4.4 编码器接口应用步骤 153
9.4.5 常用库函数 155
9.5 应用实例 159
9.5.1 定时器控制实现灯闪烁 159
9.5.2 直流电机调速控制 161
9.5.3 测量外部输入脉冲频率 164
9.5.4 测量电机转速和方向 167
习题 170
第10章 DMA控制器 171
10.1 DMA控制器概述 171
10.1.1 DMA控制器主要特性 171
10.1.2 DMA控制器结构 172
10.2 DMA控制器功能 173
10.2.1 DMA事务 173
10.2.2 数据流 174
10.2.3 通道 174
10.2.4 仲裁 175
10.2.5 循环模式 176
10.2.6 单次和突发模式 176
10.2.7 FIFO 176
10.2.8 DMA中断 177
10.2.9 DMA数据流配置过程 177
10.3 DMA典型应用步骤及常用库函数 178
10.3.1 DMA典型应用步骤 178
10.3.2 常用库函数 179
10.4 应用实例 181
习题 183
第11章 通用同步异步收发器(USART) 184
11.1 通信概述 184
11.1.1 并行通信和串行通信 184
11.1.2 单工通信、半双工通信、全双工通信 185
11.1.3 同步通信和异步通信 185
11.1.4 RS-232 186
11.2 STM32F429微控制器的USART结构 188
11.2.1 USART概述 188
11.2.2 波特率设置 192
11.2.3 USART中断 193
11.2.4 DMA控制 193
11.3 USART典型应用步骤及常用库函数 194
11.3.1 USART典型应用步骤 194
11.3.2 常用库函数 194
11.4 应用实例 197
11.4.1 通过串口向计算机传输100个字节 197
11.4.2 串口与计算机回显功能实现 199
11.4.3 利用DMA通过串口向计算机传输1000个字节 202
习题 204
第12章 模数转换器(ADC) 205
12.1 ADC概述 205
12.1.1 A/D转换过程 205
12.1.2 ADC原理 206
12.2 STM32F429微控制器的ADC结构 208
12.3 STM32F429微控制器的ADC功能 212
12.3.1 ADC使能和启动 212
12.3.2 时钟配置 213
12.3.3 转换模式 213
12.3.4 DMA控制 214
12.4 ADC典型应用步骤及常用库函数 215
12.4.1 ADC典型应用步骤 215
12.4.2 常用库函数 216
12.5 应用实例 220
12.5.1 规则组单通道采集外部电压 220
12.5.2 使用DMA和规则组通道实现多路模拟信号采集 222
习题 227
第13章 数模转换器(DAC) 228
13.1 DAC概述 228
13.1.1 基本概念 228
13.1.2 DAC原理 229
13.2 STM32F429微控制器的DAC结构 230
13.3 STM32F429微控制器的DAC功能 231
13.4 DAC典型应用步骤及常用库函数 234
13.4.1 DAC典型应用步骤 234
13.4.2 常用库函数 235
13.5 应用实例 236
习题 239
第14章 I2C控制器 240
14.1 I2C协议 240
14.1.1 I2C物理层 240
14.1.2 I2C协议层 241
14.2 软件模拟I2C协议程序分析 244
14.2.1 I2C引脚配置 244
14.2.2 软件模拟开始信号和结束信号 246
14.2.3 软件模拟检测ACK信号 246
14.2.4 软件模拟产生ACK信号和NACK信号 247
14.2.5 软件模拟发送一个字节数据 247
14.2.6 软件模拟接收一个字节数据 248
14.2.7 软件模拟I2C完整写操作 248
14.2.8 软件模拟I2C完整读操作 249
14.3 模拟I2C总线协议读写AT24CXX系列EEPROM实验 250
14.4 I2C控制器概述 254
14.4.1 I2C控制器主要特性 254
14.4.2 I2C控制器结构 254
14.4.3 I2C控制器主模式 255
14.4.4 I2C控制器从模式 256
14.4.5 I2C控制器中断 257
14.5 I2C典型应用步骤及常用库函数 258
14.5.1 I2C典型应用步骤 258
14.5.2 常用库函数 258
14.6 应用实例 261
14.6.1 I2C控制器主模式测试 261
14.6.2 I2C控制器从模式测试 266
习题 269
第15章 SPI控制器 270
15.1 SPI协议 270
15.1.1 SPI数据传输 270
15.1.2 SPI通信的时钟极性和时钟相位 271
15.1.3 4种SPI模式 271
15.2 SPI控制器概述 273
15.2.1 SPI控制器主要特性 273
15.2.2 SPI控制器结构 273
15.2.3 SPI主机配置 274
15.2.4 SPI从机配置 275
15.2.5 主模式的全双工发送和接收过程 275
15.2.6 SPI状态标志 276
15.2.7 SPI中断 276
15.3 SPI典型应用步骤及常用库函数 277
15.3.1 SPI典型应用步骤 277
15.3.2 常用库函数 277
15.4 应用实例 279
习题 289
第16章 外部存储控制器 290
16.1 FMC概述 290
16.1.1 FMC主要特性 290
16.1.2 FMC结构 291
16.1.3 SDRAM简介 292
16.1.4 SDRAM初始化 294
16.2 FMC扩展SDRAM典型应用步骤及常用库函数 295
16.2.1 FMC扩展SDRAM典型应用步骤 295
16.2.2 常用库函数 296
16.3 应用实例 299
习题 302
第17章 LCD控制器 303
17.1 液晶显示技术及液晶显示器控制原理 303
17.1.1 液晶显示技术 303
17.1.2 液晶显示器控制原理 304
17.2 LTDC控制器概述 307
17.2.1 LTDC控制器主要特性 307
17.2.2 LTDC控制器结构 308
17.3 DMA2D控制器概述 310
17.3.1 DMA2D控制器结构 310
17.3.2 DMA2D控制器事务 311
17.3.3 DMA2D控制器配置 312
17.4 字符显示 312
17.4.1 字符编码 312
17.4.2 字模的生成 313
17.5 LTDC典型应用步骤及常用库函数 317
17.5.1 LTDC典型应用步骤 317
17.5.2 常用库函数 318
17.6 应用实例 323
习题 332
参考文献 334
展开
前 言
在当今的信息社会中,嵌入式系统的应用无处不在,随着人工智能等先进技术渗入各个领域,嵌入式系统的应用将会更加广泛和深入。微控制器也经历了从最初的8位、16位到现在32位的演变,嵌入式系统设计离不开微控制器。无论是从芯片性能、设计资源还是从性价比上来讲,ARM架构的微控制器可以说都优于其他微控制器,它已经占据了当前嵌入式微控制器应用领域的绝大多数市场。ARM系列微控制器在国内的广泛应用,应该是从ARM7系列微控制器开始的,可以说它就是当时嵌入式微控制器的代名词,各大公司都设计了以ARM7内核为核心的微控制器,时至今日,在一些产品中仍然能看到它的身影。之后,ARM公司推出了全新的ARMv7版本的Cortex系列内核,因其优秀的性能,迅速被市场接受,各大半导体公司都推出了相关的处理器。
Cortex-M系列内核是ARM公司针对微控制器应用设计的内核,与其相关的微控制器芯片迅速替代了大部分其他型号的8位、16位及32位微控制器。意法半导体公司具有优秀的配套程序库和丰富的参考设计资源,其设计的STM32F系列微控制器的入门学习更容易,被嵌入式系统设计者广泛应用和推广,可以说是国内应用最为广泛的Cortex-M系列微控制器。在Cortex-M系列微控制器中,Cortex-M4微控制器综合了控制和DSP信号处理功能,并具有很高的性价比,在各种复杂的嵌入式控制领域得到广泛应用。意法半导体公司的STM32F4系列微控制器内部集成了几乎所有的常用嵌入式片上外设,在软件库的基础上,让初学者能够轻松入门。各种开发社区和开发者积累的丰富应用资源,给设计者的实际系统设计提供了很好的参考。
本书主要以STM32F429微控制器为对象讲解嵌入式系统设计方法、实例。全书分为17章,主要对实际应用中常见的内容进行了讲解,包括嵌入式系统、ARM Cortex-M体系架构、STM32F429微控制器内部构造及其常用的片上外设结构、应用实例、程序开发方法。书中对常见的应用进行了实例讲解,给出了清晰的系统应用设计思路,并明确了每个应用的设计步骤,提供了每个应用的程序源代码,使初学者在学习了相关基本知识后能够对具体的设计一看即懂。本书设计适量习题,紧贴各章核心内容,涵盖基本概念及相关应用,能够起到巩固重要知识点的作用。
第1章,介绍了嵌入式系统的概念、体系、硬件系统、操作系统及设计等。
第2章,介绍了ARM Cortex-M体系架构,主要对内核寄存器、操作模式、存储器系统、异常和中断进行了阐述。
第3章,介绍了STM32F429微控制器的内部构造和芯片资源,对I/O引脚类型、存储系统和寄存器操作进行描述。
第4章,介绍了启动文件和SysTick的应用,SysTick一般可以作为延时函数或系统驱动时钟使用。
第5~9章,分别介绍了GPIO、NVIC、EXTI、时钟系统和定时器系统。这部分是微控制器入门的基本要求部分,相对来讲比较简单,在实际使用中使用得比较多,特别是GPIO的结构和编程,初学者需要详细、深入地学习和实践练习,争取做到熟练应用,因为所有嵌入式设计都离不开GPIO。定时器的应用仅次于GPIO,常用于定时、电机驱动、检测等,初学者需要熟练掌握基本定时,理解和掌握书中介绍的各种应用实例。同时,NVIC也非常重要,只要使用到中断就离不开NVIC,初学者需要理解中断通道、中断组、抢占优先级和响应优先级等概念及编程设置方法。
第10~15章,分别介绍了DMA控制器、USART、ADC、DAC、I2C控制器和SPI控制器。这部分是微控制器学习进阶部分,在理解和熟练掌握了这部分内容后,基本就可以处理嵌入式系统设计中遇到的大部分问题了。USART使用最为广泛,在理解了其基本数据帧格式和电气、电路定义后,编程发送和接收数据都比较简单,一般发送数据使用查询方式,接收数据使用中断方式,在涉及大量数据传输时,会用到DMA控制器。I2C的控制时序稍显复杂,其通信功能可以使用软件模拟方式或使用STM32F429微控制器集成的片上I2C控制器实现,这些在书中都有介绍。在实际使用中一定要注意电路接口为开漏形式,并连接上拉电阻。因I2C电路接口简单,它在实际使用中也较为广泛。SPI是一个全双工的串口,时序形式比I2C简单,但是,在电路连线上比USART和I2C至少多一根信号线,因此,在实际使用中SPI应用不如前两种广泛。但是,它的通信速度是三种通信方法中最快的。ADC和DAC实现模数和数模转换功能,在数模混合的领域得到应用。其中,DAC使用较为简单,ADC的所有规则组转换通道共用一个数据寄存器,常需要配合DMA控制器使用,因此略显复杂。但是,一旦配置成功运转起来之后,DMA控制器又可以极大地减小程序干预程度,使用非常方便。整体上讲,STM32F429微控制器为开发者提供了性能适中的ADC和DAC。DMA控制器更多作为一种辅助设备,配合其他片上外设实现无CPU干预的数据传输,初学者理解起来可能会有些困难,一旦熟悉之后,就会觉得其使用方便了。
第16~17章,分别介绍了外部存储控制器和LCD控制器。SDRAM作为FMC的一种外扩存储器,使用更为广泛,主要用于扩展系统的数据存储空间。LTDC控制器是STM32F429微控制器内部集成的一个液晶控制器,SDRAM作为显存,结合DMA2D控制器可以实现性能不错的液晶显示功能。
除第16~17章介绍的SDRAM和LTDC控制器外,其他章节的内容都适用于STM32F4系列的微控制器,如STM32F407微控制器。本书所有设计程序均已在Keil MDK 5.20环境下测试通过,读者可以放心使用。
本书包含配套资源,读者可登录华信教育资源网(www.hxedu.com.cn)免费下载。
特别感谢电子工业出版社的编辑在本书的出版过程中给予作者的指导和大力支持。
由于本书涉及的知识面广,时间又仓促,以及作者的水平和经验有限,书中的疏漏之处在所难免,恳请专家和读者批评指正。
作 者
展开