内容简介
随着物联网、无人飞行器、机器人等技术与产业的飞速发展,嵌入式系统的重要性愈发凸显。本书主要介绍ARM Cortex-M3结构的STM32F103ZET6应用开发技术。主要内容包括Cortex-M3与STM32F103ZET6的硬件架构,分层软件架构与设计方法,以及片上外设GPIO、中断控制器、DMA、UART、TIMER、FSMC、I2C、SPI和ADC的编程技术。本书通过引入软件工程UML,以及综合性项目的分析、设计案例,以综合性项目“智慧教室”的开发技术为主线,将CPU与外设之间的程序查询、中断和DMA通信方式,线程(或任务)之间的同步、互斥、消息和共享变量等各种通信技术,面向对象的类图、序列图、状态机的UML软件建模方法,以及嵌入式编程中常用的一些软件设计技巧适当地安排在项目实战或编程举例中,拓展读者思维,丰富读者工程经验;通过分层架构、面向对象的设计思想和良好的编码规范,提升读者复杂工程的软件建模、设计与开发能力。
目录
目录
第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 寄存