当前: 首页 - 图书专区 - STM32库开发实战指南:基于STM32F103(第2版)
STM32库开发实战指南:基于STM32F103(第2版)


  在线购买
刘火良 杨森 编著
978-7-111-56531-4
99.00
707
2017年06月14日

计算机 > 计算机组织与体系结构 > 嵌入式计算机

281
简体中文
16

店面
电子与嵌入式系统设计丛书








本书基于STM32F103深入剖析STM32官方库及其使用的权威指南。
此版在第1版的基础上更新了大量实例和代码,着重讲解了STM32的各种外设。
配套业内流行的秉火STM32开发版,提供了完整的工程文件、源代码、教学课件及视频等,实践性极强。

封底:
本书基于STM32F103芯片,着重讲解STM32F103的外设及其应用,力争全面分析每个外设的功能框图和外设的使用方法,让读者可以轻松玩转STM32F103。全书基本上每章对应一个外设,主要内容大概分为三个部分:第一部分为简介,第二部分为外设功能框图分析,第三部分为代码讲解。

本书内容翔实,案例丰富,配有大量示例代码,可作为高校电子信息、通信工程、信息工程等专业的教材,也适合作为从事嵌入式领域科技工作者的参考书。


刘火良 秉火STM32开发板创始人,嵌入式软件工程师,长期从事STM32软硬件开发,网络教程《零死角玩转STM32》作者,著有《STM32库开发实战指南》。

杨森 秉火STM32开发板合伙人,嵌入式软件工程师,专注STM32和周边软件开发。著有《STM32库开发实战指南》,已累计印刷十余次,广受STM32开发者的喜爱。


阅读本书时,可结合《STM32F10x 中文参考手册》和《Cortex-M4内核编程手册》这两本ST官方手册,这样学习效果会更好。本书3~11章连贯性较强,重点讲解单片机底层知识,建议读者按章节顺序学习。学完这部分内容之后,能力稍强的读者可以说基本入门STM32了。其余章节连贯性较弱,可根据项目需要跳跃性阅读。

