
本书系统地介绍了ARM体系结构下的Cortex-M3多核处理器系统开发涉及的软/硬件基础知识,重点突出Cortex-M3基本系统开发方法。在内容组织和框架设计上具有两个鲜明的特点:全案例、基于读者学习。本书从读者学习的角度,对Cortex-M3常用的指令集、典型外设模块的原理、CAN总线、操作系统μC/OS-Ⅱ,以及软件安装及其应用设计均以若干完整案例呈现,同时给出了综合性工程案例的经验,这些都十分有利于读者学习和模仿。本书从实际应用出发,讲解浅显细致,可作为高等院校计算机科学与技术、软件工程、电子信息工程、通信工程、自动化、机器人工程、物联网应用等专业的教材,也可作为从事检测、自动控制等领域工作的嵌入式系统工程技术人员的参考用书。
前 言 在当前高度信息化的社会中,人工智能、互联网、物联网已经全面渗透到日常生活的每个角落。对于我们每个人,各种各样的新型嵌入式系统设备在应用数量上已经远远超过通用计算机,小到音乐娱乐、移动终端等微型数字化产品,大到智能家电、车载电子设备、智能交通设备等。而在工业和服务领域中,使用嵌入式技术的数字机床、智能工具、智能化生产线、工业机器人、服务机器人也在逐渐改变传统的工业和服务方式。随着信息化、智能化、网络化的发展,嵌入式系统产品的研制和应用已经成为我国信息化带动工业化、工业化促进信息化发展的强大动力。 总体来说,嵌入式系统是当今IT界的又一焦点,开发自主知识产权的嵌入式处理器和嵌入式操作系统,对于我们国家的信息技术产业具有十分重要的战略意义。 反观国内众多高校,大多师生还在进行51单片机的教学与应用开发,虽然这在无形中增加了对单片机的理解和认识,掌握了汇编语言的使用,具备了基本的软件编程与硬件开发的能力。但是,如果仅仅停留在低端单片机的开发应用上,必将被时代淘汰。当前流行的是“ARM+Linux”架构,它提供了一条可以持续发展与同步跟踪的快车道。 由于“ARM+Linux”架构的嵌入式开发范围很广,如果想全部掌握,需要掌握Linux使用、Linux内核、Linux驱动、汇编语言、C语言、C++、PCB制作、硬件电路设计等知识,总体来看,嵌入式开发分为两个方向:一是偏向硬件,二是偏向软件。本书以硬件开发为重点,着眼于嵌入式系统基础知识及Cortex-M3基本系统开发方法的讲解,内容涉及嵌入式系统及ARM微处理器概述、ARM体系结构描述、Cortex-M3微控制器、指令集、时钟、Cortex-M3接口分析与应用、CAN总线分析与应用、协处理器DMA分析与应用、μC/OS-Ⅱ简介、Keil集成开发环境介绍及应用。本书从实际应用出发,讲解浅显细致,非常适合自动化类、仪器类、电气类、电子信息类本科初学者入门学习,并配有源程序应用示例,方便学习参考与验证。 全书共9章,由齐鲁工业大学(山东省科学院)肖中俊教授编写。本书在编写和出版过程中,得到了深圳信盈达科技有限公司济南分公司袁魁总经理,以及生物基材料与绿色造纸国家重点实验室、山东省流程工业智能优化制造工程技术研究中心、电子工业出版社的大力支持和帮助,田凯、夏冠玉也付出了艰辛劳动。在此,对他们的真诚奉献表示衷心的感谢。 由于时间仓促,加上编者水平有限,疏漏之处在所难免,敬请读者批评指正。 编 者 2022年1月
目 录 第1章 嵌入式系统及ARM微处理器概述 1 1.1 嵌入式系统概述 1 1.1.1 嵌入式系统定义 1 1.1.2 嵌入式发展历程 1 1.2 嵌入式操作系统 4 1.2.1 操作系统 4 1.2.2 实时操作系统 5 1.2.3 通用型操作系统 6 1.2.4 常见的嵌入式操作系统 6 1.2.5 嵌入式常见术语 9 1.3 ARM微处理器概述 12 1.3.1 ARM描述 12 1.3.2 ARM微处理器的应用领域及特点 13 1.3.3 ARM微处理器系列 13 1.3.4 ARM微处理器的结构 16 1.3.5 ARM微处理器的应用选型 17 第2章 ARM体系结构描述 19 2.1 ARM体系结构特点 19 2.2 各ARM体系结构版本 19 2.2.1 ARM体系结构版本V1 19 2.2.2 ARM体系结构版本V2 19 2.2.3 ARM体系结构版本V3 20 2.2.4 ARM体系结构版本V4 20 2.2.5 ARM体系结构版本V5 20 2.2.6 ARM体系结构版本V6 20 2.2.7 ARM体系结构版本V7 21 2.3 处理器模式 21 2.4 内部寄存器 21 2.5 处理器异常 23 2.6 STM32存储器组织 28 2.7 调试接口 29 第3章 Cortex-M3微控制器 31 3.1 STM32概述 31 3.2 Cortex-M3微控制器特性 31 3.2.1 ARM Cortex-M3处理器 31 3.2.2 NVIC 31 3.2.3 片上Flash程序存储器 32 3.2.4 20KB片内SRAM 32 3.2.5 通用DMA控制器 32 3.2.6 多层AHB矩阵 32 3.2.7 串行接口 32 3.2.8 其他外设 33 3.2.9 JTAG 33 3.3 STM32系列内部结构方框图 34 3.4 外围硬件介绍 35 3.4.1 STM32F103RBT6 CPU硬件电路图 35 3.4.2 电源电路 37 3.4.3 晶振电路 37 3.4.4 复位电路 38 3.4.5 LCD显示接口电路 38 3.4.6 独立按键电路 39 3.4.7 串口电路 39 3.4.8 蜂鸣器电路 39 3.4.9 RTC供电电路 40 3.4.10 JTAG调试电路 40 3.4.11 AT24C02硬件电路 41 3.4.12 SPI Flash通信电路 41 3.4.13 A/D(D/A)转换电路 42 3.4.14 USB接口电路 44 3.4.15 CAN总线电路 45 第4章 指令集、时钟 48 4.1 Thumb-2指令集 48 4.2 指令格式 48 4.3 常用指令 48 4.3.1 存储器访问指令 48 4.3.2 数据处理指令 51 4.3.3 分支指令 55 4.3.4 中断和断点指令 56 4.4 Cortex-M3时钟控制 57 4.4.1 SYSCLK系统时钟 57 4.4.2 高速外部时钟信号HSE 59 4.4.3 监控SYSCLK时钟 60 4.4.4 高速内部时钟信号HSI 60 4.4.5 PLL时钟 61 4.4.6 AHB、APB1、APB2时钟 61 4.4.7 MCO时钟 62 4.4.8 低速外部时钟LSE 62 4.4.9 低速内部时钟LSI 63 4.4.10 RTC时钟 64 第5章 Cortex-M3接口分析与应用 65 5.1 GPIO分析与应用 65 5.1.1 GPIO简介 65 5.1.2 与GPIO相关的寄存器 67 5.1.3 GPIO端口应用案例 70 5.2 USART实验 72 5.2.1 USART简介 72 5.2.2 USART特性 72 5.2.3 与USART相关的寄存器 74 5.2.4 硬件连接 83 5.2.5 UART口应用案例 83 5.3 模/数转换器 85 5.3.1 ADC简介 85 5.3.2 ADC的主要参数 85 5.3.3 STM32系列ADC的特点 85 5.3.4 与ADC相关的寄存器 86 5.3.5 硬件连接 97 5.3.6 ADC应用案例 97 5.4 定时器分析与应用 99 5.4.1 通用定时器简介 99 5.4.2 STM32系列通用定时器的特点 99 5.4.3 与通用定时器相关的寄存器 100 5.4.4 定时器应用案例 108 5.5 中断分析与应用 110 5.5.1 中断简介 110 5.5.2 STM32中断特性 110 5.5.3 中断向量表 111 5.5.4 中断应用案例 113 5.6 RTC实验 115 5.6.1 STM32系列RTC的特点 116 5.6.2 与RTC相关的寄存器 116 5.6.3 RTC应用案例 121 5.7 I2C分析与应用 123 5.7.1 STM32系列I2C的特点 123 5.7.2 与I2C相关的寄存器 124 5.7.3 I2C应用案例 133 5.8 看门狗分析与应用 135 5.8.1 STM32系列IWDG的特点 135 5.8.2 与IWDG相关的寄存器 135 5.8.3 看门狗应用案例 138 5.9 SPI分析与应用 139 5.9.1 SPI简介 139 5.9.2 SPI特点 140 5.9.3 与SPI相关的寄存器 140 5.9.4 SPI应用案例 148 第6章 CAN总线分析与应用 151 6.1 CAN简介 151 6.2 bxCAN主要特点 151 6.3 与CAN相关的寄存器 152 6.4 CAN总线应用案例 167 第7章 协处理器DMA分析与应用 171 7.1 DMA简介 171 7.2 DMA控制器特点 171 7.3 DMA控制器功能描述 172 7.3.1 DMA功能框图 172 7.3.2 DMA通道配置 174 7.3.3 DMA中断 174 7.4 DMA相关控制模块 174 7.4.1 DMA1控制器 174 7.4.2 DMA2控制器 176 7.5 DMA控制器应用案例 177 第8章 μC/OS-Ⅱ简介 179 8.1 微控制器操作系统 179 8.2 μC/OS-Ⅱ描述 181 8.2.1 μC/OS-Ⅱ特性 181 8.2.2 结构组成 182 8.2.3 工作原理 182 8.2.4 μC/OS-Ⅱ管理 183 8.2.5 任务调度 183 8.3 μC/OS-Ⅱ中断机理 184 8.3.1 函数调用和中断调用的操作 184 8.3.2 任务级和中断级的任务切换步骤和原理 184 8.4 μC/OS-Ⅱ优先级处理 186 8.4.1 优先级翻转 186 8.4.2 优先级翻转的合理解决 187 8.5 μC/OS-Ⅱ开发注意事项 188 8.5.1 任务框架 188 8.5.2 软件层次 188 8.5.3 互斥信号对象 189 8.5.4 调用函数的处理 189 8.6 μC/OS-Ⅱ图书 190 8.7 μC/OS-Ⅱ操作系统移植 190 8.7.1 μC/OS-Ⅱ成功移植的条件 190 8.7.2 μC/OS-Ⅱ移植的相关工作 191 8.7.3 用户实时任务编写 191 第9章 Keil集成开发环境介绍及应用 192 9.1 Keil软件安装 192 9.1.1 编译软件安装 192 9.1.2 驱动程序安装 192 9.2 新建工程 192 9.2.1 寄存器版新建工程 193 9.2.2 Keil软件新建工程 194 参考文献 199