编辑推荐:
目录
第1 章 嵌入式系统概述 1
1.1 学习目标 1
1.2 嵌入式系统的概念 1
1.3 嵌入式系统的组成 2
1.3.1 嵌入式系统的硬件组成 2
1.3.2 嵌入式系统的软件组成 3
1.4 嵌入式系统的应用领域 4
1.5 嵌入式系统的发展 4
1.6 嵌入式系统的操作系统 5
1.6.1 嵌入式系统的操作系统分类 5
1.6.2 嵌入式系统的操作系统功能 6
1.7 常用嵌入式系统的操作系统介绍 7
1.7.1 μC/OS 7
1.7.2 VxWorks 7
1.7.3 FreeRTOS 8
1.7.4 RT-Thread 8
1.7.5 Embedded Linux 8
1.7.6 Android 9
1.7.7 LiteOS 9
1.8 习题 9
第2 章 嵌入式系统开发过程及分层架构 10
2.1 学习目标 10
2.2 嵌入式系统开发过程 10
2.3 软件系统分层架构 11
2.3.1 为什么需要分层 11
2.3.2 软件系统分层的概念 13
2.4 驱动层与应用层的交互 14
2.5 裸机工程结构与分层架构设计 14
2.5.1 STM32CubeMX 生成的裸机工程目录结构 14
2.5.2 裸机工程的启动过程 15
2.5.3 裸机工程的分层架构设计 16
2.6 基于LiteOS 的嵌入式系统分层架构设计 17
2.7 分层架构实验 18
2.7.1 寄存器编程 18
2.7.2 LiteOS 编程 21
2.8 习题 23
第3 章 嵌入式系统开发基础 24
3.1 学习目标 24
3.2 CPU 与外设的通信方式 24
3.2.1 CPU 与外设的接口 25
3.2.2 外设寻址与外设寄存器变量 27
3.2.3 单个外设寄存器变量的定义 27
3.2.4 地址连续的多个外设寄存器变量定义 27
3.3 位运算 28
3.4 软件建模语言UML 29
3.4.1 类图 29
3.4.2 用例图 32
3.4.3 活动图 33
3.4.4 序列图 34
3.4.5 状态图 35
3.5 LiteOS 开发基础 36
3.5.1 LiteOS 的内核架构 36
3.5.2 LiteOS 的目录结构 37
3.5.3 LiteOS 的启动过程 38
3.5.4 LiteOS 任务及其创建 39
3.6 习题 41
第4 章 Cortex-M3 与STM32F103ZET6 42
4.1 学习目标 42
4.2 Cortex-M3 介绍 43
4.2.1 Cortex-M3 的架构 43
4.2.2 Cortex-M3 寄存器 43
4.2.3 Cortex-M3 的工作模式和特权级别 44
4.2.4 指令集 45
4.2.5 指令流水线 45
4.3 STM32F103ZET6 介绍 46
4.3.1 STM32F103ZET6 架构 46
4.3.2 STM32F103ZET6 时钟 47
4.3.3 STM32F103ZET6 存储器映射 51
4.3.4 STM32F103ZET6 引脚定义 52
4.4 习题 59
第5 章 GPIO编程 60
5.1 学习目标 60
5.2 信号类型 60
5.3 STM32F103ZET6 GPIO 特性 61
5.4 GPIO 的端口结构 61
5.5 GPIO 的工作模式 63
5.6 GPIO 的复用功能AFIO 63
5.7 GPIO 与AFIO 相关寄存器 63
5.7.1 工作方式配置寄存器GPIOx_CRL 与GPIOx_CRH 64
5.7.2 输入数据寄存器GPIOx_IDR 65
5.7.3 输出数据寄存器GPIOx_ODR 65
5.7.4 位置位/复位寄存器GPIOx_BSRR 66
5.7.5 位复位寄存器GPIOx_BRR 66
5.7.6 锁定寄存器GPIOx_LCKR 67
5.7.7 事件控制寄存器AFIO_EVCR 67
5.7.8 外部中断控制寄存器AFIO_EXTICRx 68
5.7.9 引脚映射寄存器AFIO_MAPR 69
5.7.10 GPIO 寄存器映射 72
5.8 AFIO 寄存器映射 72
5.9 GPIO 编程方法 73
5.9.1 寄存器编程方法 73
5.9.2 库函数编程方法 74
5.10 GPIO 编程举例 77
5.10.1 寄存器编程举例 77
5.10.2 库函数编程举例 79
5.11 项目实战——智慧教室:人走关扇熄灯 82
5.11.1 项目需求 82
5.11.2 实验环境 82
5.11.3 人体红外检测传感器的工作原理 83
5.11.4 系统分析 84
5.11.5 系统设计 85
5.11.6 LiteOS+库函数编程 87
5.11.7 系统实现 88
5.12 习题 96
第6 章 中断控制 97
6.1 学习目标 97
6.2 中断的工作原理 97
6.2.1 NVIC 中断控制器 98
6.2.2 NVIC 中断相关寄存器 103
6.2.3 EXTI 外部中断控制器 110
6.3 STM32F103ZET6 异常与中断向量表 114
6.4 裸机工程默认的中断设置 117
6.5 中断编程方法 118
6.5.1 寄存器编程方法 118
6.5.2 库函数编程方法 121
6.6 中断编程举例 128
6.6.1 寄存器编程举例 128
6.6.2 库函数编程举例 129
6.7 项目实战——按键报警 129
6.7.1 项目需求 129
6.7.2 实验环境 130
6.7.3 系统分析 130
6.7.4 系统设计 131
6.7.5 系统实现 134
6.8 习题 144
第7 章 DMA 编程 146
7.1 学习目标 146
7.2 DMA 的工作原理 146
7.3 DMA 的主要特性 147
7.4 DMA 处理 148
7.4.1 通道 148
7.4.2 数据宽度与数据对齐方式 149
7.4.3 中断 150
7.4.4 错误管理 150
7.4.5 DMA 的工作模式 151
7.4.6 DMA 请求的处理流程 151
7.5 DMA 寄存器 152
7.6 DMA 寄存器映射 152
7.7 DMA 的编程方法 153
7.7.1 库函数接口 153
7.7.2 库函数编程方法 154
7.8 DMA 编程举例 155
7.9 习题 160
第8 章 UART 通信 161
8.1 学习目标 161
8.2 STM32F103ZET6 USART概述 161
8.3 STM32F103ZET6 UART 的特性 162
8.4 STM32F103ZET6 UART 的工作原理 162
8.5 串行通信帧格式 163
8.6 波特率的生成 164
8.7 多处理器模式 165
8.8 USART 寄存器 166
8.9 USART 寄存器映射 171
8.10 UART 编程方法 172
8.10.1 寄存器编程方法 172
8.10.2 库函数编程方法 173
X 嵌入式系统开发与实战
8.11 UART 编程举例 175
8.11.1 寄存器编程举例 175
8.11.2 库函数编程举例 178
8.11.3 printf()输出重定向 184
8.12 项目实战——智慧教室系统人机交互调试接口 184
8.12.1 项目需求 184
8.12.2 实验环境 185
8.12.3 系统分析 185
8.12.4 系统设计 186
8.12.5 系统实现 189
8.13 习题 199
第9 章 定时器 200
9.1 学习目标 200
9.2 定时器的基本工作原理 200
9.3 计数模式 201
9.3.1 上计数 201
9.3.2 下计数 201
9.3.3 上/下计数 202
9.4 定时事件 203
9.4.1 溢出事件 203
9.4.2 更新事件 203
9.4.3 比较事件 203
9.4.4 捕获事件 204
9.5 PWM 204
9.6 死区 204
9.7 STM32F103ZET6 的定时器类型 205
9.8 基本定时器(TIM6 和TIM7) 205
9.8.1 主要特性 206
9.8.2 计数时序与更新事件 206
9.8.3 自动重装载值的计算 207
9.8.4 基本定时器寄存器 207
9.8.5 基本定时器寄存器映射 210
9.9 高级定时器(TIM1 和TIM8) 211
9.9.1 主要特性 211
9.9.2 重复计数器 212
9.9.3 计数时钟源 212
9.9.4 输入捕获 213
9.9.5 输出比较 214
9.9.6 生成PWM 信号 214
9.9.7 高级定时器寄存器 218
9.9.8 高级定时器寄存器映射 218
9.10 通用定时器 219
9.11 系统节拍定时器SysTick 220
9.11.1 系统节拍定时器的工作原理 220
9.11.2 系统节拍定时器寄存器 221
9.11.3 系统节拍定时器寄存器映射 222
9.11.4 裸机工程对系统节拍定时器的使用 222
9.12 看门狗定时器 223
9.12.1 独立看门狗IWDG 223
9.12.2 窗口看门狗WWDG 225
9.13 定时器编程方法 229
9.13.1 库函数接口 229
9.13.2 库函数编程方法 234
9.14 定时器编程举例 234
9.14.1 基本定时器编程举例 234
9.14.2 高级定时器编程举例 238
9.15 项目实战——人体智慧检测 243
9.15.1 项目需求 243
9.15.2 实验环境 244
9.15.3 步进电机的工作原理与工作方式 244
9.15.4 系统分析 245
9.15.5 系统设计 247
9.15.6 系统实现 249
9.16 习题 256
第10 章 FSMC 编程 257
10.1 学习目标 257
10.2 FSMC 控制概述 257
10.3 FSMC 功能框图 258
10.4 各类存储器地址映射 259
10.5 NOR Flash 和PSRAM 控制器 260
10.5.1 支持的存储器类型 260
10.5.2 读/写时序 260
10.6 FSMC NOR/PSRAM 控制器寄存器 261
10.7 寄存器映射 261
10.8 FSMC 编程方法 262
10.8.1 库函数接口 262
10.8.2 库函数编程方法 263
10.9 FSMC 编程举例 264
10.9.1 IS62WV51216BLL芯片介绍 265
10.9.2 利用库函数读/写SRAM 267
10.10 习题 272
第11 章 I2C 编程 273
11.1 学习目标 273
11.2 I2C 协议简介 273
11.2.1 I2C 网络 274
11.2.2 I2C 总线信号与时序 274
11.2.3 I2C 设备地址格式 275
11.2.4 I2C 数据传送过程 276
11.3 STM32F103ZET6 I2C 的工作原理 277
11.3.1 主要特性 277
11.3.2 功能结构 277
11.3.3 工作方式 278
11.3.4 通信故障 283
11.3.5 SDA/SCL 控制 283
11.3.6 中断 284
11.4 I2C 寄存器 284
11.5 I2C 寄存器映射 285
11.6 I2C 编程方法 285
11.6.1 库函数接口 285
11.6.2 库函数编程方法 287
11.7 I2C 编程举例 288
11.7.1 AT24C02 EEPROM介绍 288
11.7.2 基于程序查询方式 289
11.7.3 基于中断方式 292
11.8 项目实战——智慧教室:温度控制 298
11.8.1 项目需求 298
11.8.2 实验环境 298
11.8.3 AHT10 温湿度传感器简介 299
11.8.4 系统分析 300
11.8.5 系统设计 301
11.8.6 系统实现 303
11.9 习题 311
第12 章 串行外设接口SPI 312
12.1 学习目标 312
12.2 SPI 的功能及主要特性 312
12.3 SPI 的工作原理 313
12.3.1 SPI 功能框图 313
12.3.2 SPI 的工作模式 314
12.3.3 SPI 用作主设备 315
12.3.4 SPI 用作从设备 315
12.3.5 状态标志 315
12.3.6 DMA 传输 316
12.4 寄存器 316
12.5 寄存器映射 317
12.6 SPI 编程方法 317
12.6.1 库函数接口 317
12.6.2 库函数编程方法 318
12.7 SPI 编程举例 319
12.8 项目实战——智慧教室:OLED 显示教室温湿度 320
12.8.1 项目需求 320
12.8.2 实验环境 320
12.8.3 OLED SSD1306 介绍 321
12.8.4 系统分析 324
12.8.5 系统设计 324
12.8.6 系统实现 325
12.9 习题 334
第13 章 模数转换器ADC 335
13.1 学习目标 335
13.2 ADC 的主要特性 335
13.3 ADC 的功能结构与基本概念 336
13.3.1 ADC 转换的触发方式 337
13.3.2 模拟信号输入通道 337
13.3.3 通道序列/通道分组 337
13.3.4 规则序列与注入序列 337
13.3.5 自动注入 338
13.3.6 序列的定义与转换结果的保存 338
13.4 ADC 的工作方式 338
13.5 注入序列转换的启动方式 339
13.6 中断和DMA 339
13.7 ADC 的时钟与采样时间 340
13.8 ADC 的触发 340
13.9 数据对齐 342
13.10 校准 342
13.11 模拟看门狗 342
13.12 转换结果 343
13.13 ADC 寄存器 343
13.14 ADC 寄存器映射 343
13.15 ADC 编程方法 344
13.15.1 库函数接口 344
13.15.2 库函数编程方法 346
13.16 ADC 编程举例 346
13.16.1 使用STM32CubeMX配置ADC 347
13.16.2 使用STM32CubeMX生成代码 349
13.16.3 电位器驱动 351
13.17 项目实践——智慧教室:光照强度控制 353
13.17.1 项目需求 353
13.17.2 实验环境 353
13.17.3 光照强度传感器——光敏电阻特性 353
13.17.4 系统分析 355
13.17.5 系统设计 356
13.17.6 系统实现 359
13.18 习题 368
展开
前言
嵌入式系统已经渗透到现代社会的方方面面中,日常生活中的家用电器、现代化交通工具、工厂里的自动化生产流水线,无不依赖于嵌入式系统发挥作用。随着物联网、无人飞行器、机器人等技术与产业的飞速发展,嵌入式系统的重要性愈发凸显,其应用领域也在不断扩展和深化,从智能家居中的温控系统到无人驾驶汽车中的感知与控制模块,从工业4.0 中的智能生产线到医疗设备中的精准监测系统,从地面飞驰的动车监控系统到空中飞行的各种航空航天器控制系统,嵌入式系统正以其强大的功能,高效、可靠、灵活的特性,深刻改变着人们的生活和工作方式。
因此,学好嵌入式系统编程,是计算机类、电子信息类、自动化类等专业学生构建核心竞争力的关键路径,对于提升学生在物联网、智能制造、汽车电子、机器人、无人机、家用电器等高需求领域的就业竞争力有着重要意义,而且对于提升学生跨领域技术整合能力,以及在人工智能终端、工业互联网等新兴行业的职业发展优势有着不可替代的实践价值。
但是,由于嵌入式系统软硬件结合的特点,许多学生在学习嵌入式系统过程中备感困难,特别是当有多个外部设备需要监控时,更是“云里雾里”,厘不清程序流程,不能进行复杂工程的设计开发。
本书通过引入软件工程UML,以及综合性项目的分析、设计案例,尝试解决学生的这些困惑,帮助学生系统地掌握嵌入式系统开发的核心知识和高阶实践技能。
本书有如下特色。
(1)以面向对象的编程思想阐述项目设计方法,利用软件工程UML 将设计思想图形化,进行复杂系统的分析、建模,让读者能“看到”程序是如何运行的,以及各模块、各对象是如何协作完成所需要的功能的,方便读者理解、分析复杂的程序代码,提高读者的项目设计开发能力。
(2)以综合性项目——“智慧教室”为主线,将各知识点和开发技术分解到项目的各个功能模块中,让读者不仅能掌握基本原理,还能知道所学知识有何用及如何用,更加明确学习目标,提高学习兴趣。
(3)在每个项目实战案例中,都包含系统分析、系统设计和系统实现三部分内容,通过系统分析和系统设计,让读者学会如何基于需求去分析、设计系统,而且在系统设计中会给出多条技术路线,拓宽读者思路,使读者融会贯通。
(4)基于华为物联网操作系统LiteOS 进行工程项目设计,让读者能够与时俱进,紧跟技术发展热点。
(5)在每个项目实战案例中都会给出设计要点,以提高读者的代码编写技巧。
(6)以熟悉寄存器编程技术为基础,以掌握库函数编程技术为进阶,以融会面向对象的设计思想为目标,让读者既能够理解嵌入式系统的底层逻辑,打牢基础,又能够应对企业对工程师开发能力的要求,提升读者就业竞争力。
本书共13 章,分为两部分。
第一部分从系统层面介绍嵌入式系统,让读者从顶层对嵌入式系统的概念、软硬件组成与架构、发展、开发过程有一个总体认识,同时,介绍了面向对象的建模方法、系统对象的构成,为后面的项目设计打下基础。第一部分由第1~3 章构成。第1 章主要介绍嵌入式系统的概念、软硬件组成、应用领域和发展。第2 章主要介绍嵌入式系统开发过程、分层架构。第3 章介绍嵌入式系统开发基础,内容包括CPU 与外设的通信方式、位运算、软件建模语言UML、LiteOS开发基础等。
第二部分讲述ARM 架构的STM32F103ZET6 嵌入式芯片的具体应用开发技术,由第4~13 章组成。第4 章介绍了Cortex-M3,以及STM32F103ZET6 架构。第5 章介绍GPIO 接口原理,以及利用GPIO 实现开关量的输入和输出编程技术,并以智慧教室的“人走关扇熄灯”模块为例讲解软件设计方法。在第5 章中,读者可以初步接触到如何利用UML 类图、序列图进行软件建模的方法,同时还可以学习到人体红外检测传感器和直流电机的监控方法。第6 章介绍了中断控制,通过“按键报警”项目实战案例讲解中断的编程技术,利用UML 序列图,让读者更好地理解中断服务线程与应用层线程交换信息的过程。在第6 章中,读者还可以学习到创建、挂起、恢复LiteOS 任务的方法。第7 章介绍DMA 编程,并以内存之间的高速数据传送为例讲解中断与DMA 的编程技术,为后续章节学习外设的DMA 接口及其应用打下基础。第8 章介绍UART 通信,以智慧教室的“人机交互调试接口”模块为例讲解串口通信编程技术,从中读者还可以学习到缓冲区和消息队列的应用,以及寄存器编程时的线程同步/互斥方法。第9 章介绍各类定时器的工作原理,并以智慧教室的“人体智慧检测”模块为例讲解定时器的编程技术,从中读者还可以学习到使用状态机进行复杂系统的建模技术,以及步进电机的控制方法。
第10 章介绍FSMC 接口工作原理,以IS62WV51216BLL 为例讲解利用FSMC 进行SRAM 存储器的读/写编程技术。第11 章介绍I2C 接口原理,以智慧教室的“温度控制”模块为例讲解I2C 的DMA 接口编程技术,从中读者还可以学习到利用LiteOS 提供的信号量,实现应用层和中断服务线程之间的同步技术,以及温度传感器AHT10 的应用技术。第12 章介绍SPI 接口技术,以智慧教室中的“OLED 显示教室温湿度”模块为例讲解其应用技术,这里可以学习到如何利用库函数提供的SPI 查询通信接口实现发送数据的方法,以及OLED SSD1306 的使用方法。
第13 章介绍模数转换器ADC 的接口原理,以智慧教室的“光照强度控制”模块为例讲解ADC的DMA 库函数接口应用技术,从中还可以学习到光敏传感器的工作原理与非线性传感器的数据拟合方法。
本书第5 章的GPIO 编程、第6 章的中断控制和第8 章的UART 通信同时示范了寄存器编程方法和LiteOS+库函数编程方法与代码,其他章节的外设编程,包括TIM、DMA、I2C、SPIT和ADC,只给出了LiteOS+库函数编程方法,这样处理的目的与优点是既能够让学生学习嵌入式程序对外设接口监控的底层逻辑,又降低了学习难度,使学生能够把学习重点放在工作中所需要的库函数编程技术上。
总之,本书以综合性项目“智慧教室”的开发技术为主线,将CPU 与外设之间的程序查询、中断和DMA 通信方式,线程(或任务)之间的同步、互斥、消息和共享变量等各种通信技术,面向对象的类图、序列图、状态机的UML 软件建模方法,以及嵌入式编程中常用的一些软件设计技巧适当地安排在项目实战或编程举例中,拓展读者思维,丰富读者工程经验,通过分层架构、面向对象的设计思想和良好的编码规范,提升读者复杂工程的软件建模、设计与开发能力。
由于作者水平有限,书中难免会有疏漏之处,敬请同行专家和读者批评指正。
展开