本书配套160集手把手教学视频和大量的PPT,同时配有相应的硬件平台。读者可到秉火论坛(www.fireBBS.cn)下载相关资源,并积极参与交流分享。
再版说明
本书是《STM32库开发实战指南》的第2版,第1版解决了当时市面上几乎没有关于STM32库开发技术书籍的燃眉之急,并且受到了广大读者的好评。
但由于技术的革新、读者的反馈以及自身经验的积累,我们发现第1版书籍还存在一些缺陷:目前配套的硬件开发板已更新换代,部分程序已不再适用;从寄存器开发过渡到库函数开发的教学过程不够平滑; 介绍STM32各种外设的深入度不足。
因此,第2版中对大部分的内容进行了改进:升级代码,匹配最新的开发板;增加了自行编写库函数的入门章节,引导读者加深对库函数原理的理解;每个章节增加了STM32外设框图剖析,增加了库函数结构体说明,使读者更了解基本原理,便于以后迁移至不同的芯片平台;以本书为教材,制作了教学课件,并录制了非常详细的教学视频,使之更适合于高校、培训机构及员工培训时使用。
本书的学习顺序
本书分为基础篇和提高篇。基础篇需要按照顺序学习,讲究循序渐进,步步为营。学习完基础篇之后,已经算是基本入门STM32开发了。提高篇属于高级例程,学习的时候并不一定要按照书中的章节排序,可根据需要跳跃式地学习。
本书的编写风格
本书着重讲解STM32F103的外设以及外设的应用,力争全面分析每个外设的功能框图和外设的使用方法,让读者可以全面 、细致地掌握STM32F103系列芯片。基本每个章节对应一个外设,每章的主要内容大致分为3个部分:第1部分为简介,第2部分为外设功能框图分析,第3部分为代码讲解。
外设简介是作者用自己的话把外设概括性地介绍一遍,力图语句简短,通俗易懂,并不会完全照抄数据手册的介绍。
外设功能框图分析则是每章的重点,该部分会详细讲解功能框图中每个部分的作用,这是学习STM32F103的精髓所在,掌握了整个外设的框图则可以熟练地使用该外设,进而熟练地编程,日后学习其他型号的单片机也将会得心应手。因为即使单片机的型号不同,外设的框图也是基本一样的。这一步的学习比较枯燥,但是必须下功夫学,方能达成所愿。
代码分析则是针对使用该外设的实验进行讲解,主要分析代码流程和一些编程的注意事项。在掌握了框图之后,代码部分则是手到擒来。
本书的参考资料
本书的主要参考资料为:《STM32F10x-?中文参考手册》《STM32F10x-?数据手册》以及《Cortex-M3权威指南》。它们是ST及ARM官方的资料,属于精华版,全面翔实,无所不包。限于篇幅问题,本书不可能面面俱到,只侧重于框图分析和代码讲解,有关寄存器的详细描述则略过。在学习本书的时候,涉及寄存器描述部分还请参考上述两本手册,这样学习效果会更佳。
本书的配套资料
硬件平台
本书配套的硬件平台为:秉火STM32F103-指南者,型号简称为“指南者”,见图1。学习的时候如果基于该硬件平台做实验,必会达到事半功倍的效果,可以省去中间移植时遇到的各种问题。
工程代码、原理图及课件
本书中涉及的工程代码、开发板原理图以及课件均在秉火论坛提供:http://www.firebbs.cn。
部分章节涉及的各种通信协议、字符编码以及芯片的数据手册均有相应的参考资料,如《I2C总线协议》《SPI总线协议》和《AT24C02》(EEPROM数据手册)等电子文档,也包含在相应章节的课件文件夹中。在阅读本书时请一定打开这些资料来配合阅读,特别是涉及通信协议的章节。
教学视频
为提高学习效率,我们为本书制作了配套的课件PPT以及教学视频,请到论坛http://www.firebbs.cn上观看或下载。
本书的技术论坛
如果在学习过程中遇到问题,可以到论坛http://www.firebbs.cn上发帖交流,开源共享,共同进步。
鉴于水平有限,本书难免有纰漏,热心的读者也可把勘误发到论坛上,好让我们的技术不断完善,做得更好。祝广大读者学习愉快,STM32的世界中,秉火与您同行!
前言
第一部分 基础篇
第1章 如何安装KEIL5 2
1.1 温馨提示 2
1.2 获取KEIL5安装包 2
1.3 开始安装KEIL5 3
1.4 安装STM32芯片包 5
第2章 如何用DAP仿真器下载程序 7
2.1 仿真器简介 7
2.2 硬件连接 7
2.3 仿真器配置 8
2.4 选择目标板 9
2.5 下载程序 10
第3章 如何用串口下载程序 11
3.1 安装USB转串口驱动 11
3.2 硬件连接 11
3.3 开始下载 12
3.4 ISP一键下载原理分析 14
3.4.1 ISP简介 14
3.4.2 ISP普通下载 14
3.4.3 BOOT配置 15
3.4.4 ISP一键下载 15
第4章 初识STM32 17
4.1 什么是STM32 17
4.2 STM32能做什么 17
4.2.1 智能手环 18
4.2.2 微型四轴飞行器 19
4.2.3 淘宝众筹 19
4.3 STM32怎么选型 20
4.3.1 STM32分类 20
4.3.2 STM32命名方法 21
4.3.3 选择合适的MCU 21
第5章 什么是寄存器 24
5.1 STM32芯片外观 24
5.2 芯片里面有什么 25
5.3 存储器映射 27
5.4 寄存器映射 30
5.4.1 STM32的外设地址映射 31
5.4.2 C语言对寄存器的封装 33
第6章 新建工程——寄存器版 38
6.1 新建本地工程文件夹 38
6.2 新建工程 39
6.3 下载程序 42
第7章 使用寄存器点亮LED 43
7.1 GPIO简介 43
7.2 GPIO框图剖析 43
7.2.1 基本结构分析 43
7.2.2 GPIO工作模式 47
7.3 实验:使用寄存器点亮LED 48
7.3.1 硬件连接 49
7.3.2 启动文件 50
7.3.3 stm32f10x.h文件 51
7.3.4 main文件 52
7.3.5 下载验证 56
第8章 自己写库——构建库函数雏形 57
8.1 什么是STM32函数库 57
8.2 为什么采用库来开发及学习 58
8.3 实验:构建库函数雏形 58
8.3.1 外部寄存器结构体定义 59
8.3.2 外设存储器映射 60
8.3.3 外设声明 60
8.3.4 定义位操作函数 62
8.3.5 定义初始化结构体 65
8.3.6 定义引脚模式的枚举类型 65
8.3.7 定义GPIO初始化函数 69
8.3.8 全新面貌,使用函数点亮LED 72
8.3.9 下载验证 73
8.3.10 总结 73
第9章 初识STM32标准库 75
9.1 CMSIS标准及库层次关系 75
9.1.1 库目录、文件简介 76
9.1.2 库各文件间的关系 81
9.2 使用帮助文档 81
9.2.1 常用官方资料 81
9.2.2 初识库函数 83
第10章 新建工程——库函数版 85
10.1 新建本地工程文件夹 85
10.2 新建工程 86
第11章 GPIO输出——使用固件库点亮LED 93
11.1 硬件设计 93
11.2 软件设计 93
11.2.1 编程要点 94
11.2.2 代码分析 94
11.2.3 下载验证 99
11.3 STM32标准库补充知识 99
第12章 GPIO输入——按键检测 102
12.1 硬件设计 102
12.2 软件设计 103
12.2.1 编程要点 103
12.2.2 代码分析 103
12.3 下载验证 105
第13章 GPIO——位带操作 106
13.1 位带简介 106
13.1.1 外设位带区 106
13.1.2 SRAM位带区 107
13.1.3 位带区和位带别名区地址转换 107
13.2 GPIO位带操作 108
第14章 启动文件 111
14.1 启动文件简介 111
14.2 查找ARM汇编指令 111
14.3 启动文件代码讲解 111
第15章 RCC——使用HSE/HSI配置时钟 118
15.1 RCC主要作用——时钟部分 118
15.2 RCC框图剖析——时钟部分 118
15.2.1 系统时钟 118
15.2.2 其他时钟 122
15.3 配置系统时钟实验 123
15.3.1 使用HSE 123
15.3.2 使用HSI 123
15.3.3 硬件设计 123
15.3.4 软件设计 124
15.3.5 下载验证 128
第16章 STM32中断应用概览 130
16.1 异常类型 130
16.2 NVIC简介 131
16.2.1 NVIC寄存器简介 131
16.2.2 NVIC 中断配置固件库 132
16.3 中断优先级 132
16.3.1 优先级定义 132
16.3.2 优先级分组 132
16.4 中断编程 133
第17章 EXTI——外部中断/事件控制器 135
17.1 EXTI简介 135
17.2 EXTI功能框图剖析 135
17.3 中断/事件线 137
17.4 EXTI初始化结构体详解 138
17.5 外部中断控制实验 138
17.5.1 硬件设计 139
17.5.2 软件设计 139
17.5.3 下载验证 143
第18章 SysTick——系统定时器 144
18.1 SysTick简介 144
18.2 SysTick寄存器介绍 144
18.3 SysTick定时实验 145
18.3.1 硬件设计 145
18.3.2 软件设计 145
18.3.3 下载验证 152
第19章 通信的基本概念 153
19.1 串行通信与并行通信 153
19.2 全双工、半双工及单工通信 154
19.3 同步通信与异步通信 154
19.4 通信速率 155
第20章 USART——串口通信 156
20.1 串口通信协议简介 156
20.1.1 物理层 156
20.1.2 协议层 159
20.2 STM32的USART简介 160
20.3 USART功能框图剖析 161
20.4 USART初始化结构体详解 165
20.5 USART1接发通信实验 166
20.5.1 硬件设计 166
20.5.2 软件设计 167
20.5.3 下载验证 171
20.6 使用USART1指令控制RGB彩灯的实验 172
20.6.1 硬件设计 172
20.6.2 软件设计 172
20.6.3 下载验证 176
第21章 DMA——直接存储器访问 177
21.1 DMA简介 177
21.2 DMA控制器的框图剖析 177
21.3 DMA数据配置 179
21.4 DMA初始化结构体详解 180
21.5 从存储器到存储器模式的实验 182
21.5.1 硬件设计 182
21.5.2 软件设计 182
21.5.3 下载验证 186
21.6 从存储器到外设模式的实验 186
21.6.1 硬件设计 186
21.6.2 软件设计 186
21.6.3 下载验证 189
第22章 常用存储器介绍 190
22.1 存储器种类 190
22.2 RAM 191
22.2.1 DRAM 191
22.2.2 SRAM 192
22.2.3 DRAM与SRAM的应用场合 192
22.3 非易失性存储器 192
22.3.1 ROM 192
22.3.2 Flash存储器 193
第23章 I2C——读写EEPROM 195
23.1 I2C协议简介 195
23.1.1 I2C物理层 195
23.1.2 协议层 196
23.2 STM32的I2C特性及架构 199
23.2.1 STM32的I2C外设简介 199
23.2.2 STM32的I2C架构剖析 199
23.2.3 通信过程 201
23.3 I2C初始化结构体详解 203
23.4 I2C——读写EEPROM实验 204
23.4.1 硬件设计 204
24.4.2 软件设计 205
23.4.3 下载验证 222
第24章 SPI——读写串行Flash 存储器 223
24.1 SPI协议简介 223
24.1.1 SPI物理层 223
24.1.2 协议层 224
24.2 STM32的SPI特性及架构 226
24.2.1 STM32的SPI外设简介 226
24.2.2 STM32的SPI架构剖析 227
24.2.3 通信过程 228
24.3 SPI初始化结构体详解 229
24.4 SPI——读写串行Flash存储器实验 231
24.4.1 硬件设计 231
24.4.2 软件设计 232
24.4.3 下载验证 250
第25章 串行Flash文件系统——FatFs 251
25.1 文件系统 251
25.2 FatFs文件系统简介 252
25.2.1 FatFs的目录结构 252
25.2.2 FatFs帮助文档 252
25.2.3 FatFs源码 253
25.3 FatFs文件系统移植实验 254
25.3.1 FatFs程序结构图 254
25.3.2 硬件设计 254
25.3.3 FatFs移植步骤 254
25.3.4 FatFs底层设备驱动函数 256
25.3.5 FatFs功能配置 261
25.3.6 FatFs功能测试 262
25.3.7 下载验证 265
25.4 FatFs功能使用实验 266
25.4.1 硬件设计 266
25.4.2 软件设计 266
25.4.3 下载验证 271
第二部分 提高篇
第26章 LCD——液晶显示器 274
26.1 显示器简介 274
26.1.1 液晶显示器 274
26.1.2 LED和OLED显示器 275
26.1.3 显示器的基本参数 276
26.2 液晶控制原理 276
26.2.1 液晶面板的控制信号 277
26.2.2 液晶数据传输时序 278
26.2.3 显存 280
26.3 秉火3.2寸液晶屏简介 280
26.3.1 3.2寸电阻触摸屏实物 280
26.3.2 ILI9341液晶控制器简介 281
26.3.3 液晶屏的信号线及8080时序 282
26.4 使用STM32的FSMC模拟8080接口时序 283
26.4.1 FSMC简介 283
26.4.2 FSMC的地址映射 285
26.4.3 FSMC控制异步NOR Flash存储器的时序 287
26.4.4 用FSMC模拟8080时序 288
26.5 NOR Flash存储器时序结构体 289
26.6 FSMC初始化结构体 291
26.7 FSMC——液晶显示实验 293
26.7.1 硬件设计 293
26.7.2 软件设计 295
26.7.3 下载验证 316
第27章 LCD——液晶显示中英文 317
27.1 字符编码 317
27.1.1 ASCII编码 317
27.1.2 中文编码 319
27.1.3 Unicode字符集和编码 322
27.1.4 UTF-32 323
27.1.5 UTF-16 323
27.1.6 UTF-8 324
27.1.7 BOM 325
27.2 什么是字模 325
27.2.1 字模的构成 325
27.2.2 字模显示原理 326
27.2.3 如何制作字模 327
27.2.4 字模寻址公式 328
27.2.5 存储字模文件 329
27.3 各种模式的液晶显示字符实验 329
27.3.1 硬件设计 329
27.3.2 显示ASCII编码的字符 330
27.3.3 显示GB2312编码的字符 338
27.3.4 显示任意大小的字符 346
27.3.5 下载验证 352
第28章 电阻触摸屏——触摸画板 353
28.1 触摸屏简介 353
28.1.1 电阻式触摸屏检测原理 354
28.1.2 电阻触摸屏控制芯片 355
28.1.3 电容式触摸屏检测原理 356
28.2 电阻触摸屏——触摸画板实验 357
28.2.1 硬件设计 357
28.2.2 软件设计 359
28.2.3 下载验证 375
第29章 ADC——电压采集 376
29.1 ADC简介 376
29.2 ADC功能框图剖析 376
29.3 ADC初始化结构体详解 381
29.4 独立模式单通道采集实验 382
29.4.1 硬件设计 382
29.4.2 软件设计 382
29.4.3 下载验证 387
29.5 独立模式多通道采集实验 387
29.5.1 硬件设计 387
29.5.2 软件设计 387
29.5.3 下载验证 391
29.6 双重ADC同步规则模式采集实验 391
29.6.1 硬件设计 392
29.6.2 软件设计 393
29.6.3 下载验证 397
第30章 TIM——基本定时器 398
30.1 定时器分类 398
30.2 基本定时器功能框图剖析 398
30.3 定时器初始化结构体详解 399
30.4 基本定时器定时实验 400
30.4.1 硬件设计 400
30.4.2 软件设计 400
30.4.3 下载验证 403
第31章 TIM——高级定时器 404
31.1 高级控制定时器 404
31.2 高级控制定时器功能框图剖析 405
31.3 输入捕获应用 413
31.3.1 测量脉宽或者频率 413
31.3.2 PWM输入模式 414
31.4 输出比较应用 415
31.5 定时器初始化结构体详解 417
31.6 PWM互补输出实验 420
31.6.1 硬件设计 420
31.6.2 软件设计 420
31.6.3 下载验证 424
31.7 脉宽测量输入捕获实验 424
31.7.1 硬件设计 424
31.7.2 软件设计 425
31.7.3 下载验证 429
31.8 PWM输入捕获实验 430
31.8.1 硬件设计 430
31.8.2 软件设计 430
31.8.3 下载验证 437
第32章 TIM——电容按键检测 438
32.1 电容按键原理 438
32.2 电容按键检测实验 439
32.2.1 硬件设计 440
32.2.2 软件设计 440
32.2.3 下载验证 446
第33章 IWDG——独立看门狗 447
33.1 IWDG简介 447
33.2 IWDG功能框图剖析 447
33.3 怎么用IWDG 448
33.4 IWDG超时实验 449
33.4.1 硬件设计 449
33.4.2 软件设计 449
33.4.3 下载验证 451
第34章 WWDG——窗口看门狗 452
34.1 WWDG简介 452
34.2 WWDG功能框图剖析 452
34.3 怎么用WWDG 454
34.4 WWDG喂狗实验 454
34.4.1 硬件设计 454
34.4.2 软件设计 454
34.4.3 下载验证 457
第35章 SDIO——SD卡读写测试 458
35.1 SDIO简介 458
35.2 SD卡物理结构 459
35.3 SDIO总线 460
35.3.1 总线拓扑 460
35.3.2 总线协议 461
35.3.3 命令 462
35.3.4 响应 465
35.4 SD卡的操作模式及切换 466
35.4.1 SD卡的操作模式 466
35.4.2 卡识别模式 467
35.4.3 数据传输模式 468
35.5 STM32的SDIO功能框图剖析 469
35.6 SDIO初始化结构体 473
35.7 SDIO命令初始化结构体 474
35.8 SDIO数据初始化结构体 475
35.9 SD卡读写测试实验 475
35.9.1 硬件设计 475
35.9.2 软件设计 476
35.9.3 下载验证 504
第36章 基于SD卡的FatFs文件系统 505
36.1 FatFs移植步骤 505
36.2 FatFs接口函数 507
36.3 FatFs功能测试 511
36.4 下载验证 514
第37章 电源管理——实现低功耗 515
37.1 STM32的电源管理简介 515
37.1.1 电源监控器 515
37.1.2 STM32的电源系统 516
37.1.3 STM32的功耗模式 517
37.2 电源管理相关的库函数及命令 519
37.2.1 配置PVD监控功能 519
37.2.2 WFI与WFE命令 520
37.2.3 进入停止模式 520
37.2.4 进入待机模式 521
37.3 PWR——睡眠模式实验 522
37.3.1 硬件设计 522
37.3.2 软件设计 522
37.3.3 下载验证 525
37.4 PWR——停止模式实验 525
37.4.1 硬件设计 525
37.4.2 软件设计 525
37.4.3 下载验证 529
37.5 PWR——待机模式实验 529
37.5.1 硬件设计 529
37.5.2 软件设计 529
37.5.3 下载验证 532
37.6 PWR——PVD电源监控实验 532
37.6.1 硬件设计 532
37.6.2 软件设计 534
37.6.3 下载验证 537
第38章 MDK的编译过程及文件类型全解 538
38.1 编译过程 538
38.1.1 编译过程简介 538
38.1.2 具体工程中的编译过程 539
38.2 程序的组成、存储与运行 540
38.2.1 CODE、RO、RW、ZI Data域及堆栈空间 540
38.2.2 程序的存储与运行 541
38.3 编译工具链 542
38.3.1 设置环境变量 542
38.3.2 armcc、armasm及armlink 544
38.3.3 armar、fromelf及用户指令 548
38.4 MDK工程的文件类型 549
38.4.1 uvprojx、uvoptx及uvguix工程文件 550
38.4.2 源文件 553
38.4.3 Output目录下生成的文件 553
38.4.4 Listing目录下的文件 574
38.4.5 sct分散加载文件的格式与应用 581
38.5 实验:自动分配变量到指定的SRAM空间 589
38.5.1 补充关于“__attribute__”关键字的说明 590
38.5.2 硬件设计 590
38.5.3 软件设计 590
38.5.4 下载验证 598
38.6 实验:优先使用内部SRAM并把堆区分配到指定空间 598
38.6.1 硬件设计 598
38.6.2 软件设计 598
38.6.3 下载验证 604
第39章 在SRAM中调试代码 605
39.1 在RAM中调试代码 605
39.2 STM32的启动方式 606
39.3 内部Flash的启动过程 607
39.4 实验:在内部SRAM中调试代码 609
39.4.1 硬件设计 609
39.4.2 软件设计 609
39.4.3 下载验证 618
第40章 读写内部Flash 619
40.1 STM32的内部Flash简介 619
40.2 对内部Flash的写入过程 621
40.3 查看工程的空间分布 622
40.4 操作内部Flash的库函数 624
40.5 实验:读写内部Flash  627
40.5.1 硬件设计 627
40.5.2 软件设计 627
40.5.3 下载验证 629
第41章 设置Flash的读写保护及解除 630
41.1 选项字节与读写保护 630
41.1.1 选项字节的内容 630
41.1.2 RDP读保护 632
41.1.3 WRP写保护 633
41.2 修改选项字节的过程 633
41.3 操作选项字节的库函数 633
41.4 实验:设置读写保护及解除 638
41.4.1 硬件设计 638
41.4.2 软件设计 638
41.4.3 下载验证 642
第42章 OV7725摄像头驱动 643
42.1 摄像头简介 643
42.1.1 数字摄像头与模拟摄像头的区别 643
42.1.2 CCD与CMOS的区别 644
42.2 OV7725摄像头 644
42.2.1 OV7725传感器简介 644
42.2.2 OV7725引脚及功能框图剖析 645
42.2.3 SCCB时序 646
42.2.4 OV7725的寄存器 647
42.2.5 像素数据输出时序 648
42.2.6 FIFO读写时序 649
42.2.7 摄像头的驱动原理 652
42.3 摄像头驱动实验 655
42.3.1 硬件设计 655
42.3.2 软件设计 656
42.3.3 下载验证 678
第43章 移植Huawei LiteOS到STM32 679
43.1 Huawei LiteOS简介 679
43.2 Huawei LiteOS内核移植 680
43.2.1 Huawei LiteOS内核简介 680
43.2.2 内核源代码简介 682
43.2.3 内核移植详细介绍 683
43.2.4 Huawei LiteOS多任务编程 691
嵌入式
读者书评
发表评论



高级搜索
ARM嵌入式系统编程与优化
信息物理融合系统(CPS)原理
信息物理融合系统(CPS)设计、建模与仿真——基于Ptolemy II平台


版权所有© 2017  北京华章图文信息有限公司 京ICP备08102525号 京公网安备110102004606号
通信地址:北京市百万庄南街1号 邮编:100037
电话:(010)68318309, 88378998 传真:(010)68311602, 68995260
高校教师服务
华章教育微信
诚聘英才
诚聘英才