标题：ARMCortex-M3应用开发实例详解
图书基本信息
书名：ARM Cortex-M3应用开发实例详解  作者：刘波文 编著
ISBN 978-7-121-12610-9
出版日期：2011年1月 
定价：59.00元
内 容 简 介
本书针对市场上新型热门的ARM芯片STM32F10xxx处理器 Cortex-M3系列，通过大量工程案例，系统深入地介绍了ARM Cortex-M3基础应用与综合开发的流程、方法和技巧。全书共分17章，第1、2章简要介绍了Cortex-M3架构及指令系统、ARM RealView MDK 开发环境；第3～13章结合实例详细介绍了I/O端口、A/D、D/A、LCD、数码管显示、SPI、I２C、USB、以太网控制器、NOR Flash、SD的开发原理和实际应用；第14～17章介绍了数据传输存储显示、永磁电机驱动控制、车载智能终端导航及RFID+GPRS无线物联网技术4个综合开发项目。全书层次清晰、技术先进；实例丰富、典型，从基础应用到综合实例，覆盖范围广，实践指导性强，深入展示了ARM Cortex-M3处理器的应用开发技术与经验。同时书中实例均系作者原创，通用性和可移植性强，方便读者举一反三，并能快速地学以致用。
本书适合高校计算机、电子、通信、自动控制等相关专业的大学生，以及从事ARM嵌入式开发的科研工程师使用，是读者学习ARM Cortex-M3应用的理想参考书。
前  言
ARM Cortex-M3是一种基于ARM7v架构的最新ARM嵌入式内核，ARM公司对Cortex-M3的定位是向专业嵌入式市场提供低成本、低功耗的芯片。因此在成本和功耗方面，Cortex-M3具有相当好的性能；与传统的ARM 7相比，它具有更小的基础内核，价格更低，速度更快。此外，Cortex-M3还集成了睡眠模式和可选的完整的八区域存储器保护单元，采用THUMB-2指令集，最大限度地降低了汇编器使用率。随着ARM Cortex-M3高校普及计划的展开，ARM Cortex-M3时代会逐渐到来。
目前，市场上的相关图书比较少，仅有的几本只是基础入门教程，根本无法满足读者的需求。为了解决这类问题，本书将重点结合大量实际项目案例来讲解，介绍处理器芯片功能的同时，又深化了编程设计的应用，让读者迅速入门和提高。
全书共计17章，具体内容安排如下：
第1、2章简要介绍Cortex-M3架构及指令系统、ARM RealView MDK 开发环境。读者通过学习，将对ARM Cortex-M3有个入门性的认识，为后续的学习打下基础。
第3~13章详细介绍了I/O端口、A/D、D/A、LCD、数码管显示、SPI、I２C、USB、以太网控制器、NOR Flash、SD卡的开发原理和实际应用。为了便于读者加深理解，巩固学习效果，每章都结合具体的应用示例来讲解。
第14~17章详细介绍了数据传输存储显示、永磁电机驱动控制、车载智能终端导航及RFID+GPRS无线物联网技术4个综合开发项目，对前面的知识进行了综合性运用。读者通过学习，编程水平可以得到快速提升，实现从入门到精通的目标。
本书适合高校计算机、电子、通信、自动控制等相关专业的学生，以及从事ARM嵌入式开发的工程师使用，是读者自学ARM Cortex-M3的必备参考书。
与同类书比较，本书特色和优势主要如下：
（1）实例丰富、技术新潮：精选了15个典型工程实例，包括基础应用及综合应用实例，从入门到精通，深入介绍了ARM Cortex-M3芯片基础应用与综合项目开发的流程、方法和技巧，实践指导性强。
（2）全书工程实例以“硬件电路设计+软件流程分析+软件设计与程序注释+程序运行实时追踪”形式讲授，深入展示了ARM Cortex-M3处理器的应用开发技术与技巧。书中实例均系作者原创，可移植性强，读者稍加修改便可应用于自己的工作或者课题（毕业设计）中，物超所值。
（3）提供有限赠送图书配套开发板活动，加强互动。为促进读者更好地学习Cotex-M3处理器，作者还设计并制作了配套开发板和实验课件资源，有需要的读者通过发邮件（）进行问题验证后即可得到。
鸣谢
感谢深圳英蓓特信息技术有限公司提供RealView MDK开发套件，特别感谢英蓓特公司的资深工程师景朝斌，对本书提供开发板、程序代码完善及技术支持；感谢ST公司梁平、吴建明先生在资料收集及电机套件案例方面提供的大力协助。同时感谢武汉理工大学崔虎威、公安一所的徐晓丽，分别为本书资料收集及原理图制作方面所做的无私奉献。
本书由刘波文编著，另外编写编写的人还有：黄国灿、黄红光、崔虎威、赵汶、唐清善、邱宝良、李宁宇、黄小宽、付军鹏、张广安、金平、徐春林、谢正义、郑贞平等，在此一并表示感谢！
由于水平有限，再加之时间仓促，书中不足和错误之处在所难免，恳请专家和读者批评指正。
编 著 者
目  录
第1章　Cortex-M3及ST微处理器概述    1
1.1　Cortex-M3处理器特点    1
1.1.1　高性能    1
1.1.2  采用Thumb-2指令集具有更高的效率和性能    1
1.1.3  先进的中断处理功能    2
1.1.4  总线矩阵和接口的应用    2
1.1.5  调试支持    3
1.1.6  低成本低功耗、易于使用    3
1.2　Cortex-M3内核结构    4
1.2.1  Cortex-M3的基本结构    4
1.2.2　寄存器组    4
1.2.3  处理器工作模式和状态    8
1.2.4  异常和中断    9
1.2.5  向量表    9
1.2.6　堆栈实现与双堆栈机制    10
1.3　Cortex-M3的指令集    10
1.4  STM32F系列微控制器简介    16
1.4.1  STM32F微控制器的主要特点    16
1.4.2  系统架构    16
1.4.3  存储器组织    18
1.4.4  STM32F处理器的启动配置    20
1.4.5  STM32F微控制器的应用    21
第2章  RealView MDK开发工具    22
2.1  RealView MDK概述    22
2.2  &micro;Vision4集成开发环境简介    26
2.3  &micro;Vision4软件开发流程    27
2.3.1  使用项目    28
2.3.2  源文件    31
2.4  μVison4编译器选项    32
2.5  项目编译和生成    34
2.5.1  编译项目    34
2.5.2  项目生成    35
2.6  对目标设备编程（Flash编程器）    35
2.6.1  Flash编程器功能简介    35
2.6.2  Flash编程器工具配置    36
2.7  调试程序（Debug）    37
2.7.1　&micro;Vision4调试器简介    37
2.7.2　&micro;Vision4调试器的使用    38
2.8  简易入门实例    40
2.8.1  编辑Hello.C    41
2.8.2  编译、链接Hello例程    41
2.8.3  测试程序    41
2.9  工具集的使用技巧和窍门    42
2.9.1  启动代码的图形化配置    42
2.9.2  仿真I/O端口    44
2.9.3  仿真中断和时钟中断    44
2.9.4　为PC的COM端口分配串行I/O    45
2.9.5　向文件中写入调试输出信息    45
第3章　I/O端口应用    46
3.1  通用I/O端口（GPIO）功能描述    46
3.1.1  单独的位设置或位清除    47
3.1.2  外部中断/唤醒线    47
3.1.3  复用功能（AF）    47
3.1.4  软件重新映射I/O复用功能    48
3.1.5  GPIO锁定机制    48
3.1.6  输入配置    48
3.1.7  输出配置    49
3.1.8　复用功能配置    49
3.1.9  模拟输入配置    50
3.1.10　外设的GPIO配置    50
3.2　GPIO相关寄存器描述    50
3.2.1  端口配置低寄存器（GPIOx_CRL）（x=A...G）    50
3.2.2  端口配置高寄存器（GPIOx_CRH）（x=A...G）    51
3.2.3  端口输入数据寄存器（GPIOx_IDR）（x=A...G）    52
3.2.4  端口输出数据寄存器（GPIOx_ODR）（x=A...G）    52
3.2.5  端口位设置/清除寄存器（GPIOx_BSRR）（x=A...G）    53
3.2.6  端口位清除寄存器（GPIOx_BRR）（x=A...G）    53
3.2.7  端口配置锁定寄存器（GPIOx_LCKR）（x=A...G）    54
3.3  应用实例——按键控制驱动LED    54
3.3.1  设计要求    55
3.3.2  硬件电路设计    55
3.3.3  应用程序流程图设计    56
3.3.4  应用程序代码设计    56
3.3.5  程序运行追踪    61
3.3.6  实例注意事项总结    61
第４章　A/D转换    62
4.1  A/D转换器（ADC）介绍    62
4.1.1　A/D转换器功能描述    62
4.1.2  校准    67
4.1.3  数据对齐    67
4.1.4  可编程的通道采样时间    68
4.1.5  外部触发转换    68
4.1.6  DMA请求    69
4.1.7  双ADC模式    69
4.1.8  ADC中断    70
4.2  ADC相关寄存器设置及功能说明    70
4.2.1  ADC状态寄存器（ADC_SR）    70
4.2.2  ADC控制寄存器1（ADC_CR1）    71
4.2.3  ADC控制寄存器2（ADC_CR2）    72
4.2.4  ADC采样时间寄存器1（ADC_SMPR1）    74
4.2.5  ADC采样时间寄存器2（ADC_SMPR2）    75
4.2.6  ADC注入通道数据偏移寄存器x（ADC_JOFRx）（x=1...4）    75
4.2.7  ADC看门狗高阈值寄存器（ADC_HTR）    76
4.2.8  ADC看门狗低阈值寄存器（ADC_LRT）    76
4.2.9  ADC规则序列寄存器1（ADC_SQR1）    77
4.2.10  ADC规则序列寄存器2（ADC_SQR2）    77
4.2.11  ADC规则序列寄存器3（ADC_SQR3）    78
4.2.12  ADC注入序列寄存器（ADC_JSQR）    78
4.2.13  ADC 注入数据寄存器x（ADC_JDRx）（x= 1...4）    79
4.2.14  ADC规则数据寄存器（ADC_DR）    79
4.3  应用实例——压力传感器A/D转换    80
4.3.1  设计要求    80
4.3.2  硬件电路设计    80
4.3.3  硬件原理图及说明    81
4.3.4  软件程序设计流程    83
4.3.5  程序代码与注释    83
4.3.6  程序运行追踪    90
4.3.7  实例注意事项总结    91
第5章　D/A转换    92
5.1  DAC转换器介绍    92
5.1.1  DAC转换器功能描述    92
5.1.2　双DAC通道转换    97
5.2 　DAC相关寄存器功能说明    100
5.2.1  DAC控制寄存器（DAC_CR）    100
5.2.2　DAC软件触发寄存器（DAC_SWTRIGR）    103
5.2.3　DAC通道1的12位右对齐数据保持寄存器（DAC_DHR12R1）    103
5.2.4　DAC通道1的12位左对齐数据保持寄存器（DAC_DHR12L1）    103
5.2.5　DAC通道1的8位右对齐数据保持寄存器（DAC_DHR8R1）    104
5.2.6　DAC通道2的12位右对齐数据保持寄存器（DAC_DHR12R2）    104
5.2.7　DAC通道2的12位左对齐数据保持寄存器（DAC_DHR12L2）    105
5.2.8　DAC通道2的8位右对齐数据保持寄存器（DAC_DHR8R2）    105
5.2.9　双DAC的12位右对齐数据保持寄存器（DAC_DHR12RD）    105
5.2.10　双DAC的12位左对齐数据保持寄存器（DAC_DHR12LD）    106
5.2.11　双DAC的8位右对齐数据保持寄存器（DAC_DHR8RD）    107
5.2.12　DAC通道1数据输出寄存器（DAC_DOR1）    107
5.2.13　DAC通道2数据输出寄存器（DAC_DOR2）    107
5.3  DAC应用实例——产生三角波电压并输出    108
5.3.1  硬件电路设计    108
5.3.2　软件程序设计流程    108
5.3.3　程序代码设计    109
5.3.4　程序运行监测    112
5.3.5　实例注意事项总结    112
第6章　LCD/触摸屏接口    113
6.1  LCD概述    113
6.1.1　LCD工作原理    113
6.1.2　LCD 分类    113
6.1.3  如何显示    114
6.1.4  液晶显示模块的控制    115
6.2  触摸屏概述    115
6.2.1  电阻触摸屏工作原理    115
6.2.2  触摸屏电路控制    116
6.3  应用实例——LCD/触摸屏显示    116
6.3.1　设计要求    116
6.3.2　硬件电路设计    117
6.3.3  软件程序设计流程    124
6.3.4　程序代码与注释    124
6.3.5  程序运行追踪    132
6.3.6  实例注意事项总结    132
第7章　数码管显示接口应用    133
7.1　数码管概述    133
7.1.1  数码管工作原理    133
7.1.2  如何驱动数码管    134
7.2　应用实例——7段数码管驱动    135
7.2.1　设计要求    135
7.2.2　硬件电路设计    135
7.2.3　数码管驱动程序流程图分析    137
7.2.4　数码管驱动应用程序源代码设计    137
7.2.5　程序运行实时监测    143
7.2.6  实例注意事项总结    143
第8章　SPI接口    144
8.1　串行外设（SPI）接口介绍    144
8.1.1  串行外设接口功能描述    144
8.1.2  配置SPI为从模式    147
8.1.3  配置SPI为主模式    148
8.1.4　配置SPI为单工通信    148
8.1.5  数据发送与接收过程    149
8.1.6　CRC计算    152
8.1.7  状态标志    153
8.1.8　关闭SPI    153
8.1.9  利用DMA的SPI通信    154
8.1.10  错误标志    154
8.1.11  SPI中断    155
8.2  微处理器SPI接口相关寄存器功能说明    155
8.2.1  SPI控制寄存器1（SPI_CR1）    155
8.2.2  SPI控制寄存器2（SPI_CR2）    157
8.2.3  SPI 状态寄存器（SPI_SR）    157
8.2.4  SPI 数据寄存器（SPI_DR）    158
8.2.5  SPI CRC多项式寄存器（SPI_CRCPR）    158
8.2.6  SPI Rx CRC寄存器（SPI_RXCRCR）    159
8.2.7  SPI Tx CRC寄存器（SPI_TXCRCR）    159
8.3  应用实例——利用SPI接口访问串行Flash    160
8.3.1  设计要求    160
8.3.2  硬件电路设计    160
8.3.3  硬件电路原理图说明    167
8.3.4  应用程序流程图及时序分析    167
8.3.5  应用程序代码设计    168
8.3.6  程序运行实时监测    171
8.3.7  实例注意事项总结    171
第9章　I2C接口    172
9.1　I2C接口简介    172
9.1.1  I2C 接口功能描述    173
9.1.2  I2C中断请求    181
9.1.3  SMBus    182
9.1.4  I2C调试模式    182
9.2  微处理器I2C接口相关寄存器功能    183
9.2.1  I2C控制寄存器1（I2C_CR1）    183
9.2.2  I2C控制寄存器 2（I2C_CR2）    184
9.2.3  I2C自身地址寄存器 1（I2C_OAR1）    185
9.2.4  I2C自身地址寄存器2（I2C_OAR2）    186
9.2.5  I2C数据寄存器（I2C_DR）    186
9.2.6  I2C状态寄存器 1（I2C_SR1）    187
9.2.7  I2C状态寄存器 2（I2C_SR2）    189
9.2.8  I2C时钟控制寄存器（I2C_CCR）    190
9.2.9  I2C TRISE寄存器（I2C_TRISE）    190
9.3  应用实例——实现温度传感器读写    191
9.3.1  设计要求    191
9.3.2  硬件电路设计    191
9.3.3  温度传感器硬件原理图说明    195
9.3.4  应用程序流程图分析    196
9.3.5  应用程序代码设计    196
9.3.6  程序运行实时追踪    199
9.3.7  实例注意事项总结    199
第10章　全速USB接口    200
10.1  USB接口简介    200
10.1.1  USB功能描述    200
10.1.2  USB功能模块的组成    201
10.1.3  USB接口编程中需要考虑的问题    202
10.2  USB接口相关寄存器描述符说明    209
10.2.1  通用寄存器    209
10.2.2  端点寄存器    213
10.2.3  缓冲区描述表    216
10.3  应用实例——USB音频设备设计    218
10.3.1　设计要求    218
10.3.2　硬件电路设计    218
10.3.3　硬件电路原理图说明    218
10.3.4  USB音频设备编程介绍    220
10.3.5  应用程序流程图分析    223
10.3.6　应用程序代码设计    223
10.3.7  程序运行实时追踪    233
10.3.8  实例注意事项总结    233
第11章　以太网控制器模块设计    234
11.1  以太网接口介绍    234
11.1.1  以太网模块主要功能    234
11.1.2  以太网模块引脚和内部信号    236
11.1.3  以太网模块功能描述：SMI、MII和RMII    237
11.2  以太网寄存器描述    242
11.2.1  MAC寄存器描述    242
11.2.2  MMC寄存器描述    254
11.2.3  IEEE 1588时间戳寄存器描述    259
11.2.4　DMA寄存器描述    263
11.3  应用实例——实现与收发器DP83848C的以太网通信    274
11.3.1  设计要求    274
11.3.2　硬件电路设计    274
11.3.3　硬件电路原理设计    280
11.3.4  应用程序流程图分析    282
11.3.5  应用程序代码设计    283
11.3.7  程序运行实时追踪    290
11.3.8  实例注意事项总结    291
第12章　NOR Flash应用    292
12.1　FSMC接口功能描述    292
12.1.1  外部设备地址映像    293
12.1.2  NOR和PSRAM地址映像    294
12.1.3  NOR闪存和PSRAM的非对齐访问支持    294
12.1.4  NAND和PC卡地址映像    294
12.2  AHB总线接口简介    295
12.2.1  支持的存储器和操作    295
12.2.2  配置寄存器    296
12.3  NOR闪存和PSRAM控制器    296
12.3.1  外部存储器接口信号    296
12.3.2　NOR闪存和PSRAM控制器支持的存储器类型及其操作方式    297
12.3.3  NOR闪存和PSRAM控制器时序图    298
12.4  NOR闪存和PSRAM控制器寄存器功能    305
12.4.1  SRAM/NOR闪存片选控制寄存器 1～4（FSMC_BCR1～4）    305
12.4.2  SRAM/NOR闪存片选时序寄存器 1～4（FSMC_BTR1～4）    307
12.4.3  SRAM/NOR闪存写时序寄存器 1～4（FSMC_BWTR1～4）    308
12.5  应用实例——实现存储器M29W128FL读/写    310
12.5.1  硬件设计    310
12.5.2  硬件电路原理图说明    321
12.5.3  应用程序流程图    321
12.5.4  NOR闪存应用程序代码设计    322
12.5.5  调试程序及程序运行实时追踪    326
12.5.6  实例注意事项总结    326
第13章　SD/MMC应用    327
13.1　SDIO接口概述    327
13.1.1  SDIO的主要功能    327
13.1.2  SDIO总线拓扑    327
13.2　SDIO接口功能描述    328
13.2.1  SDIO适配器    329
13.2.2　SDIO AHB接口    335
13.3  SDIO接口卡介绍    337
13.3.1  卡状态寄存器    337
13.3.2  SD状态寄存器    339
13.3.3  SD的I/O功能模式    341
13.3.4  命令集简介    342
13.3.5  命令响应格式简介    344
13.4  SDIO接口寄存器功能描述    347
13.4.1  SDIO电源控制寄存器（SDIO_POWER）    347
13.4.2  SDIO时钟控制寄存器（SDIO_CLKCR）    348
13.4.3  SDIO参数寄存器（SDIO_ARG）    348
13.4.4  SDIO命令寄存器（SDIO_CMD）    349
13.4.5  SDIO命令响应寄存器（SDIO_RESPCMD）    350
13.4.6  SDIO响应 1...4 寄存器（SDIO_RESPx）    350
13.4.7  SDIO数据定时器寄存器（SDIO_DTIMER）    351
13.4.8  SDIO数据长度寄存器（SDIO_DLEN）    351
13.4.9  SDIO数据控制寄存器（SDIO_DCTRL）    352
13.4.10  SDIO数据计数器寄存器（SDIO_DCOUNT）    353
13.4.11  SDIO状态寄存器（SDIO_STA）    353
13.4.12  SDIO清除中断寄存器（SDIO_ICR）    354
13.4.13  SDIO中断屏蔽寄存器（SDIO_MASK）    356
13.4.14  SDIO FIFO计数器寄存器（SDIO_FIFOCNT）    357
13.4.15  SDIO FIFO数据寄存器（SDIO_FIFO）    358
13.5  应用实例——实现SD/MMC存储卡的读/写    358
13.5.1  设计要求    358
13.5.2　硬件电路设计    359
13.5.3　硬件电路原理图说明    360
13.5.4  应用程序流程图分析    360
13.5.5  应用程序代码设计    361
13.5.6  程序运行实时追踪    367
13.5.7  实例注意事项总结    367
第14章  无线数据传输综合应用项目    368
14.1  嵌入式图形用户界面μC/GUI移植    368
14.2　无线数据传输应用实例    370
14.2.1  设计要求    370
14.2.2  主要器件介绍    371
14.2.3  芯片nRF24L01增强型ShockBurst模式配置与编程    379
14.2.4  硬件电路设计    379
14.2.5  应用程序设计流程图    380
14.2.6  程序代码设计    381
14.3  实例注意事项总结    390
第15章  永磁同步电机控制综合应用项目    392
15.1 永磁同步电机概述    392
15.1.1  永磁同步电机的工作原理    392
15.1.2　电机伺服系统的基本结构    393
15.1.3  功率驱动控制单元    394
15.1.4  磁场定向控制（FOC）    394
15.2  永磁同步电机控制应用实例设计    397
15.2.1  设计要求    398
15.2.2  硬件电路设计    399
15.2.3  应用程序设计流程图    403
15.2.4  程序代码设计    404
15.3  程序运行实时追踪    418
15.4  实例注意事项总结    418
第16章 车载GPS移动导航应用项目    419
16.1　GPS系统概述    419
16.1.1  GPS系统工作原理    420
16.1.2  GPS数据格式    420
16.2  车载GPS移动导航应用实例    424
16.2.1  设计要求    424
16.2.2  硬件电路设计    425
16.2.3  应用程序设计流程图    425
16.2.4  软件代码设计    425
16.3  实例注意事项总结    446
第17章  RFID+GPRS基于物联网技术的综合应用    447
17.1  μC/OS-II概述    447
17.1.1  μC/OS-II简介    447
17.1.2  μC/OS-II的特点    448
17.2  μC/OS-II内核介绍    448
17.2.1  μC/OS-II内核结构    449
17.2.2  任务管理    456
17.2.3　时间管理    457
17.2.4  任务之间的通信与同步    458
17.2.5  内存管理    459
17.3  μC/OS-II移植    460
17.3.1　μC/OS-II文件体系结构    460
17.3.2  移植μC/OS-II满足的条件    460
17.3.3  移植要点    461
17.4  综合实例——RFID+GPRS基于物联网技术的应用    464
17.4.1  硬件电路设计    464
17.4.2  μC/OS-II软件设计    467
17.4.3  程序运行实例说明    481
17.5  实例注意事项总结    483