本书以工程实践和应用设计作为主线,以工业领域常用的32位ARM Cortex-M3处理器STM32F103系列为核心,重点阐述了嵌入式系统设计过程中的共性方法和共性关键技术。在讲解嵌入式系统设计方法和原理的过程中,融入了作者在嵌入系统设计方面的科研成果和开发经验,具有理论与实践、软件与硬件、科研与教学的有机结合并协同交互之特色。便于读者通过具体的工程实践案例,轻松掌握枯燥的理论知识、复杂的设计方法,在实践中全面掌握嵌入式系统的基本原理、设计方法和接口技术,以建立和提高对复杂嵌入式系统的抽象能力。
前 言
嵌入式系统是一种专用的计算机系统,具有体积小、功耗低、计算资源丰富、网络通信功能强、软硬件资源可裁剪等特点,涉及人类生活的方方面面。嵌入式系统可独立运行与应用,也可作为智能装置或设备的一部分,在汽车电子、消费电子、航空航天、现代电力行业、医疗仪器、工业仪器仪表及其智能装备等领域应用极为广泛。
近年来,嵌入式系统得到了广泛的应用和飞速的发展,涉及人类生活、工作和学习的各个方面。据不完全统计,一个人一天当中会接触到50多个嵌入式系统设备。由于嵌入式系 前 言
嵌入式系统是一种专用的计算机系统,具有体积小、功耗低、计算资源丰富、网络通信功能强、软硬件资源可裁剪等特点,涉及人类生活的方方面面。嵌入式系统可独立运行与应用,也可作为智能装置或设备的一部分,在汽车电子、消费电子、航空航天、现代电力行业、医疗仪器、工业仪器仪表及其智能装备等领域应用极为广泛。
近年来,嵌入式系统得到了广泛的应用和飞速的发展,涉及人类生活、工作和学习的各个方面。据不完全统计,一个人一天当中会接触到50多个嵌入式系统设备。由于嵌入式系统涉及的应用领域非常广泛,彼此之间的特点也相当明显。例如,智能手机、PDA、车载导航、工控、军工、多媒体通信终端、网关、数字电视等。针对不同的应用领域,微处理器的选型、接口技术、集成开发环境、操作系统及应用软件等方面有很大的差异。组织和编写一部能够反映嵌入式系统共性技术的教材,以满足学生和工程技术人员在短期内掌握嵌入式系统的原理和设计方法的学习需求就显得尤为重要。作者经过广泛调研和论证,结合近十年在嵌入式技术领域的教学实践经验、嵌入式系统设计方面的科研经历和长期指导各项电子设计类竞赛经验,将理论与实践、软件与硬件、科研成果与教学经验有机融合,编写此教材。本书的章节设置和内容安排便于读者通过具体的工程案例轻松掌握枯燥的理论知识、复杂的设计方法,在实践中全面掌握嵌入式系统的基本原理、设计方法和接口技术,以建立和提高对复杂嵌入式系统的抽象能力。
本书分为9章,第1~4章介绍嵌入式系统设计和开发的基础知识、基本方法及相关开发工具。第5~9章以STM32系列微处理器为核心,结合嵌入式系统设计和开发中的共性关键技术,通过工程案例学习和掌握嵌入式系统的基本原理及在工程应用中涉及的通用技术、设计思想和方法。作者力图通过本书的学习和实践,引导读者既能快速入门,全面掌握嵌入式系统的基本原理和应用开发方法,又达到举一反三的目的,拓展嵌入式系统的设计理念和方法,为今后从事更先进的嵌入式系统设计和开发打下扎实的基础。
本书理论联系实际、内容新颖,可供普通高等院校通信工程、电子科学与技术、计算机科学与技术、控制科学与工程领域的本科生或硕士生作为嵌入式系统课程教学教材,也可供嵌入式领域技术人员学习参考。
由于作者水平有限,书中错误和不当之处在所难免,敬请读者批评指正。
本书涉及的工程案例来源于作者的科研项目,相关项目得到国家自然科学基金“基于仿生视觉感知机理的金属板带表面缺陷在线检测方法研究”(61273170)、教育部博士点基金“水下目标检测识别与跟踪若干问题研究”(20120094120023)和常州市机器人与智能装备科技专项“基于机器视觉的铜带表面缺陷在线检测系统”(CE20120101)的资助,在此表示感谢!
作 者
张学武,河海大学物联网工程学院副院长,主要从事仿生智能传感与计算、图像处理与计算机视觉等方面的研究。目前主持国家自然科学基金(面上项目)、教育部高等学校博士学科点专项科研基金和常州市机器人和智能装备科技专项各1项。在国内外期刊和国际学术会议上发表论文70 余篇,其中SCI/EI/ISTP三大检索论文30 余篇。获授权中国发明专利10 项,获授权计算机软件著作权10 项。获河海大学青年教师讲课竞赛二等奖,第十届全国“挑战杯”大学生课外科技学术竞赛教师优秀指导教师、获中国电子学会通信电子信息类实践教学成果一等奖1 项、获中国电子学会电子信息科学技术三等奖1 项。
第1章 绪 论 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的概述 1
1.1.2 嵌入式系统的特征 2
1.1.3 嵌入式系统的组成 5
1.1.4 嵌入式系统的现状及发展趋势 6
1.2 嵌入式处理器 8
1.2.1 哈佛结构和冯诺依曼结构 8
1.2.2 CISC指令集与RISC指令集 9
1.2.3 x86指令集和ARM指令集 11
1.2.4 通用处理器(x86)与嵌入式处理器(ARM)小结 12
1.2.5 嵌入式处理器的分类 13
1.3 嵌入式操作系统 16
1.3.1 嵌入式操作系统的概述 16
1.3.2 常见的嵌入式操作系统 16
第1章 绪 论 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的概述 1
1.1.2 嵌入式系统的特征 2
1.1.3 嵌入式系统的组成 5
1.1.4 嵌入式系统的现状及发展趋势 6
1.2 嵌入式处理器 8
1.2.1 哈佛结构和冯诺依曼结构 8
1.2.2 CISC指令集与RISC指令集 9
1.2.3 x86指令集和ARM指令集 11
1.2.4 通用处理器(x86)与嵌入式处理器(ARM)小结 12
1.2.5 嵌入式处理器的分类 13
1.3 嵌入式操作系统 16
1.3.1 嵌入式操作系统的概述 16
1.3.2 常见的嵌入式操作系统 16
第2章 嵌入式系统工程设计概述 20
2.1 嵌入式系统设计的基本流程 20
2.1.1 需求分析 20
2.1.2 详细说明 21
2.1.3 结构设计 21
2.1.4 组件设计 24
2.1.5 系统集成 25
2.2 嵌入式系统设计的流程模型 26
2.2.1 瀑布模型 26
2.2.2 逐步求精模型 27
2.2.3 螺旋模型 27
2.3 嵌入式系统的开发模式 28
2.3.1 面向硬件的开发模式 29
2.3.2 面向软件的开发模式 29
2.3.3 两种开发模式的区别与联系 29
第3章 ARM嵌入式处理器 31
3.1 ARM嵌入式处理器简介 31
3.1.1 ARM处理器的特点 32
3.1.2 ARM体系结构的版本及系列 32
3.1.3 ARM处理器核系列 34
3.1.4 综述 40
3.2 ARM Cortex-M3处理器简介 41
3.2.1 概述 41
3.2.2 寄存器组 42
3.2.3 操作模式和特权级别 44
3.2.4 向量中断控制器 45
3.2.5 存储器映射 46
3.2.6 总线接口 46
3.2.7 存储器保护单元 47
3.2.8 指令集 47
3.2.9 中断和异常 48
3.2.10 调试支持 49
3.3 Cortex-M3指令系统与汇编语言基础 49
3.3.1 汇编语言基础 49
3.3.2 指令集 52
3.3.3 汇编语言初步应用 56
第4章 嵌入式系统的开发环境 66
4.1 嵌入式集成开发环境 67
4.1.1 嵌入式集成开发环境概述 67
4.1.2 嵌入式系统集成开发环境的组成 69
4.2 常见的嵌入式开发环境 70
4.2.1 Keil 70
4.2.2 IAR Embedded Workbench 71
4.2.3 TKStudio 73
4.2.4 GCC 80
4.2.5 其他开发环境 80
4.3 ARM嵌入式集成开发环境的对比与选择 82
4.3.1 主要ARM嵌入式集成开发环境的对比 82
4.3.2 ARM嵌入式集成开发环境的选择 85
4.4 开发调试工具 85
4.4.1 JTAG仿真器 85
4.4.2 其他开发调试工具 89
第5章 STM32系列微控制器开发基础 90
5.1 STM32系列微控制器概述 90
5.1.1 STM32系列微控制器概述 90
5.1.2 STM32系列微控制器的优势 91
5.1.3 STM32系列微控制器的应用 91
5.2 STM32F103系列微控制器 92
5.2.1 主要特点 92
5.2.2 总体结构 94
5.2.3 功能概述 97
5.2.4 片上外设概述 99
5.3 基于标准外设库的软件开发 103
5.3.1 STM32标准外设库概述 103
5.3.2 使用标准外设库开发的优势 104
5.3.3 STM32F10xxx标准外设库结构与文件描述 104
5.3.4 STM32F10xxx标准外设库的使用 108
5.4 使用Keil MDK以及标准外设库创建STM32工程 116
5.4.1 开发工具与开发环境 117
5.4.2 MDK的操作与设置 118
5.4.3 使用Keil MDK运行第一个STM32F10x程序 125
第6章 STM32系列微控制器 存储器与外设 137
6.1 存储器和总线结构 137
6.1.1 系统结构 137
6.1.2 存储器组织 139
6.1.3 存储器映射 139
6.1.4 启动配置 140
6.2 电源控制 141
6.2.1 电源 141
6.2.2 电源管理 143
6.2.3 低功耗模式 144
6.2.4 睡眠模式 145
6.2.5 停止模式 146
6.2.6 待机模式 147
6.2.7 低功耗模式下的自动唤醒(AWU) 148
6.3 复位和时钟 149
6.3.1 复位 149
6.3.2 时钟 150
6.4 GPIO 155
6.4.1 GPIO简介 155
6.4.2 GPIO功能描述 156
6.4.3 GPIO配置 157
6.5 中断和事件 158
6.5.1 嵌套向量中断控制器 158
6.5.2 外部中断/事件控制器 161
6.6 DMA控制器 166
6.6.1 简介 166
6.6.2 功能描述 167
6.6.3 DMA应用实例 171
第7章 嵌入式系统接口应用基础 173
7.1 嵌入式系统的接口类型 173
7.2 嵌入式系统的电平匹配 174
7.2.1 电平匹配概述 174
7.2.2 接口相关电路及概念 177
7.2.3 电平匹配的电路设计 180
7.3 嵌入式系统通信形式的匹配 184
7.4 嵌入式系统的电气隔离 185
7.4.1 电气隔离概述 185
7.4.2 供电系统的隔离 186
7.4.3 数字信号的隔离 187
7.4.4 模拟信号的隔离 193
7.4.5 嵌入式系统的电气隔离设计 198
7.5 嵌入式系统接口的保护 199
7.5.1 嵌入式系统接口的电源保护 199
7.5.2 静电保护 201
7.6 嵌入式系统接口的控制方式 202
7.6.1 程序轮询方式 202
7.6.2 中断处理方式 202
7.6.3 直接存储器存取DMA传送方式 202
第8章 基于STM32系列微控制器的接口应用实践 204
8.1 USART串行接口及其应用 204
8.1.1 USART串行接口简介 204
8.1.2 STM32F10x系列USART功能描述 206
8.1.3 STM32 USART接口应用实例 214
8.2 SPI串行接口及其应用 218
8.2.1 SPI串行接口简介 218
8.2.2 STM32 SPI功能描述 222
8.2.3 STM32 SPI总线应用实例 223
8.3 I2C总线及其应用 225
8.3.1 I2C总线简介 225
8.3.2 STM32 I2C简介 228
8.3.3 STM32 I2C功能描述 229
8.3.4 STM32 I2C总线应用实例 233
8.4 CAN总线及其应用 240
8.4.1 CAN总线简介 240
8.4.2 CAN总线的系统结构及数据传输 241
8.5 STM32 bxCAN 244
8.5.1 功能特点 244
8.5.2 bxCAN总体描述 245
8.5.3 bxCAN工作模式 246
8.5.4 测试模式 247
8.5.5 bxCAN功能描述 248
8.6 FSMC接口及其应用 254
8.6.1 STM32 FSMC 254
8.6.2 STM32 FSMC外部设备地址映像 256
8.6.3 FSMC应用实例 257
8.7 USB串行接口及其应用 264
8.7.1 USB总线概述 264
8.7.2 USB总线数据传输 266
8.7.3 USB OTG 266
8.7.4 USB接口器件 267
8.7.5 STM32 USB功能描述 267
8.8 1-Wire单总线及其应用 269
8.8.1 1-Wire单总线及其连接 269
8.8.2 1-Wire单总线器件DS18B20的应用 271
8.8.3 基于STM32的DS18B20操作实例 275
8.9 数据采集接口及其应用设计 279
8.9.1 数据采集概述 279
8.9.2 数据采集系统的结构 280
8.9.3 A/D转换器的量化与编码 286
8.9.4 STM32F10x 系列内置ADC简介 288
8.9.5 STM32F10x 系列内置ADC功能描述 289
8.10 常用人机交互接口及其应用设计 293
8.10.1 常用键盘接口设计 293
8.10.2 LED显示器件及接口设计 297
8.10.3 串口屏 300
第9章 嵌入式系统工程开发实战 302
9.1 需求分析 302
9.1.1 需求背景 302
9.1.2 主要功能 303
9.2 详细说明 303
9.3 结构设计 304
9.3.1 系统架构设计 304
9.3.2 主要元器件与开发平台的选择 305
9.3.3 主要功能模块的连接 307
9.3.4 控制器最终结构 308
9.4 组件设计 308
9.4.1 硬件电路的设计 308
9.4.2 主要软件部分的设计 318
9.4.3 控制器的PCB设计 327
9.5 系统集成 328
9.5.1 子功能模块之间的集成 328
9.5.2 系统的集成测试 328
参考文献 329