首页>参考读物>计算机科学与技术>计算机组织与体系结构

STM32F0实战:基于HAL库开发
作者 : 高显生 编著
出版日期 : 2018-11-28
ISBN : 978-7-111-61296-4
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 753
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

作为STM32单片机的入门者,往往在从寄存器开发还是从固件库开发上纠结不定,本书将从市场上非常畅销的F0系列微控制器入手,利用意法公司新近推出的一款全新的开发软件—STM32CubeMX做为项目建立和代码初始化工具,快速生成F0系列的开发环境,并在MDK-ARM软件上对代码进行进一步的编辑修改,直至生成最终的开发项目。
本书将使用STM32CubeMX软件自带的HAL固件库来开发,书内附HAL库详解,HAL库不同与以往的标准外设库,是意法公司最新推出的替代标准外设库的产品。

图书特色

本书基于图形化软件平台STM32CubeMX生成初始代码。
涵盖ARM Cortex内核的STM32F072VBT6微控制器大部分外设。
使用C语言及HAL固件库开发,配套源代码,由浅入深,快速入门。

图书前言

意法半导体公司(下文简称意法公司)近年来在国内单片机市场上的业绩可圈可点,旗下STM32系列单片机凭借其高性能、高性价比成为32位单片机的市场主力,在如今的人才市场上,会不会使用STM8和STM32单片机往往是用人方选择硬件工程师的条件之一,其重要性和业界的影响力可见一斑。在意法公司的产品线中,STM32F0系列是32位微控制器中的入门级产品。该系列基于ARM公司的Cortex-M0内核,集实时性能、低功耗运算和STM32平台的先进架构及外设于一身,既保留了对传统8位和16位市场的压倒性竞争力,又可以传承STM32用户的开发平台和程序代码,是入门STM32开发的不二之选。本书将以STM32F0系列微控制器中的旗舰型号STM32F072VBT6微控制器为例,从整体架构、存储器、时钟树、异常处理、DMA和外设模块等方面做详细的介绍,特别是对微控制器片内的bxCAN模块和USB模块的原理和开发方法进行重点介绍。
学习ARM微控制器的方法其实与学习8位机并无两样,只要找准入门的方法就会事半功倍。在接触STM32F0系列的32位单片机之前,你一定也曾经是8位单片机的“发烧友”,回想当初我们使用8051单片机点亮一个LED时,那种激动的心情至今仍难以忘怀。在此笔者向大家推荐与当初学习8051单片机相同的方法,即从一个简单的实验入手,如点亮一个LED,由局部到整体,逐步积累开发经验,增强信心,循序渐进,由浅入深。要特别注意的是不要在你还没有学会使用寄存器和函数来操作STM32的时候,就贸然研究操作系统移植、图形用户界面(GUI)以及上位机开发等。这不但会让你对学习STM32望而却步,还会使你对学习嵌入式开发的信心丧失,这是最可怕的事情。本书不拘泥于概念和原理的探究,而是立足于实践,从系统板基础电路起步,一章一个例子、一章一个实验、一章一个总结、一个模块一套或多套代码,从最基本的I/O口学起,逐步拓展到定时器、时钟、串行口、ADC等,届时你会发现其实STM32与8位单片机也没有太大差别。
近期,意法公司专门针对旗下不同系列的微控制器产品推出了一款全新的开发软件—STM32CubeMX。该软件允许用户使用图形化界面简单直观地对目标微控制器的引脚、时钟等进行初始化设置,并能针对不同的集成开发环境,如EWARM、MDK-ARM、TrueSTUDIO等快速生成开发项目,这无疑是STM32入门用户最重大的利好消息。本书将利用STM32CubeMX作为项目建立和代码初始化工具,快速生成STM32F0系列微控制器的程序架构,并在MDK-ARM软件上对代码进行进一步的编辑修改,直至完成最终的项目开发。
作为STM32微控制器开发的新手,往往在从寄存器开发入手还是从固件库开发入手的选择上纠结不定。业界对开发STM32系列微控制器的方法通常也持有两种不同的观点:一种认为寄存器开发能使开发者明晰单片机内部结构,编写出简洁的代码,执行效率高;而另一种则认为固件库开发能避开对寄存器操作,减轻编程者的压力,还可以为开发者访问底层硬件提供一个中间应用编程界面(API),并方便上层软件的调用。笔者认为,作为开发STM32的硬件工程师,以上两种开发方法都应该掌握,原因是寄存器开发能加深对芯片内部结构和功能的理解,是微控制器入门的必经之路,而固件库开发则是一种趋势,它的编程思想更加先进,对应代码更规范,更具有可读性。本书基于STM32CubeMX软件自带的HAL库开发—HAL库不同于以往的标准外设库,是意法公司最新推出的替代标准外设库的产品,书内附HAL库、函数、结构、常量等的详细说明及开发实例。
为了配合本书的出版,相应的开发板和视频教程“STM32奇幻漂流记”也会在近期由“睿芯美微”淘宝网店同步推出,网址为http://shop59521455.taobao.com。由于作者水平有限,加之写作时间仓促,书中错误在所难免,在此恳请读者和有识之士给予批评斧正,也欢迎大家通过互联网与笔者分享STM32的开发心得。
作者QQ:710878209,微信号:gpmza2000。
本书得以出版,首先要特别感谢机械工业出版社华章分社朱捷等资深编辑,他们对本书的选题、立意和编纂给予了大力支持和悉心指导。其次要感谢的是广大热心网友,你们为本书内容、结构、写法献言献策,给予了莫大关心和支持。再次要感谢笔者的家人,在笔者奋笔疾书的日日夜夜照顾饮食起居,让笔者能更加专注于本书的创作。
尺有所短,寸有所长。每个人的天赋迥异,如果你发现自己对电子产业时常会萌发出一些新奇的想法或创意,请一定将其捕捉住,并且尽早阅读本书,那时你会发现使用STM32系列微控制器会让你的想法变为现实,会让你的创意尽情表达,这也许就是你走上研发之路的起点,你的人生也会因此而更加精彩!再次感谢你选择本书,祝学业有成,事业顺达!

