第1章 什么是STM32 1
1.1 从Cortex-M3说起 1
1.2 STM32面面观 3
第2章 杰出的源泉——ARM Cortex-M3内核架构 8
2.1 ARM架构回顾 8
2.2 Cortex-M3 CPU:核心中的核心 9
2.2.1 管道 9
2.2.2 编程模型 10
2.2.3 Cortex-M3 CPU的运行模式 12
2.2.4 Thumb-2指令集 13
2.2.5 非对齐存取接口 13
2.3 Cortex-M3处理器——不只是个处理器 14
2.3.1 总线 14
2.3.2 总线矩阵 14
2.3.3 存储映射 15
2.3.4 位带的概念 16
2.3.5 系统节拍定时器 18
2.3.6 中断处理 18
2.3.7 嵌套中断向量控制器 19
2.4 低功耗的新期待 25
2.4.1 进入低功耗模式 25
2.4.2 CoreSight调试组件 26
第3章 欢迎来到STM32的世界 28
3.1 让STM32跑起来 28
3.1.1 引脚分布和封装尺寸 28
3.1.2 电源的供应方案 28
3.1.3 复位电路 29
3.1.4 一个典型的STM32最小系统 30
3.1.5 时钟源的选择 30
3.1.6 启动引脚和ISP编程 32
3.1.7 调试端口 32
3.2 认识真正的STM32 32
3.2.1 存储区映射 33
3.2.2 性能最大化 34
3.3 丰富多样的外部设备 41
3.3.1 通用设备单元 41
3.3.2 通信接口 61
3.4 STM32也论低功耗 67
3.4.1 运行模式 67
3.4.2 几种低功耗模式 68
3.4.3 调试支持特性 71
3.5 为STM32保驾护航 71
3.5.1 一些安全特性 71
3.5.2 复位控制 72
3.5.3 电源检测 72
3.5.4 时钟安全系统 72
3.5.5 看门狗 74
3.5.6 外设的安全特性 76
3.6 高性能内置Flash模块 77
3.6.1 内置Flash安全特性和编程方法 77
3.6.2 选项字节 78
第4章 百花齐放的开发工具 79
4.1 开发平台 79
4.2 固件库和协议栈 80
4.3 实时操作系统RTOS 81
4.4 Keil MDK使用入门 81
4.4.1 Keil MDK的安装与工程建立 81
4.4.2 使用Keil MDK进行STM32的程序开发 93
第5章 STM32基础实验 101
5.1 先用GPIO来点个灯吧 101
5.1.1 概述 101
5.1.2 实验设计 102
5.1.3 硬件电路 102
5.1.4 程序设计 102
5.1.5 程序清单 103
5.1.6 注意事项 105
5.1.7 使用到的库函数一览 105
5.1.8 实验结果 114
5.1.9 小结 114
5.2 简约而不简单的SysTick定时器 114
5.2.1 概述 114
5.2.2 实验设计和硬件电路 116
5.2.3 程序设计 116
5.2.4 程序清单 117
5.2.5 使用到的主要库函数一览 119
5.2.6 注意事项 120
5.2.7 实验结果 121
5.2.8 小结 121
5.3 使用GPIO和SysTick定时器实现按键扫描 121
5.3.1 概述 121
5.3.2 实验设计 122
5.3.3 硬件电路 122
5.3.4 程序设计 122
5.3.5 程序清单 124
5.3.6 注意事项 128
5.3.7 实验结果 129
5.3.8 小结 129
5.4 通过串口和PC说声Hello 129
5.4.1 概述 129
5.4.2 实验设计 131
5.4.3 硬件电路 131
5.4.4 程序设计 131
5.4.5 程序清单 132
5.4.6 使用到的库函数一览 134
5.4.7 注意事项 138
5.4.8 实验结果 140
5.4.9 小结 140
5.5 风吹草动也不放过——NVIC和外部中断 140
5.5.1 概述 140
5.5.2 实验设计 143
5.5.3 硬件电路 143
5.5.4 程序设计 144
5.5.5 程序清单 144
5.5.6 使用到的库函数 149
5.5.7 注意事项 154
5.5.8 实验结果 154
5.5.9 小结 155
5.6 两只忠诚的看门狗 155
5.6.1 窗口看门狗 155
5.6.2 独立看门狗 166
5.7 DMA——让数据传输更上一层楼 179
5.7.1 概述 179
5.7.2 实验设计 181
5.7.3 硬件电路 181
5.7.4 程序设计 181
5.7.5 程序清单 182
5.7.6 使用到的库函数 188
5.7.7 注意事项 194
5.7.8 实验结果 194
5.7.9 小结 195
5.8 BKP寄存器与入侵检测——廉价的掉电存储与防拆解方案 195
5.8.1 概述 195
5.8.2 实验设计 196
5.8.3 硬件电路 197
5.8.4 程序设计 197
5.8.5 程序清单 198
5.8.6 使用到的库函数一览 204
5.8.7 注意事项 207
5.8.8 实验结果 207
5.8.9 小结 208
5.9 利用RTC实现一个万年历 208
5.9.1 概述 208
5.9.2 实验设计 210
5.9.3 硬件电路 210
5.9.4 程序设计 210
5.9.5 程序清单 213
5.9.6 使用到的库函数 220
5.9.7 注意事项 224
5.9.8 实验结果 224
5.9.9 小结 224
5.10 挑战STM32的低功耗设计 225
5.10.1 概述 225
5.10.2 实验设计 227
5.10.3 硬件电路 227
5.10.4 程序设计 228
5.10.5 程序清单 228
5.10.6 使用到的库函数 233
5.10.7 注意事项 234
5.10.8 实验结果 234
5.10.9 小结 235
5.11 STM32有一双眼睛叫ADC 235
5.11.1 概述 235
5.11.2 实验设计 237
5.11.3 硬件电路 237
5.11.4 程序设计 237
5.11.5 程序清单 239
5.11.6 使用到的库函数 242
5.11.7 注意事项 249
5.11.8 实验结果 250
5.11.9 小结 250
5.12 通用定时器的应用 250
5.12.1 概述 250
5.12.2 时基单元 251
5.12.3 比较输出 259
5.12.4 PWM输出 267
5.12.5 PWM输入捕获 271
5.12.6 本节使用到的库函数 279
5.12.7 小结 289
5.13 嵌入式Flash的读/写 289
5.13.1 概述 289
5.13.2 实验设计 291
5.13.3 硬件电路 291
5.13.4 程序设计 291
5.13.5 程序清单 292
5.13.6 程序所使用到的库函数 293
5.13.7 注意事项 295
5.13.8 实验结果 295
5.13.9 小结 295
5.14 使用SPI接口实现自通信 296
5.14.1 概述 296
5.14.2 实验设计 297
5.14.3 硬件设计 297
5.14.4 程序设计 298
5.14.5 程序清单 301
5.14.6 所使用到的库函数 307
5.14.7 注意事项 311
5.14.8 实验结果 311
5.14.9 小结 312
5.15 I2C接口自通信实验 313
5.15.1 概述 313
5.15.2 实验设计 315
5.15.3 硬件电路 316
5.15.4 程序设计 316
5.15.5 程序清单 318
5.15.6 使用到的库函数 324
5.15.7 注意事项 330
5.15.8 实验结果 330
5.15.9 小结 330
5.16 来认识一下CAN总线 331
5.16.1 概述 331
5.16.2 实验设计 333
5.16.3 硬件电路 334
5.16.4 程序设计 334
5.16.5 程序清单 337
5.16.6 使用到的库函数 342
5.16.7 注意事项 350
5.16.8 实验结果 351
5.16.9 小结 351
5.17 加速你的CRC运算 351
5.17.1 概述 351
5.17.2 实验设计 354
5.17.3 硬件电路 355
5.17.4 程序设计 355
5.17.5 程序清单 355
5.17.6 使用到的库函数一览 365
5.17.7 注意事项 366
5.17.8 实验结果 366
5.17.9 小结 367
5.18 ADC的孪生兄弟DAC 367
5.18.1 概述 367
5.18.2 实验设计 368
5.18.3 硬件电路 369
5.18.4 程序设计 370
5.18.5 程序清单 371
5.18.6 使用到的库函数一览 375
5.18.7 注意事项 377
5.18.8 实验结果 377
5.18.9 小结 377
第6章 STM32进阶应用 378
6.1 进阶文章1:IAR EWARM的工程建立 378
6.2 进阶文章2:STM32的时钟树 386
6.3 进阶文章3:解析STM32的库函数 390
6.4 进阶文章4:在STM32平台上实现Cortex-M3的位带特性 396
6.5 进阶文章5:解析STM32的启动过程 400
6.6 进阶文章6:环形缓冲区的实现 409
6.7 进阶文章7:软件定时器的设计 415
6.8 进阶文章8:STM32的ISP下载 421
6.9 进阶文章9:使用I/O口实现模拟I2C接口 428
6.10 进阶文章10:高级调试端口ITM 432
第7章 综合性实例:STM32的IAP方案 439
附录A 常用程序 452
附录B Typedef定义 454
附录C 本书硬件平台介绍 455
参考文献 462