第一篇 系统架构 2
第1章“芯”系ARM 2
1.1强劲的ARM芯 2
1.1.1最成功的科技公司 2
1.1.2 ARMv6-M架构 3
1.1.3 Cortex-M0处理器简介 3
1.1.4 Cortex-M0处理器的特点 5
1.1.5 RISC架构 6
1.1.6 AMBA总线 6
1.1.7微控制器软件接口标准(CMSIS ) 7
1.2 STM32系列微控制器 9
1.2.1 STM32微控制器家族 9
1.2.2 STM32的命名规则 9
1.2.3 STM32F0系列微控制器功能概述 13
第2章 开发环境 17
2.1软件开发工具 17
2.1.1 MDK-ARM集成开发环境 18
2.1.2安装MDK-ARM软件 21
2.1.3 STM32CubeMX软件 27
2.1.4安装STM32CubeMX软件 34
2.2硬件开发工具 46
2.2.1仿真/编程器 47
2.2.2 STM32系统板 51
2.3项目建立 52
2.3.1新建开发项目 52
2.3.2查看项目文件 62
2.3.3打开项目 64
2.3.4查看项目属性 69
2.3.5编译项目 73
第3章GPIO 76
3.1 GPIO概述 76
3.1.1 GPIO的功能 76
3.1.2 GPIO的位结构 78
3.1.3 GPIO的特殊功能 80
3.1.4 GPIO的寄存器分类 82
3.2 GPIO函数 82
3.2.1 GPIO类型定义 82
3.2.2 GPIO常量定义 83
3.2.3 GPIO函数定义 84
3.3 GPIO应用实例 86
3.3.1生成开发项目 86
3.3.2主程序文件结构解析 90
3.3.3外设初始化过程分析 94
第4章HAL库 98
4.1 HAL库结构 98
4.1.1 HAL库的特点 98
4.1.2 HAL库的构成 99
4.1.3 HAL库用户应用程序 99
4.2 HAL库文件 101
4.2.1 HAL库头文件 101
4.2.2 HAL库源文件 104
第5章 系统配置 107
5.1系统架构 107
5.1.1总线结构 107
5.1.2存储器的组织 108
5.1.3启动配置 108
5.2 Flash存储器 110
5.2.1 Flash的读操作 110
5.2.2 Flash的写和擦除操作 111
5.2.3 Flash读保护 113
5.2.4 Flash写保护 114
5.2.5 Flash中断 114
5.2.6 CRC计算单元 114
5.3选项字节 115
5.3.1选项字节的格式 115
5.3.2选项字节编程 118
5.4 Flash函数 119
5.4.1 Flash类型定义 119
5.4.2 Flash常量定义 120
5.4.3 Flash函数定义 121
5.5 CRC函数 128
5.5.1 CRC类型定义 128
5.5.2 CRC常量定义 129
5.5.3 CRC函数定义 131
第6章 时钟 135
6.1概述 135
6.1.1时钟树的结构 135
6.1.2时钟源 137
6.1.3时钟安全 140
6.1.4时钟应用 140
6.1.5低功耗模式下的时钟 141
6.1.6复位 141
6.2 RCC函数 143
6.2.1 RCC类型定义 143
6.2.2 RCC常量定义 145
6.2.3 RCC函数定义 152
6.3时钟控制实例 159
第7章 电源控制 162
7.1供电管理 162
7.1.1供电引脚 162
7.1.2上电复位和掉电复位 165
7.1.3可编程电压检测器 166
7.2低功耗模式 166
7.2.1低功耗模式的分类 166
7.2.2睡眠模式 167
7.2.3停机模式 168
7.2.4待机模式 169
7.2.5自动唤醒 170
7.3电源控制函数 170
7.3.1电源控制类型定义 170
7.3.2电源控制常量定义 171
7.3.3电源控制函数定义 172
7.4低功耗模式应用实例 178
7.4.1从停机模式唤醒 178
7.4.2从待机模式唤醒 180
第8章DMA控制器 183
8.1 DMA概述 183
8.1.1 DMA控制器内部结构 183
8.1.2 DMA的处理过程 183
8.1.3 DMA中断 186
8.1.4 DMA请求映射 186
8.2 DMA函数 189
8.2.1 DMA类型定义 189
8.2.2 DMA常量定义 190
8.2.3 DMA函数定义 191
8.3 DMA应用实例 194
第9章 异常 198
9.1 Cortex-M0的异常处理 198
9.1.1异常的特点 198
9.1.2嵌套向量中断控制器 201
9.1.3中断的使能 201
9.1.4中断请求的挂起和清除 202
9.1.5中断优先级控制 204
9.1.6 SysTick定时器 204
9.2扩展中断和事件控制器(EXTI) 207
9.2.1事件线概述 207
9.2.2事件线的控制逻辑 208
9.2.3事件线的配置方法 210
9.2.4 EXTI唤醒 210
9.2.5中断服务程序(ISR) 210
9.3异常相关函数 212
9.3.1异常类型定义 212
9.3.2异常常量定义 213
9.3.3异常函数定义 213
9.4 EXTI应用实例 219
第二篇 外设模块 224
第10章 模拟-数字转换器 224
10.1 ADC模块概述 224
10.1.1 ADC的内部结构 224
10.1.2 ADC校准 225
10.1.3 ADC的启动和关闭 226
10.1.4 ADC时钟 228
10.2 ADC功能配置 229
10.2.1 ADC的基础配置 229
10.2.2 ADC的转换模式 230
10.2.3 A/D转换的启动和停止 231
10.2.4 A/D转换时序 232
10.2.5 ADC过冲 233
10.2.6管理转换数据 235
10.2.7 ADC的低功耗特性 235
10.2.8模拟看门狗 237
10.2.9 ADC的内部通道转换 238
10.2.10 ADC中断 240
10.3 ADC函数 241
10.3.1 ADC类型定义 241
10.3.2 ADC常量定义 242
10.3.3 ADC函数定义 246
10.4 ADC的应用实例 253
10.4.1数字显示电压值 254
10.4.2读取温度传感器 256
第11章 数字-模拟转换器 259
11.1 DAC模块概述 259
11.1.1 DAC的内部结构 259
11.1.2 DAC数据格式 260
11.1.3 DAC通道转换 261
11.1.4 DAC触发选择 262
11.1.5 DAC的DMA请求 262
11.2 DAC波形生成 263
11.2.1噪声波生成 263
11.2.2三角波生成 264
11.2.3 DAC双通道转换 264
11.3 DAC函数 266
11.3.1 DAC类型定义 266
11.3.2 DAC常量定义 266
11.3.3 DAC函数定义 267
11.4 DAC应用实例 277
第12章 模拟比较器 281
12.1模拟比较器概述 281
12.1.1模拟比较器的功能 281
12.1.2模拟比较器的内部结构 281
12.2模拟比较器的函数 282
12.2.1模拟比较器类型定义 282
12.2.2模拟比较器常量定义 283
12.2.3模拟比较器函数定义 285
12.3模拟比较器应用实例 288
第13章 实时时钟 291
13.1 RTC概述 291
13.1.1 RTC主要特性 291
13.1.2时钟和日历 294
13.1.3可编程报警 294
13.2 RTC操作 295
13.2.1 RTC初始化 295
13.2.2读取日历寄存器 296
13.2.3 RTC同步 297
13.2.4 RTC参考时钟检测 298
13.2.5 RTC平滑数字校准 298
13.2.6时间戳 299
13.2.7侵入检测 299
13.2.8时钟输出 300
13.2.9 RTC低功耗模式 301
13.2.10 RTC中断 301
13.3 RTC函数 302
13.3.1 RTC类型定义 302
13.3.2 RTC常量定义 305
13.3.3 RTC函数定义 310
13.4 RTC应用实例 326
第14章 定时器 329
14.1定时器概述 329
14.1.1定时器配置 329
14.1.2 TIM1的功能 330
14.1.3计数时钟 336
14.2捕捉/比较通道 338
14.2.1捕捉/比较通道结构 338
14.2.2输入捕捉模式 340
14.2.3 PWM输入模式 341
14.2.4强制输出模式 342
14.2.5输出比较模式 342
14.2.6 PWM模式 343
14.2.7互补输出和死区控制 345
14.2.8刹车及清除参考信号 347
14.2.9单脉冲模式 350
14.2.10外部触发同步 352
14.3定时器函数 355
14.3.1定时器类型定义 355
14.3.2定时器常量定义 359
14.3.3定时器函数定义 366
14.4 TIM 1应用实例 417
14.4.1测量信号周期 418
14.4.2生成PWM信号 420
14.4.3体验PWM输入模式 422
第15章 看门狗 425
15.1独立看门狗 425
15.1.1 IWDG的功能 425
15.1.2特殊状态下的IWDG 427
15.2窗口看门狗 427
15.2.1 WWDG的内部结构和时间窗口 427
15.2.2 WWDG的高级功能 428
15.3看门狗函数 429
15.3.1看门狗类型定义 429
15.3.2看门狗常量定义 430
15.3.3看门狗函数定义 430
15.4 IWDG应用实例 433
第16章I2C总线接口 436
16.1 I2C模块概述 436
16.1.1 I2C模块的功能 436
16.1.2 I2C 工作模式 437
16.1.3 I2C的初始化 439
16.1.4数据传输 442
16.2 I2C从机模式 444
16.2.1 I2C从机初始化 444
16.2.2从机时钟延长 444
16.2.3从机发送 445
16.2.4从机接收 448
16.3 I2C主模式 449
16.3.1主机接收 450
16.3.2主机发送 452
16.4 SMBus 454
16.4.1 SMBus的特点 454
16.4.2 SMBus的功能 455
16.4.3 SMBus初始化 457
16.4.4 SMBus从机模式 458
16.5 I2C模块的控制功能 462
16.5.1 I2C低功耗模式 462
16.5.2错误条件 462
16.5.3 DMA请求 463
16.5.4 I2C中断 464
16.6 I2C函数 465
16.6.1 I2C类型定义 465
16.6.2 I2C常量定义 468
16.6.3 I2C函数定义 472
16.7 I2C应用实例 510
第17章SPI总线接口 513
17.1 SPI概述 513
17.1.1 SPI模块的特点 513
17.1.2 SPI的工作方式 514
17.1.3 SPI的主从选择 516
17.1.4 SPI的帧格式 518
17.2 SPI通信 519
17.2.1 SPI的通信流程 519
17.2.2 SPI的状态标志 523
17.2.3 SPI的错误标志 523
17.2.4 NSS脉冲模式 524
17.2.5 SPI的CRC计算 525
17.2.6 SPI中断 525
17.3 SPI函数 526
17.3.1 SPI类型定义 526
17.3.2 SPI常量定义 528
17.3.3 SPI函数定义 532
17.4 SPI的应用实例 554
第18章 通用同步异步收发器 557
18.1 USART概述 557
18.1.1 USART的结构 557
18.1.2 USART的帧格式 559
18.1.3 USART发送器 559
18.1.4 USART接收器 563
18.1.5波特率 564
18.2 USART通信 566
18.2.1多机通信 566
18.2.2校验控制 567
18.2.3 USART同步模式 568
18.2.4利用DMA实现连续通信 568
18.2.5 USART的控制功能 571
18.2.6 USART的中断 573
18.3 USART函数 575
18.3.1 UART类型定义 575
18.3.2 UART常量定义 581
18.3.3 USART函数定义 590
18.4 USART应用实例 623
第19章 触摸传感控制器 626
19.1 TSC概述 626
19.1.1 TSC的内部结构 626
19.1.2表面电荷迁移检测原理 628
19.1.3表面电荷迁移采集顺序 628
19.1.4扩展频谱和最大计数错误 630
19.1.5 TSC的I/O模式 630
19.1.6 TSC采集过程 631
19.1.7 TSC的低功耗模式和中断 632
19.2 TSC函数 632
19.2.1 TSC类型定义 632
19.2.2 TSC常量定义 633
19.2.3 TSC函数定义 636
19.3 TSC 应用实例 641
第20章 控制器局域网 644
20.1 CAN总线 644
20.1.1 显性与隐性 644
20.1.2报文 645
20.2 bxCAN模块 648
20.2.1 bxCAN的结构 648
20.2.2 bxCAN的工作模式 650
20.2.3 bxCAN的测试模式 651
20.3 bxCAN通信 652
20.3.1发送管理 652
20.3.2接收管理 653
20.3.3标识符过滤 655
20.3.4报文存储 659
20.3.5位时间 659
20.3.6 bxCAN中断 660
20.4 bxCAN函数 662
20.4.1 bxCAN类型定义 662
20.4.2 bxCAN常量定义 664
20.4.3 bxCAN函数定义 666
20.5 bxCAN应用实例 671
第21章 通用串行总线 674
21.1 USB概述 674
21.1.1 USB总线结构 674
21.1.2 USB端点 675
21.1.3 USB通信管道 676
21.1.4包的字段格式 676
21.1.5 USB的包类型 677
21.1.6 USB的事务处理 679
21.1.7 USB数据传输的类型 680
21.1.8 USB设备描述符 681
21.1.9标准设备请求 683
21.1.10 USB的设备状态 687
21.1.11 USB总线的枚举过程 687
21.2 USB模块 689
21.2.1 USB模块的结构 689
21.2.2 USB模块数据传输 691
21.3 USB总线编程 691
21.3.1 USB复位操作 692
21.3.2分组缓冲区 692
21.3.3端点初始化 693
21.3.4 IN分组 693
21.3.5 OUT和SETUP分组 694
21.3.6控制传输 695
21.3.7双缓冲端点 696
21.3.8同步传输 697
21.3.9挂起/恢复事件 698
21.4 USB函数 699
21.4.1 USB类型定义 699
21.4.2 USB常量定义 701
21.4.3 USB函数定义 701
21.5 USB编程实例 711
附录 719
附录A STM32F072VBT6系统板电路原理图 720
附录B STM32F072VBT6全功能开发板 721
附录C STM32F0核心板、显示模块及编程器 722
附录D STM32F072VBT6微控制器引脚定义 723
附录E STM32F072VBT6微控制器引脚功能 724
附录F STM32F072VBT6微控制器端口复用功能映射表 731
附录G STM32F072VBT6微控制器存储器映像和外设寄存器编址 735
附录H寄存器特性缩写列表 738
附录I术语和缩写对照表 739
附录J本书源代码清单及下载链接 741