第1章 嵌入式系统导论 1
1.1 嵌入式系统——从部件到系统的集成 1
1.1.1 什么是嵌入式系统 1
1.1.2 嵌入式系统——从部件到系统的集成 2
1.2 计算的基本原理和历史演变 4
1.2.1 计算的概念——从数值计算到通用信息处理和智能计算 4
1.2.2 计算的基本模型:图灵机理论模型 5
1.2.3 计算的发展规律 7
1.3 计算机的基本原理和历史演变 8
1.3.1 计算机的诞生 8
1.3.2 计算机的发展 9
1.3.3 面向嵌入式应用的架构改进 12
1.4 嵌入式系统的历史沿革 14
1.5 ARM,Cortex和STM32简介 15
1.5.1 ARM系列内核 15
1.5.2 Cortex系列内核 19
1.5.3 STM32F103系列微控制器 20
1.6 嵌入式系统工程设计与开发 23
1.6.1 需求分析 23
1.6.2 架构和概要设计 24
1.6.3 详细设计与开发 25
1.6.4 测试反馈 25
1.7 本课程学习内容和目标 26
习题 26
第2章 Cortex-M3微处理器 27
2.1 Cortex-M3微处理器内核 27
2.1.1 内核体系结构 28
2.1.2 系统总线结构 30
2.1.3 寄存器 32
2.1.4 存储器管理 37
2.1.5 工作模式 49
2.1.6 异常与中断 51
2.1.7 堆栈 65
2.1.8 CoreSight调试与跟踪系统 68
2.1.9 Cortex-M3内核的其他特性 70
2.2 指令系统 73
2.2.1 Thumb-2指令分类 75
2.2.2 统一汇编语言 76
2.2.3 16-bit Thumb-2指令集编码格式 77
2.2.4 32-bit Thumb-2指令集编码格式 83
2.2.5 条件执行 94
2.2.6 未定义及不可预测指令 96
2.2.7 寄存器域编码0b1111的用途 97
2.2.8 寄存器域编码0b1101的用途 98
2.2.9 Cortex-M3常用的Thumb-2指令 99
2.2.10 Thumb-2指令与ARM体系架构下的指令比较 114
2.2.11 基于Cortex-M3的Thumb-2指令集 118
习题 129
第3章 STM32F103基础及最小系统设计 130
3.1 从Cortex-M3到STM32F103 130
3.1.1 微处理器、微控制器和系统 130
3.1.2 STM32F103微控制器 131
3.2 存储器与总线架构 139
3.2.1 存储子系统基本构架 139
3.2.2 存储器映像 140
3.2.3 位带绑定(Bit-Banding) 144
3.2.4 嵌入式闪存 145
3.2.5 寄存器说明 155
3.2.6 启动配置 158
3.2.7 应用实例 159
3.3 中断和事件 161
3.3.1 嵌套向量中断控制器(NVIC)及其特性 162
3.3.2 外部中断/事件控制器(EXTI) 164
3.3.3 中断寄存器描述 166
3.3.4 应用实例 169
3.4 STM32F103x的时钟系统 173
3.5 基于STM32的最小系统参考设计 174
习题 178
第4章 DMA控制器 179
4.1 主要特性 179
4.2 功能描述 180
4.2.1 DMA处理 182
4.2.2 仲裁器 182
4.2.3 DMA通道 183
4.2.4 可编程的数据传输宽度、对齐方式和数据大小端 185
4.2.5 错误管理 187
4.2.6 DMA请求映像 187
4.3 DMA寄存器 188
4.4 DMA应用实例 192
习题 197
第5章 通用和复用功能I/O 198
5.1 GPIO功能描述 198
5.1.1 通用目标I/O(GPIO) 200
5.1.2 原子位设置或位清除 200
5.1.3 外部中断/唤醒线 200
5.1.4 复用功能(AF) 200
5.1.5 I/O复用功能的软件重新映射 201
5.1.6 GPIO锁定机制 201
5.1.7 输入配置与输出配置 201
5.1.8 复用功能配置 203
5.1.9 模拟输入配置 204
5.2 GPIO寄存器描述 205
5.3 复用功能I/O和调试配置(AFIO) 207
5.3.1 引脚功能选择 207
5.3.2 BXCAN复用功能重映射 207
5.3.3 JTAG/SWD复用功能重映射 208
5.3.4 定时器复用功能重映射 209
5.3.5 USART复用功能重映射 210
5.3.6 I2C复用功能重映射 211
5.3.7 SPI复用功能重映射 211
5.4 AFIO寄存器描述 211
5.5 GPIO和AFIO寄存器地址映像 214
5.5.1 GPIO寄存器地址映像 214
5.5.2 AFIO寄存器地址映像 215
5.6 应用实例 215
习题 217
第6章 STM32高级定时器原理与应用 218
6.1 定时/计数器的基本原理与实现方法 218
6.1.1 完全硬件实现 218
6.1.2 纯软件方式 219
6.1.3 微控制器中的可编程定时/计数器 219
6.2 STM32高级定时/计数器 220
6.2.1 STM32高级定时器的主要特点 220
6.2.2 高级定时器概述 221
6.3 STM32高级定时器寄存器描述 222
6.4 STM32高级定时器工作原理及应用 239
6.4.1 定时器的时基信号 239
6.4.2 重复计数器 245
6.4.3 定时器定时应用实例 246
6.4.4 输入捕获 247
6.4.5 输出比较模式 248
6.4.6 STM32高级定时器捕获/比较应用实例 252
6.4.7 STM32高级定时器触发工作模式 256
习题 258
第7章 STM32的USART模块 259
7.1 串行通信概述 259
7.2 串行通信的基本原理 259
7.2.1 USART的扩展——RS232C接口和标准 259
7.2.2 RS232C的连接 261
7.2.3 流控和握手 262
7.2.4 分帧和组帧 263
7.2.5 错误检测和CRC校验 263
7.2.6 RS485 264
7.3 STM32F103的串行通信模块 264
7.3.1 基本结构和连接 265
7.3.2 单字节传输 266
7.3.3 分频设置和波特率选择 267
7.3.4 基于RTS和CTS硬件握手协议的流控过程 268
7.3.5 常用全双工异步通信的发送配置 270
7.3.6 全双工异步通信的接收配置 271
7.3.7 关于传输错误 272
7.3.8 多处理器通信 273
7.3.9 校验控制 273
7.3.10 LIN模式 273
7.3.11 USART同步模式 273
7.3.12 单线半双工通信 274
7.3.13 智能卡 274
7.3.14 IrDA SIR ENDEC功能块 275
7.3.15 利用DMA实现连续通信 276
7.3.16 中断请求 277
7.4 USART寄存器描述 278
7.5 USART应用实例分析 286
习题 289
第8章 STM32的SPI模块 290
8.1 串行外设接口概述 290
8.2 串行外设接口SPI的基本原理 291
8.2.1 主从式连接架构 291
8.2.2 接口信号线介绍 292
8.2.3 数据传输的时序模式 293
8.2.4 多个从机的连接 294
8.3 STM32F103的串行外设接口模块 294
8.3.1 基本结构和连接 295
8.3.2 时钟信号的相位和极性 296
8.3.3 数据帧格式 297
8.3.4 SPI从模式 297
8.3.5 SPI主模式 298
8.3.6 状态标志 299
8.3.7 CRC计算 299
8.3.8 利用DMA的SPI通信 300
8.3.9 错误标志 300
8.3.10 中断 301
8.4 SPI寄存器描述 301
8.5 SPI应用实例分析 306
习题 311
第9章 I2C总线原理及其应用 312
9.1 I2C总线概述 312
9.1.1 I2C总线特点 312
9.1.2 I2C总线标准的发展历史 313
9.1.3 I2C总线术语 313
9.2 I2C总线原理 314
9.2.1 I2C硬件构成 314
9.2.2 位传输 315
9.2.3 数据传输格式 316
9.3 STM32 I2C模块原理 319
9.3.1 STM32 I2C模块特点 319
9.3.2 I2C寄存器描述 320
9.3.3 STM32 I2C模块的通信实现 330
9.4 STM32 I2C扩展EEPROM应用 335
9.4.1 概述 336
9.4.2 管脚描述 336
9.4.3 串行EEPROM芯片的寻址 336
9.4.4 写操作方式 337
9.4.5 读操作方式 338
9.4.6 STM32 I2C模块扩展24C64应用 339
习题 345
第10章 CAN总线原理及其应用 346
10.1 CAN总线概述 346
10.1.1 CAN总线通信概述 346
10.1.2 CAN报文传输 348
10.2 STM32的CAN通信模块 350
10.2.1 STM32 bxCAN通信模块概述 350
10.2.2 控制寄存器描述 351
10.2.3 邮箱寄存器描述 359
10.2.4 CAN过滤器寄存器 363
10.3 STM32 bxCAN模块工作过程 364
10.3.1 bxCAN模块工作模式 364
10.3.2 bxCAN模块数据发送管理 365
10.3.3 bxCAN模块数据接收管理 367
10.3.4 bxCAN模块标识符过滤器 368
10.3.5 bxCAN模块出错管理 370
10.3.6 bxCAN模块位时间特性 370
10.3.7 bxCAN通信与出错中断管理 371
10.4 STM32 CAN应用实例 373
10.4.1 CAN总线硬件设计 373
10.4.2 STM32 CAN通信软件示例 373
习题 378
第11章 STM32的模拟数字转换模块 379
11.1 A/D变换的基本原理 379
11.1.1 采样 380
11.1.2 量化 380
11.1.3 编码 381
11.2 ADC模块的主要技术指标和选型考虑 383
11.2.1 位数 383
11.2.2 采样速率 383
11.2.3 分辨率 383
11.2.4 量化误差 384
11.2.5 绝对精度 385
11.2.6 相对精度 385
11.2.7 偏移误差 385
11.2.8 增益误差 385
11.2.9 AD线性误差 386
11.2.10 微分非线性 387
11.2.11 积分非线性 387
11.2.12 输入失调电压 388
11.2.13 输入失调电流 388
11.2.14 输入阻抗 388
11.2.15 增益带宽积GBP 389
11.2.16 运放的单位增益带宽 389
11.2.17 运放建立时间 389
11.2.18 压摆率 390
11.3 ADC模块的外围软硬件设计 390
11.3.1 电压测量与峰值测量 391
11.3.2 单路测量与多路测量 391
11.3.3 异步测量和同步测量 391
11.3.4 关于电压基准 391
11.3.5 查询式A/D 392
11.3.6 中断式A/D 393
11.3.7 Timer驱动的周期采样 393
11.3.8 外部触发式启动A/D 394
11.3.9 同步A/D 395
11.3.10 DMA数据传输 395
11.3.11 STM32F103的A/D变换模块 395
11.4 STM32F103 ADC寄存器介绍 397
11.5 STM32F103的ADC模块的使用 405
11.5.1 ADC的使能 405
11.5.2 ADC时钟 405
11.5.3 通道选择 405
11.5.4 转换模式 406
11.5.5 模拟看门狗 406
11.5.6 扫描模式 407
11.5.7 注入通道管理 407
11.5.8 间断模式 408
11.5.9 校准 408
11.5.10 数据对齐 408
11.5.11 可编程的通道采样时间 409
11.5.12 外部触发转换 409
11.5.13 DMA请求 410
11.5.14 双ADC模式 410
11.5.15 温度传感器/VREFINT内部通道 413
11.5.16 中断 414
11.6 基于STM32F103的A/D变换示例 414
习题 417
第12章 STM32支撑开发环境 418
12.1 嵌入式系统开发的流程 418
12.1.1 嵌入式项目的生命周期 418
12.1.2 嵌入式软件的开发环节 419
12.1.3 交叉编译与软件调试 419
12.2 基于Keil MDK的STM32开发支撑环境 421
12.2.1 ARM开发工具 421
12.2.2 基于Keil MDK的STM32开发环境 422
12.2.3 开发环境硬件连接 423
12.2.4 基于Keil的软件开发流程 423
12.3 STM32启动文件解析 433
12.4 ARTX嵌入式操作系统使用初步 440
12.5 嵌入式系统软件开发的高级主题 442
12.5.1 形式化规范与证实技术 442
12.5.2 设计架构与模式 442
12.5.3 低功耗软件设计 444
习题 444
第13章 基于STM32的多功能综合实验板设计 445
13.1 综合实验板介绍 445
13.2 MDVSTM32-107实验板模块设计 446
13.2.1 电源电路设计 446
13.2.2 通用I/O口电路设计 447
13.2.3 基于I2C总线扩展 447
13.2.4 CAN总线扩展 449
13.2.5 USB总线扩展 450
13.2.6 智能卡接口电路 450
13.2.7 I2S扩展音频电路 450
13.2.8 RS232扩展和IrDA扩展 453
13.2.9 SD卡扩展电路 453
13.2.10 TFT液晶扩展电路 453
13.2.11 电机扩展接口 454
13.2.12 以太网扩展 457
13.2.13 AD电路扩展 457
13.2.14 MCU电路设计 457
13.2.15 调试电路设计 458
13.2.16 扩展接口 460
习题 462
第14章 基于STM32的电动自行车控制器设计 463
14.1 直流无刷电机的基本原理 463
14.1.1 直流无刷电机结构 463
14.1.2 直流无刷电机工作原理 464
14.2 直流无刷电机应用系统设计 467
14.2.1 硬件电路实现 469
14.2.2 软件电路实现 474
习题 477
第15章 AMR单相电能表的参考设计 478
15.1 需求和目标系统特性 478
15.2 硬件设计方案 479
15.2.1 层次化硬件架构和接口设计 479
15.2.2 测量电路 479
15.2.3 MCU和外设电路 480
15.2.4 供电电路 481
15.2.5 磁保持继电器 482
15.3 STPM10测量集成芯片 482
15.3.1 STPM10测量芯片介绍 482
15.3.2 STPM10与MCU的接口 482
15.3.3 使用DMA的SPI读过程 486
15.3.4 STPM10校准 486
15.4 账户管理 487
15.5 目标机的测试与评估 488
15.5.1 目标机 488
15.5.2 AMR的评估 489
习题 490
附件A ARM公司系列产品命名规则 491
主要参考文献 493