
本书从嵌入式基础知识入手,介绍嵌入式系统的定义、基本组成、嵌入式系统最小系统及其工程应用等基本开发技术。全书共11章,内容主要包括嵌入式基础知识、Keil开发环境及调试方法、STM32F40x外设原理及控制方法、μC/OS-III实时操作系统原理及实践、FATFS文件系统、Linux系统开发环境、Linux系统命令及Vim使用、Linux系统应用程序开发基础、嵌入式Linux RK3399开发环境构建、嵌入式Linux系统驱动程序设计、嵌入式Linux Qt应用开发,每章都配有思考题及习题。 本书适合作为高等院校电气与电子信息类“嵌入式原理与应用”课程的教材,也可作为学习嵌入式应用基础的培训教材和自学参考书。
随着技术的发展,计算机出现了两个独立的发展方向,一个是通用计算机系统,另一个则是嵌入式计算机系统。通用计算机系统按照通用、高速的技术方向发展,而嵌入式计算机系统则在工业控制专用细分领域方面发展。 嵌入式系统是以应用为中心,以电子与计算机技术为基础,通过软硬件裁剪,设计出适用于对功能、成本、体积、功耗、可靠性、稳定性有严格要求的专用系统。嵌入式系统开发与应用涉及的内容比较多,综合能力要求比较强,想要在短时间内掌握嵌入式系统设计的理论知识和应用的难度较大。因此,本书定位于有MCS-51单片机、C语言基础的初学者,以工程应用能力培养为导向,在介绍嵌入式系统基本理论与原理的同时,通过工程案例重点讲述嵌入式理论与应用开发的结合,以案例化实训方式,使初学者在掌握嵌入式基本理论知识的同时,能快速上手嵌入式系统的开发与应用。 本书选材规范,通俗易懂,适合作为高等院校电气与电子信息类“嵌入式原理与应用”课程的教材,也可作为学习嵌入式应用基础的培训教材和自学参考书。建议上课总学时为45学时,其中授课25学时、实验20学时。同时,由于该课程的操作性较强,建议在计算机房采用广播式教学,理论与实验同步进行。另外,为了方便本课程的教学,本书配有多媒体教学课件、实验指导书及程序源码等资料,需要相关资料的读者可登录华信教育资源网www.hxedu.com.cn下载,也可与本书作者联系(E-mail:718754940@qq.com)。本书所有程序均在深圳信盈达科技有限公司M4开发板和RK3399开发板上验证通过。 本书为校企长期协同育人的合作成果,由东莞理工学院赖树明高级工程师、宋跃教授担任主编,陈志发、任斌、牛乐乐、韩清涛担任副主编,胡智元、温子祺、张小凤、侯周国、肖中俊、朱昌洪、神显豪参编。本书是东莞理工学院国家一流专业(电子信息工程)建设课程、国家首批一流课程(微机原理与单片机技术)建设子课程、广东省测控技术教学团队建设课程、广东省嵌入式测控技术课程群建设课程的配套教材。在本书编写过程中,得到了北京理工大学珠海学院信息学院、湖南人文科技学院信息学院、齐鲁工业大学、桂林航天工业学院、桂林理工大学等的大力支持,特表感谢;同时,对本书参考文献中被引用相关资料的所有作者深表谢意。 由于嵌入式技术的发展非常迅速,嵌入式应用的新技术、新成果不断涌现和更新,书中难免存在错误、疏漏和不妥之处,还希望广大读者批评指正,并能及时联系作者,以期在后续版本中加以完善。
第1章 嵌入式基础知识 1.1 嵌入式系统简介 1.1.1 嵌入式系统的定义 1.1.2 嵌入式系统的组成 1.1.3 嵌入式系统的特点 1.1.4 嵌入式系统的应用领域 1.2 嵌入式处理器基础知识 1.2.1 嵌入式处理器分类 1.2.2 嵌入式处理器体系结构 1.2.3 嵌入式处理器发展方向 1.3 ARM系列微处理器介绍 1.3.1 ARM系列微处理器分类 1.3.2 ARM Cortex系列微处理器 1.4 ST公司系列微控制器介绍 1.4.1 STM32微控制器简介 1.4.2 STM32F1xx系列 1.4.3 STM32F2xx系列 1.4.4 STM32F4xx系列 1.4.5 STM32微控制器芯片命名规则 1.4.6 STM32F407ZGT6简介 1.5 STM32F40x最小系统 思考题及习题 第2章 Keil开发环境及调试方法 2.1 嵌入式系统开发环境概述 2.1.1 MDK5简介 2.1.2 基于CMSIS应用程序的基本架构 2.2 嵌入式系统开发环境搭建 2.2.1 需要安装的软件 2.2.2 软件安装过程 2.3 嵌入式系统开发环境调试方法 2.3.1 创建工程 2.3.2 Keil开发环境调试方法 思考题及习题 第3章 STM32F40x外设原理及控制方法 3.1 时钟系统原理 3.1.1 STM32F40x框架分析 3.1.2 STM32F40x时钟系统分析 3.1.3 时钟系统相关寄存器 3.1.4 代码配置时钟系统 3.2 GPIO模块原理 3.2.1 GPIO框架分析 3.2.2 GPIO核心寄存器分析 3.2.3 位带操作 3.2.4 STM32F407ZGT6时钟使能寄存器 3.2.5 STM32F40x模块控制寄存器表示 3.2.6 GPIO驱动示例 3.3 中断模块原理 3.3.1 中断的相关概念 3.3.2 中断框架分析 3.3.3 ARM公司通用的NVIC中断配置函数 3.3.4 STM32F40x外部中断 3.3.5 STM32F40x外部中断核心寄存器 3.3.6 STM32F40x外部中断GPIO映射寄存器 3.3.7 STM32F40x外部中断编程 3.3.8 按键中断示例 3.4 定时器模块原理 3.4.1 定时器框架分析 3.4.2 基本定时器的核心寄存器 3.4.3 基本定时器示例 3.5 UART模块原理 3.5.1 通信概述 3.5.2 UART通信接口 3.5.3 UART模块框架分析 3.5.4 UART核心寄存器 3.5.5 UART模块编程示例 3.6 I2C通信模块原理 3.6.1 I2C总线概述 3.6.2 I2C总线协议 3.6.3 I2C总线编程实现 3.6.4 I2C总线应用实例 3.7 SPI通信模块原理 3.7.1 SPI总线概述 3.7.2 SPI通信模块框架分析 3.7.3 SPI通信模块核心寄存器 3.7.4 SPI通信模块示例 3.8 ADC模块原理 3.8.1 ADC模块介绍 3.8.2 ADC模块框架分析 3.8.3 ADC模块核心寄存器 3.8.4 ADC模块应用示例 3.9 DMA模块原理 3.9.1 DMA概述 3.9.2 DMA主要特点 3.9.3 DMA模块框架分析 3.9.4 如何使用DMA 3.9.5 DMA模块核心寄存器 3.9.6 DMA数据流配置流程 3.9.7 DMA模块示例 思考题及习题 第4章 μC/OS-III实时操作系统原理及实践 4.1 操作系统基础 4.1.1 常见嵌入式操作系统 4.1.2 操作系统的分类 4.1.3 裸机程序与操作系统的比较 4.2 初识μC/OS-III操作系统 4.2.1 系统简介 4.2.2 源码结构 4.2.3 μC/OS系统裁剪 4.2.4 任务优先级 4.2.5 任务调度法则 4.2.6 程序模板 4.3 μC/OS-III任务使用 4.3.1 任务的基本概念 4.3.2 定义任务栈 4.3.3 定义优先级 4.3.4 定义任务控制块 4.3.5 定义任务函数 4.3.6 创建任务 4.3.7 μC/OS-III时间管理 4.3.8 μC/OS-III任务通信 4.3.9 μC/OS-III临界区、调度器上锁 思考题及习题 第5章 FATFS文件系统 5.1 文件系统概述 5.2 FATFS文件系统概述 5.3 FATFS文件系统的移植 5.3.1 FATFS文件系统的移植准备 5.3.2 FATFS文件系统的资源包 5.3.3 FATFS文件系统的源码文件介绍 5.3.4 FATFS文件系统的移植 5.3.5 编写移植FATFS文件系统的主函数 5.3.6 测试FATFS文件系统 5.4 FATFS文件系统的API函数 5.4.1 f_mount函数 5.4.2 f_open函数 5.4.3 f_close函数 5.4.4 f_read函数 5.4.5 f_write函数 5.4.6 f_lseek函数 5.4.7 f_sync函数 5.4.8 f_mkdir函数 5.4.9 f_opendir函数 5.4.10 f_readdir函数 5.5 FATFS文件系统使用示例 思考题及习题 第6章 Linux系统开发环境 6.1 Linux系统简介 6.1.1 Linux系统特点 6.1.2 Linux系统安装 6.2 VMware的安装 6.2.1 VMware的下载 6.2.2 VMware的安装 6.3 Ubuntu安装到VMware 6.3.1 创建虚拟机 6.3.2 安装Ubuntu系统 6.3.3 安装VMware Tools 6.3.4 配置Windows共享目录 6.3.5 安装常用的软件 思考题及习题 第7章 Linux系统命令及Vim使用 7.1 Linux系统使用基础 7.1.1 Linux系统基本使用方法 7.1.2 命令终端的快捷键 7.1.3 桌面/窗口的快捷键 7.1.4 gedit文本编辑器的快捷键 7.1.5 Linux系统使用注意事项 7.2 Linux系统常用命令 7.2.1 Linux系统命令使用基础 7.2.2 Linux系统管理命令 7.2.3 Linux文件管理命令 7.2.4 Linux网络管理命令 7.3 Vim文本编辑器 7.3.1 Vim的安装 7.3.2 Vim的启动 7.3.3 Vim的工作模式 7.3.4 Vim的配置 思考题及习题 第8章 Linux系统应用程序开发基础 8.1 Linux系统应用程序设计 8.1.1 Linux系统中C程序标准main函数 8.1.2 GCC编译器 8.1.3 GCC编译应用程序 8.2 静态库和动态库 8.2.1 静态库和动态库相关选项 8.2.2 静态库的创建及使用 8.2.3 动态库的创建及使用 8.2.4 动态库与静态库的比较 8.3 make工程管理器和Makefile文件 8.3.1 Makefile文件的语法格式 8.3.2 Makefile编译C程序示例 8.3.3 Makefile文件的变量、规则与函数 8.3.4 Makefile函数使用 8.4 Linux系统文件I/O编程 8.4.1 Linux系统文件分类 8.4.2 Linux系统I/O分类 8.4.3 Linux系统非缓冲I/O操作 8.4.4 Linux系统缓冲I/O操作 8.4.5 Linux系统文件信息获取 8.4.6 Linux系统目录操作 8.4.7 Linux系统时间和日期相关函数 思考题及习题 第9章 嵌入式Linux RK3399开发环境构建 9.1 RK3399开发环境及系统烧写 9.1.1 RK3399开发板平台介绍 9.1.2 USB升级固件 9.1.3 启动模式说明 9.1.4 Parameter参数设置文件说明 9.2 RK3399 U-Boot裁剪和编译 9.2.1 Linux系统组成 9.2.2 U-Boot源码获得 9.2.3 U-Boot目录介绍 9.2.4 ARM Linux GCC交叉编译器安装 9.2.5 U-Boot裁剪和编译过程 9.3 RK3399 Linux内核裁剪和编译 9.3.1 Linux内核源码获得 9.3.2 Linux内核源码目录结构 9.3.3 Linux内核使用帮助说明 9.3.4 Linux内核裁剪 9.3.5 Linux编译内核 9.3.6 烧写内核到开发板 思考题及习题 第10章 嵌入式Linux系统驱动程序设计 10.1 Linux设备驱动基础 10.1.1 Linux系统调用接口 10.1.2 Linux系统设备分类 10.1.3 Linux系统设备文件 10.1.4 Linux系统内核框架 10.1.5 Linux字符设备文件操作方法结构 10.2 Linux系统内核模块编程 10.2.1 Linux内核模块代码模板 10.2.2 Linux内核模块编译 10.2.3 Linux内核模块相关命令 10.3 Linux杂项设备驱动模型 10.3.1 Linux设备驱动基础知识 10.3.2 杂项设备的核心结构 10.3.3 杂项设备号 10.3.4 杂项设备驱动模型特征 10.3.5 杂项设备驱动注册/注销函数 10.3.6 杂项设备驱动代码模板 10.4 用户空间和内核空间的数据交换 10.4.1 从用户空间复制数据到内核空间 10.4.2 从内核空间复制数据到用户空间 10.5 Linux GPIO内核API函数 10.6 Linux GPIO LED驱动 10.6.1 硬件原理图分析 10.6.2 软件分析 10.6.3 LED读写测试步骤 10.6.4 LED读写测试结果 10.7 Linux按键中断编程 10.7.1 中断驱动编程基础 10.7.2 Linux内核中断API函数 10.7.3 RK3399虚拟中断编号 10.8 Linux GPIO按键中断驱动 10.8.1 硬件原理图分析 10.8.2 按键中断服务程序的实现 10.8.3 按键中断测试步骤 10.8.4 按键中断测试结果 思考题及习题 第11章 嵌入式Linux Qt应用开发 11.1 Linux系统安装Qt软件 11.1.1 Qt软件下载 11.1.2 安装Qt Creator 11.1.3 安装格式化工具 11.2 移植Qt到RK3399开发板 11.2.1 制作精简的根文件系统 11.2.2 移植tslib库到RK3399开发板 11.2.3 移植Qt5.12.0到RK3399开发板 11.3 配置RK3399 Qt编译环境 11.3.1 增加RK3399 Qt配置 11.3.2 交叉编译Qt应用程序 11.3.3 测试编译Qt应用程序 思考题及习题 参考文献