内容简介
随着物联网、无人飞行器、机器人等技术与产业的飞速发展,嵌入式系统的重要性愈发凸显。本书主要介绍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
前言/序言
前言
嵌入式系统已经渗透到现代社会的方方面面中,日常生活中的家用电器、现代化交通工具、工厂里的自动化生产流水线,无不依赖于嵌入式系统发挥作用。随着物联网、无人飞行器、机器人等技术与产业的飞速发展,嵌入式系统的重要性愈发凸显,其应用领域也在不断扩展和深化,从智能家居中的温控系统到无人驾驶汽车中的感知与控制模块,从工业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 提供的信号量,实现应用层