第1章 概述 1
1.1 计算机发展史 1
1.1.1 计算机的诞生 1
1.1.2 计算机的发展 5
1.2 计算机的体系结构 6
1.2.1 冯·诺依曼架构模型 6
1.2.2 面向嵌入式应用的架构改进 9
1.3 单片机发展史 10
1.3.1 计算机及早期单片机 10
1.3.2 单片机的发展趋势——走向集成、嵌入式 11
1.4 ARM、Cortex和STM32简介 12
1.4.1 ARM系列内核 12
1.4.2 Cortex系列内核 16
1.4.3 STM32F103系列微控制器 17
1.5 计算机发展的趋势和工程设计开发 21
1.5.1 计算机发展的趋势 21
1.5.2 嵌入式系统的工程设计和开发 22
1.6 小结 25
习题 25
第2章 Cortex-M3处理器 26
2.1 Cortex-M3内核 26
2.1.1 内核体系结构 26
2.1.2 系统总线结构 29
2.2 寄存器 30
2.2.1 通用寄存器 31
2.2.2 特殊功能寄存器 33
2.3 存储器管理 36
2.3.1 寄存器空间分配 37
2.3.2 位带操作 38
2.3.3 互斥访问 43
2.3.4 端模式 45
2.3.5 存储保护单元 46
2.3.6 存储器访问属性 46
2.3.7 存储器的默认访问许可 47
2.4 工作模式 47
2.5 异常与中断 49
2.5.1 中断号与优先级 50
2.5.2 向量表 54
2.5.3 中断输入及挂起 55
2.5.4 Fault类异常 56
2.5.5 中断的具体行为 57
2.5.6 中断嵌套控制 59
2.5.7 高级中断操作 59
2.5.8 异常返回值 61
2.6 堆栈 62
2.6.1 堆栈的基本操作 62
2.6.2 Cortex-M3堆栈操作 63
2.6.3 Cortex-M3的双堆栈机制 64
2.7 小结 64
习题 64
第3章 STM32最小系统的设计 65
3.1 STM32F103最小系统的设计方案 65
3.2 最小系统设计的要素 67
3.2.1 STM32晶体振荡器 68
3.2.2 复位电路 69
3.2.3 LED、Key及BOOT跳线 70
3.2.4 稳压电源及ISP下载口 71
3.2.5 I/O端口 74
3.3 PCB图设计 75
3.4 小结 76
第4章 MDK-ARM软件入门 77
4.1 MDK-ARM 4.7 0简介 77
4.2 新建MDK工程 78
4.2.1 下载外设库 78
4.2.2 建立新工程 79
4.2.3 工程编译环境设置 87
4.3 RVMDK使用技巧 91
4.3.1 文本美化 92
4.3.2 代码编辑技巧 92
4.3.3 其他小技巧 98
4.4 调试与下载 98
4.4.1 STM32软件仿真 98
4.4.2 STM32程序下载 106
4.5 固件函数库函数命名规则 108
4.6 小结 110
习题 110
第5章 GPIO及外部中断的使用 111
5.1 综述 111
5.1.1 通用I/O 112
5.1.2 单独的位设置或位清除 112
5.1.3 外部中断/唤醒线 112
5.1.4 复用功能 112
5.1.5 软件重新映射I/O复用功能 112
5.1.6 GPIO锁定机制 112
5.1.7 输入配置 113
5.1.8 输出配置 113
5.1.9 复用功能配置 113
5.1.1 0模拟输入配置 113
5.2 库函数 114
5.2.1 函数GPIO_Init 114
5.2.2 函数GPIO_SetBits 116
5.2.3 函数GPIO_ResetBits 116
5.2.4 函数GPIO_WriteBit 117
5.2.5 函数GPIO_Write 117
5.2.6 函数GPIO_ReadOutputDataBit 117
5.2.7 函数GPIO_ReadOutputData 118
5.2.8 函数GPIO_ReadInputDataBit 118
5.2.9 函数GPIO_ReadInputData 119
5.3 I/O端口的外设映射 119
5.3.1 将OSC_32 IN/OSC_32 OUT作为PC14/PC15端口 120
5.3.2 将OSC_IN/OSC_OUT作为PD0/PD1端口 120
5.3.3 CAN复用功能重映射 120
5.3.4 JTAG/SWD复用功能重映射 120
5.3.5 ADC复用功能重映射 121
5.3.6 定时器复用功能重映射 121
5.3.7 USART复用功能重映射 122
5.3.8 I2C1复用功能重映射 123
5.3.9 SPI1复用功能重映射 123
5.4 位运算 124
5.4.1 移位运算 124
5.4.2 按位与运算 126
5.4.3 按位或运算 127
5.4.4 取反运算 127
5.4.5 异或运算 128
5.5 GPIO控制实例 128
5.5.1 实例1——控制LED闪烁 128
5.5.2 实例2——跑马灯 130
5.5.3 实例3——按键输入1 133
5.6 外部中断和中断控制器 137
5.6.1 嵌套向量中断控制器 137
5.6.2 外部中断/事件控制器 141
5.6.3 NVIC库函数介绍 142
5.6.4 外部中断控制器库函数介绍 146
5.6.5 外部中断实例——按键输入2 149
5.7 小结 150
习题 151
第6章 定时器的使用 152
6.1 STM32F的定时器简介 152
6.1.1 高级控制定时器TIM1的TIM8 152
6.1.2 通用定时器TIMx 153
6.1.3 基本定时器TIM6和TIM7 153
6.2 通用定时器功能描述 154
6.2.1 时基单元 154
6.2.2 计数器模式 155
6.2.3 时钟选择 161
6.2.4 捕获/比较通道 163
6.2.5 输入捕获模式 164
6.2.6 PWM输入模式 165
6.2.7 强置输出模式 166
6.2.8 输出比较模式 166
6.2.9 PWM模式 167
6.2.1 0定时器和外部触发的同步 169
6.2.1 1定时器同步 171
6.3 定时器固件库函数介绍 171
6.3.1 函数TIM_DeInit 171
6.3.2 函数TIM_TimeBaseInit 172
6.3.3 函数TIM_OC1Init 173
6.3.4 函数TIM_OC2Init 175
6.3.5 函数TIM_OC3Init 175
6.3.6 函数TIM_OC4Init 176
6.3.7 函数TIM_ICInit 176
6.3.8 函数TIM_BDTRConfig 178
6.3.9 函数TIM_Cmd 179
6.3.1 0函数TIM_CtrIPWMOutputs 179
6.3.1 1 函数TIM_ITConfig 180
6.3.1 2函数TIM_SelectInputTrigger 181
6.3.1 3函数TIM_EncoderInterfaceConfig 181
6.3.1 4函数TIM_ARRPreloadConfig 182
6.3.1 5函数TIM_CCPreloadControl 182
6.3.1 6函数TIM_OC1PreloadConfig 183
6.3.1 7函数TIM_OC2PreloadConfig 183
6.3.1 8 函数TIM_OC3PreloadConfig 184
6.3.1 9函数TIM_OC4PreloadConfig 184
6.3.2 0函数TIM_SelectOutputTrigger 184
6.3.2 1 函数TIM_SelectSlaveMode 185
6.3.2 2 函数TIM_SelectMasterSlaveMode 186
6.3.2 3 函数TIM_SetCounter 186
6.3.2 4函数TIM_SetAutoreload 187
6.3.2 5 函数TIM_GetCounter 187
6.3.2 6函数TIM_GetPrescaler 188
6.3.2 7 函数TIM_GetFlagStatus 188
6.3.2 8函数TIM_ClearFlag 189
6.3.2 9函数TIM_GetITStatus 189
6.3.3 0 函数TIM_ClearITPendingBit 190
6.4 定时器实训 190
6.4.1 定时器控制跑马灯 190
6.4.2 PWM电动机控制 192
6.5 小结 197
习题 198
第7章 STM32的A/D转换模块 199
7.1 ADC的主要技术指标及选型 199
7.1.1 ADC的主要技术指标分析 200
7.1.2 ADC的选型技巧及注意事项 201
7.2 STM32的ADC 203
7.2.1 ADC功能描述 203
7.2.2 ADC寄存器描述 209
7.2.3 ADC中断 214
7.3 STM32内部温度传感器 214
7.3.1 硬件设计 214
7.3.2 软件设计 215
7.4 STM32的ADC实验 217
7.4.1 硬件设计 217
7.4.2 软件设计 217
7.5 小结 218
习题 218
第8章 STM32显示模块操作 219
8.1 OLED显示 219
8.1.1 OLED的驱动方式 219
8.1.2 硬件设计 221
8.1.3 软件设计 225
8.2 TFT LCD显示 226
8.2.1 TFT LCD的特点 226
8.2.2 硬件设计 227
8.2.3 软件设计 228
8.3 图片显示实例 230
8.3.1 图片显示原理简介 230
8.3.2 硬件设计 231
8.3.3 软件设计 232
8.4 汉字显示实例 261
8.4.1 汉字显示原理简介 262
8.4.2 硬件设计 265
8.4.3 软件设计 265
8.5 小结 267
习题 267
第9章 STM32外设接口模块 268
9.1 USART模块 268
9.1.1 USART功能描述 268
9.1.2 USART寄存器简介 270
9.1.3 USART操作实例 273
9.2 SPI模块 274
9.2.1 SPI简介 275
9.2.2 SPI功能描述 275
9.2.3 SPI配置简介 279
9.2.4 SPI操作实例 280
9.3 I2C模块 281
9.3.1 I2C简介 281
9.3.2 I2C功能描述 282
9.3.3 I2C配置简介 283
9.3.4 I2C操作实例 283
9.4 CAN总线模块 286
9.4.1 CAN简介 286
9.4.2 CAN功能描述 287
9.4.3 CAN配置简介 288
9.4.4 CAN操作实例 290
9.5 USB模块 292
9.5.1 USB简介 293
9.5.2 USB功能描述 293
9.5.3 USB配置简介 294
9.5.4 USB操作实例 295
9.6 小结 297
习题 297
第10章 STM32综合实验 298
10.1 STM32开发板 298
10.1.1 STM32开发板资源介绍 298
10.1.2 STM32开发板硬件设计 300
10.2 追光系统 304
10.2.1 追光系统设计要求 304
10.2.2 追光系统软硬件设计 305
10.2.3 追光系统实现 307
10.3 倒立摆 308
10.3.1 倒立摆设计要求 308
10.3.2 倒立摆软硬件设计 309
10.3.3 倒立摆的实现 311
10.4 储能式光电寻迹车 312
10.4.1 储能式光电寻迹车设计要求 312
10.4.2 储能式光电寻迹车软硬件设计 313
10.4.3 储能式光电寻迹车的实现 316
10.5 MP3播放器 317
10.5.1 MP3播放器设计要求 317
10.5.2 MP3播放器软硬件设计 317
10.5.3 MP3播放器的实现 319
10.6 基于GPRS的电热水器控制系统 323
10.6.1 基于GPRS的电热水器控制系统设计要求 323
10.6.2 基于GPRS的电热水器控制系统软硬件设计 323
10.6.3 基于GPRS的电热水器控制系统实现 326
10.7 小结 329
习题 329
参考文献 331