高显生
于哈尔滨

上架指导

计算机/嵌入式

封底文字

意法半导体公司基于Cortex-M0内核的STM32F0系列微控制器产品既保留了对传统8位和16位市场的压倒性竞争力,又传承了STM32的开发平台和程序代码,是入门STM32开发的不二之选。本书以STM32F072VBT6微控制器为例,从整体架构、存储器、时钟、异常处理、DMA和外设模块等方面对片内功能和开发方法做了详细的介绍。
不仅如此,意法公司专门针对旗下不同系列的微控制器产品还推出了一款全新的开发软件——STM32CubeMX,该软件允许用户使用图形化界面简单直观地对目标微控制器的引脚、时钟和外设进行初始化设置,并可针对不同的集成开发环境快速生成开发项目,这无疑是STM32入门用户的最重大的利好消息。而本书正是介绍如何使用STM32CubeMX及其附带的HAL库完成STM32F0系列微控制器开发的入门书籍。
本书特点:
·详细介绍STM32F072VBT6微控制器的整体架构和片内外设模块的功能。
·介绍使用STM32CubeMX软件生成初始化源代码并配置时钟及外设,以快速创建开发项目。
·介绍如何使用基于STM32CubeMX软件自带的HAL库进行程序开发。
·书内有HAL库的函数、结构体、常量等的详细说明及开发实例。
·本书所有代码可以从华章网站下载:www.hzbook.com。

作者简介

高显生 编著:暂无简介

图书目录

前言
第一篇 系统架构
第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
第二篇 外设模块
第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 TIM1应用实例 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

教学资源推荐
作者: [美]尼克罗斯?法拉菲(Nikrouz Faroughi)著
作者: [美]玛里琳·沃尔夫(Marilyn Wolf) 著
作者: Yale N. Patt Sanjay J. Patel
作者: 袁春风 余子濠 编著
参考读物推荐
作者: [丹麦]克劳斯·埃尔克(Klaus Elk) 著
作者: 赵建领; 薛园园
作者: 吴飞青,丁晓,李林功,练斌
作者: [美]阿诺德·S.伯格(Arnold S.Berger) 著