第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的程序开发 92
第5章 STM32基础实验 100
5.1先用GPIO来点个灯吧 100
5.1.1概述 100
5.1.2实验设计 101
5.1.3硬件电路 101
5.1.4程序设计 101
5.1.5程序清单 102
5.1.6注意事项 103
5.1.7使用到的库函数一览 104
5.1.8实验结果 112
5.1.9小结 112
5.2简约而不简单的SysTick定时器 113
5.2.1概述 113
5.2.2实验设计和硬件电路 114
5.2.3程序设计 114
5.2.4程序清单 115
5.2.5使用到的主要库函数一览 117
5.2.6注意事项 120
5.2.7实验结果 120
5.2.8小结 120
5.3使用GPIO和SysTick定时器实现按键扫描 120
5.3.1概述 120
5.3.2实验设计 121
5.3.3硬件电路 122
5.3.4程序设计 122
5.3.5程序清单 123
5.3.6注意事项 127
5.3.7实验结果 127
5.3.8小结 127
5.4通过串口和PC说声Hello 127
5.4.1概述 127
5.4.2实验设计 129
5.4.3硬件电路 129
5.4.4程序设计 129
5.4.5程序清单 130
5.4.6使用到的库函数一览 132
5.4.7注意事项 136
5.4.8实验结果 137
5.4.9小结 138
5.5风吹草动也不放过——NVIC和外部中断 138
5.5.1概述 138
5.5.2实验设计 140
5.5.3硬件电路 141
5.5.4程序设计 141
5.5.5程序清单 142
5.5.6使用到的库函数 146
5.5.7注意事项 151
5.5.8实验结果 151
5.5.9小结 152
5.6两只忠诚的看门狗 152
5.6.1窗口看门狗 152
5.6.2独立看门狗 162
5.7 DMA——让数据传输更上一层楼 174
5.7.1概述 174
5.7.2实验设计 176
5.7.3硬件电路 176
5.7.4程序设计 176
5.7.5程序清单 177
5.7.6使用到的库函数 182
5.7.7注意事项 187
5.7.8实验结果 188
5.7.9小结 188
5.8 BKP寄存器与入侵检测——廉价的掉电存储与防拆解方案 189
5.8.1概述 189
5.8.2实验设计 190
5.8.3硬件电路 190
5.8.4程序设计 190
5.8.5程序清单 192
5.8.6使用到的库函数一览 196
5.8.7注意事项 199
5.8.8实验结果 200
5.8.9小结 200
5.9利用RTC实现一个万年历 201
5.9.1概述 201
5.9.2实验设计 202
5.9.3硬件电路 203
5.9.4程序设计 203
5.9.5程序清单 205
5.9.6使用到的库函数 210
5.9.7注意事项 214
5.9.8实验结果 214
5.9.9小结 214
5.10挑战STM32的低功耗设计 215
5.10.1概述 215
5.10.2实验设计 217
5.10.3硬件电路 217
5.10.4程序设计 218
5.10.5程序清单 219
5.10.6使用到的库函数 223
5.10.7注意事项 223
5.10.8实验结果 224
5.10.9小结 224
5.11 STM32有一双眼睛叫ADC 225
5.11.1概述 225
5.11.2实验设计 226
5.11.3硬件电路 226
5.11.4程序设计 226
5.11.5程序清单 228
5.11.6使用到的库函数 231
5.11.7注意事项 237
5.11.8实验结果 238
5.11.9小结 238
5.12通用定时器的应用 238
5.12.1概述 238
5.12.2时基单元 239
5.12.3比较输出 247
5.12.4 PWM输出 252
5.12.5 PWM输入捕获 254
5.12.6本节使用到的库函数 261
5.12.7小结 271
5.13嵌入式Flash的读/写 271
5.13.1概述 271
5.13.2实验设计 273
5.13.3硬件电路 273
5.13.4程序设计 273
5.13.5程序清单 273
5.13.6程序所使用到的库函数 275
5.13.7注意事项 277
5.13.8实验结果 277
5.13.9小结 277
5.14使用SPI接口实现自通信 278
5.14.1概述 278
5.14.2实验设计 279
5.14.3硬件设计 279
5.14.4程序设计 280
5.14.5程序清单 283
5.13.6所使用到的库函数 288
5.14.7注意事项 292
5.14.8实验结果 292
5.14.9小结 293
5.15 I2C接口自通信实验 294
5.15.1概述 294
5.15.2实验设计 296
5.15.3硬件电路 297
5.15.4程序设计 297
5.15.5程序清单 299
5.15.6使用到的库函数 304
5.15.7注意事项 310
5.15.8实验结果 310
5.15.9小结 310
5.16来认识一下CAN总线 311
5.16.1概述 311
5.16.2实验设计 313
5.16.3硬件电路 314
5.16.4程序设计 314
5.16.5程序清单 317
5.16.6使用到的库函数 321
5.16.7注意事项 328
5.16.8实验结果 329
5.16.9小结 329
5.17加速你的CRC运算 329
5.17.1概述 329
5.17.2实验设计 332
5.17.3硬件电路 333
5.17.4程序设计 333
5.17.5程序清单 334
5.17.6使用到的库函数一览 341
5.17.7注意事项 342
5.17.8实验结果 342
5.17.9小结 343
5.18 ADC的孪生兄弟DAC 343
5.18.1概述 343
5.18.2实验设计 344
5.18.3硬件电路 345
5.18.4程序设计 346
5.18.5程序清单 347
5.18.6使用到的库函数一览 350
5.18.7注意事项 352
5.18.8实验结果 352
5.18.9小结 352
第6章 STM32进阶应用 353
6.1进阶文章1:IAR EWARM的工程建立 353
6.2进阶文章2:STM32的时钟树 361
6.3进阶文章3:解析STM32的库函数 366
6.4进阶文章4:在STM32平台上实现Cortex-M3的位带特性 372
6.5进阶文章5:解析STM32的启动过程 376
6.6进阶文章6:环形缓冲区的实现 384
6.7进阶文章7:软件定时器的设计 390
6.8进阶文章8:STM32的ISP下载 396
6.9进阶文章9:基于STM32标准外设固件库v3.x的工程建立 403
6.10进阶文章10:使用I/O口实现模拟I2C接口 407
6.11进阶文章11:高级调试端口ITM 412
第7章 综合性实例:STM32的IAP方案 419
附录A常用程序 431
附录B Typedef定义 433
附录C本书硬件平台介绍 434
参考文献 441