图书简介:
第1章 嵌入式系统概述 11.1 信息技术的发展 11.1.1 计算机的诞生 11.1.2 通用信息处理 21.1.3 人工智能 31.2 嵌入式系统 51.2.1 嵌入式系统案例分析 61.2.2 嵌入式系统概念 91.2.3 嵌入式系统与物联网 101.3 嵌入式初学者杂谈 111.3.1 MCU、MPU、ARM、FPGA、DSP概念 111.3.2 MCU开发与ARM-Linux开发的区别 151.3.3 开源硬件Arduino和树莓派 161.4 嵌入式系统开发流程 171.4.1 系统需求分析 171.4.2 系统总体设计 181.4.3 系统软/硬件设计 201.4.4 系统软/硬件测试 21习题1 21第2章 ARM Cortex-M3内核与STM32微控制器 222.1 嵌入式系统基础知识 222.1.1 冯·诺依曼结构与哈佛结构 222.1.2 ARM存储模式 242.1.3 CISC和RISC 252.1.4 流水线技术 272.2 ARM 292.2.1 ARM介绍 292.2.2 ARM体系结构 302.3 ARM Cortex-M3内核 332.3.1 内核架构 342.3.2 寄存器 372.3.3 存储结构 392.3.4 中断与异常(NVIC) 402.4 STM32微控制器结构 422.4.1 STM32系统结构 422.4.2 STM32总线结构 432.4.3 STM32存储结构 442.4.4 STM32中断 462.4.5 STM32时钟系统 48习题2 49第3章 STM32微控制器及开发环境搭建 503.1 STM32介绍 503.2 STM32微控制器开发模式 553.2.1 寄存器开发模式 563.2.2 标准外设库开发模式 573.2.3 HAL库开发模式 583.3 开发平台的搭建 603.3.1 嵌入式开发环境 603.3.2 集成开发环境Keil 623.3.3 下载和安装Packs包 633.4 基于标准外设库开发平台搭建 663.4.1 STM32标准外设库文件结构 663.4.2 基于标准外设库新建工程模板 733.5 基于HAL库开发平台的搭建 873.5.1 Java运行环境的安装 873.5.2 安装STM32CubeMX软件 873.5.3 STM32CubeF1库文件结构 893.5.4 STM32CubeMX生成的工程架构解析 90习题3 96第4章 STM32最小系统与嵌入式C语言 984.1 STM32最小系统 984.1.1 电源电路 984.1.2 时钟电路 1004.1.3 复位电路 1014.1.4 调试和下载电路 1024.2 嵌入式C语言 1044.2.1 STM32的数据类型 1054.2.2 const关键字 1084.2.3 static关键字 1084.2.4 volatile关键字 1104.2.5 extern关键字 1104.2.6 struct结构体 1124.2.7 enum 1134.2.8 typedef 1144.2.9 #define 1154.2.10 #ifdef、#ifndef、#else、#if条件编译 1174.2.11 指针 1194.2.12 回调函数 1254.3 HAL库文件源代码分析 1264.3.1 stm32f1xx.h 1264.3.2 stm32f103xe.h 1314.3.3 stm32f1xx_hal.c和stm32f1xx_hal.h 1354.3.4 stm32f1xx_hal_gpio.c和stm32f1xx_hal_gpio.h 138习题4 140第5章 通用输入/输出 1415.1 GPIO概述 1415.2 STM32的GPIO工作原理 1425.2.1 STM32F103引脚图 1435.2.2 GPIO内部结构 1445.2.3 GPIO工作模式 1455.2.4 GPIO输出速度 1485.3 GPIO标准外设库接口函数及应用 1485.3.1 GPIO标准外设库接口函数 1485.3.2 GPIO标准外设库应用实例 1515.3.3 基于标准外设库开发的一般流程 1545.4 GPIO的HAL库接口函数及应用 1565.4.1 GPIO的HAL库接口函数 1565.4.2 GPIO的HAL库应用实例 1615.4.3 基于HAL库开发的一般流程 1755.5 编程思想之模块化编程 176习题5 179第6章 中断 1806.1 中断的相关概念 1806.1.1 什么是中断? 1806.1.2 为什么使用中断? 1816.1.3 中断处理流程 1816.2 STM32中断和异常 1836.2.1 STM32中断和异常向量表 1836.2.2 STM32中断优先级 1886.2.3 STM32中断服务程序 1906.3 STM32外部中断EXTI 1916.4 EXTI标准外设库接口函数及应用 1946.4.1 EXTI标准外设库接口函数 1946.4.2 EXTI标准外设库中断配置步骤 1966.4.3 EXTI标准外设库应用实例 1976.5 EXTI的HAL库接口函数及应用 2016.5.1 EXTI的HAL库接口函数 2016.5.2 EXTI的HAL库应用实例 202习题6 208第7章 串口通信 2097.1 通信概述 2097.2 异步串行通信 2127.2.1 异步串行通信协议 2127.2.2 异步串行通信接口 2137.3 STM32的USART模块 2157.3.1 USART内部结构 2157.3.2 USART接口 2187.3.3 USART编程模式 2197.4 USART标准外设库接口函数及应用 2207.4.1 USART标准外设库接口函数 2207.4.2 USART串口应用编程步骤 2257.4.3 USART标准外设库应用实例 2267.5 USART的HAL库接口函数及应用 2327.5.1 UART的HAL库接口函数 2327.5.2 USART的HAL库应用实例 2367.5.3 USART应用实例拓展 2417.6 编程思想之自定义串口通信协议 243习题7 246第8章 DMA 2478.1 DMA基础理论知识 2478.2 STM32的DMA模块 2488.2.1 STM32的DMA内部结构 2488.2.2 DMA优先权 2508.2.3 DMA中断请求 2508.3 DMA标准外设库接口函数及应用 2528.3.1 DMA标准外设库接口函数 2528.3.2 DMA标准外设库的配置过程 2548.3.3 DMA标准外设库函数的应用实例 2558.4 DMA的HAL库接口函数及应用 2598.4.1 DMA的HAL库接口函数 2598.4.2 DMA的HAL库应用实例 261习题8 266第9章 定时器 2679.1 STM32定时器 2689.1.1 STM32通用定时器 2699.1.2 STM32基本定时器 2729.1.3 STM32高级定时器 2739.2 定时器标准外设库接口函数及应用 2739.2.1 定时器标准外设库接口函数 2739.2.2 定时器标准外设库配置过程 2759.2.3 定时器标准外设库应用实例 2779.3 PWM 2799.3.1 STM32定时器PWM的工作原理 2809.3.2 PWM标准外设库输出配置过程 2819.3.3 PWM标准外设库的应用实例 2839.4 SysTick定时器 2859.4.1 SysTick标准外设库函数 2859.4.2 SysTick定时器的应用实例 2879.5 定时器HAL库接口函数及应用 2899.5.1 定时器HAL库接口函数 2899.5.2 定时器HAL库应用实例 2949.6 编程思想之状态机设计思想 300习题9 303第10章 ADC 30410.1 ADC基础理论知识 30410.1.1 A/D转换过程 30410.1.2 A/D转换的主要技术参数 30510.2 STM32的ADC 30610.2.1 ADC的引脚 30610.2.2 ADC通道选择 30810.2.3 ADC中断和DMA请求 30910.2.4 ADC转换时间 31010.2.5 ADC数据对齐 31010.2.6 ADC的转换模式 31110.2.7 ADC校准 31110.3 ADC标准外设库接口函数及应用 31210.3.1 ADC标准外设库接口函数 31210.3.2 ADC标准外设库配置过程 31510.3.3 ADC标准外设库的应用实例 31710.4 ADC的HAL库接口函数及应用 32110.4.1 ADC的HAL库接口函数 32110.4.2 ADC的HAL库应用实例 323习题10 331第11章 从模块到项目 33211.1 从模块到项目的开发思路 33211.1.1 项目需求分析 33211.1.2 系统总体架构设计 33311.1.3 系统软/硬件设计 33511.2 项目实践 33611.2.1 项目需求分析 33711.2.2 系统总体架构设计 33811.2.3 系统硬件设计 33911.2.4 系统软件设计 34111.3 面向对象的编程思想 343习题11 344第12章 嵌入式操作系统 34512.1 概述 34512.1.1 嵌入式系统的开发方式 34512.1.2 计算机系统的分层设计思想 34712.2 嵌入式操作系统的概念 34912.2.1 计算机操作系统 34912.2.2 嵌入式操作系统 35112.2.3 嵌入式操作系统的分类 35112.3 嵌入式实时操作系统 35212.3.1 μC/OS-Ⅲ的任务 35212.3.2 μC/OS-Ⅲ时钟和中断 36112.3.3 μC/OS-Ⅲ任务间通信与同步 36512.4 μC/OS-Ⅲ移植与应用 36612.4.1 μC/OS-Ⅲ源代码下载 36712.4.2 μC/OS-Ⅲ移植 36912.4.3 μC/OS-Ⅲ多任务应用实例 379习题12 383参考文献 384
展开
嵌入式系统是一门与行业应用紧密结合的交叉学科,是涉及计算机、电子、通信等技术领域的软/硬件综合体。随着微电子技术的飞速发展,嵌入式领域不断变化,各种微处理器架构(如MCS-51架构、MIPS架构、PowerPC架构、ARM架构等)、芯片及开发工具层出不穷,这种百花齐放的局面给嵌入式开发者的学习和开发带来了一定的难度。嵌入式系统内核架构种类繁多,随着用户对产品功能多元化的追求,对更低功耗、更人性化的人机交互界面以及多任务等需求的增加,传统的基于MCS-51架构的8位51单片机,无论是处理能力还是存储能力都已无法满足此类复杂的应用。ARM公司针对通用MCU(微控制器)领域成功推出了32位ARM Cortex-M系列内核,而各大半导体厂商(如NXP、TI、ST、Atmel等)纷纷基于该内核针对不同的应用领域开发出了各具特色的MCU。采用标准化内核一方面降低了半导体芯片厂商在芯片架构上的研发难度,缩短了产品推向市场的时间;另一方面,由于采用同样的ARM内核,为了实现产品的差异化,使得各大半导体厂商将研发重点放在了外设接口、功耗、存储器资源等方面,针对各自优势应用领域推出系列化的产品。从嵌入式开发者的角度来看,这种方式降低了嵌入式开发人员学习和掌握MCU应用开发的难度。学习者只需要针对通用的内核就某种MCU深入研究,掌握其精髓,就能融会贯通。采用统一的标准化内核设计和生产MCU产品已成为嵌入式MCU发展的趋势。不仅如此,ARM公司还与各大半导体厂商深度合作,在与芯片相关的开发工具和软件解决方案上形成了一条良好的、完整的生态产业链/生态系统,为嵌入式开发人员不仅提供了一系列高效、易用的开发工具(如Keil、IAR等),而且提供了丰富的资源(如OS、固件库、应用例程等),在提高开发效率、降低开发成本、缩短开发周期等关键环节具有明显的优势,如ST公司针对ARM Cortex-M内核开发的STM32系列产品,为STM32的开发提供了各种固件库,如标准外设库、HAL库、LL库等,这些位于嵌入式组成结构中间层的库文件屏蔽了复杂的寄存器开发,使得嵌入式开发人员通过调用API函数的方式就能迅速地搭建系统原型。目前,基于库的开发方式已成为嵌入式系统开发的主流模式。嵌入式系统知识繁杂,本着从易到难、从单一模块到系统各模块融合的学习方式,本书以基于ARM Cortex-M3内核的32位嵌入式微控制器STM32作为入门引导,对理论进行精简讲授,以动手实践为主,力图使内容紧贴社会需求,技术贴合行业市场发展。本书定位为初学者入门书籍,只针对简单常用的外设(如GPIO、USART、TIM、ADC等)进行讲解,并给出完整的具体应用范例,力图使初学者能够从整体框架(角度)掌握基本外设的应用开发流程,而非陷入复杂的应用编程细节中,更多编程细节可以随着实际开发实践不断进行扩充与积累。本书从结构上分为以下4部分。第一部分为第1章嵌入式系统概述,主要讲述嵌入式系统的概念、嵌入式行业基础知识(如MCU、DSP、FGPA)的区别与联系、嵌入式与物联网和人工智能的联系,以及嵌入式系统的开发流程等。第二部分由第2章、第3章和第4章组成,主要讲述ARM体系结构与ARM Cortex-M3内核,基于ARM Cortex-M3内核的STM32F103系列微控制器内部架构(如总线结构、存储结构)等,分析STM32微控制器三种开发模式(寄存器开发模式、标准外设库开发模式、HAL库开发模式),详细讲解基于标准外设库和HAL库开发平台的搭建,同时对嵌入式开发中经常用到的嵌入式C语言相关内容进行了补充。第三部分包含第5~11章。其中,第5~10章按模块对嵌入式开发中常用的外设进行阐述,分别以具体的应用实例按步骤一一讲解,提供了基于标准外设库和HAL库两种开发案例,这部分内容对理论知识进行了精简,重点介绍与工程开发有关的技能实践。第11章简单介绍融合多个模块实现具体项目的思路与方法,紧贴工程实践。第四部分为第12章嵌入式操作系统,主要介绍嵌入式操作系统的工作原理,以简单的应用实例为嵌入式初学者提供基于嵌入式操作系统的应用程序开发思路。对STM32初学者来说,可以有选择性地学习本书内容。最后,给嵌入式初学者几点建议,在学习过程中,应重视第一手资料的获取,即从官方网站下载的芯片文档(Reference Manual、Datasheet等),这些文档是很好的参考资料;嵌入式系统是一门技术实践课程,所以动手实践是学习的重要方式;另外,多与同行交流是快速学习的捷径。由于作者水平有限,书中难免存在错误或不妥之处,恳请读者批评指正。
作者 2020年3月
展开