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