重磅推荐
【推荐语】
1. 使用ST官方的STM32Cube全套工具链软件。STM32CubeMX*行MCU图形化配置然后导出初始化代码的开发方式简单便捷,程序结构统一,开发效率高,是广大初学者容易掌握的方式。

2. 使用ST官方免费的IDE软件TrueSTUDIO和STM32CubeIDE,没有软件版权风险。

3. 本书介绍STM32 嵌入式开发的高级内容:STM32Cube MCU 固件库所包含一些移植好的中间件,如 FreeRTOS、FatFS、LibJPEG、USB_Host、USB_Device 等,以及 SDIO、USB-OTG、DCMI 等硬件接口的编程和使用方法,旨在帮助读者掌握嵌入式操作系统、嵌入式文件系统、图片显示和触摸屏交互操作等知识。

4. 本书为读者提供示例源代码、示例运行演示视频、课件等资源,读者可登录异步社区图书页面下载。
【作者】
王维波,博士、中国石油大学(华东)控制科学与工程学院教师。从事测控与仪器开发领域的教学和研究工作,主要研究方向是地球物理探测仪器开发、数据处理方法和软件开发。参与完成国家自然科学基金、山东省重点研发计划等多个科研项目,发表论文 20 余篇。著有《Qt 5.9 C 开发指南》和《Python Qt GUI 与数据可视化编程》。 鄢志丹,博士、中国石油大学(华东)控制科学与工程学院教师。从事随钻测控技术、自抗扰控制方法、井下仪器开发、微弱信号处理等方面的研究工作。主持国家自然科学基金、中国博士后科学基金、山东省自然科学基金等 10 余个科研项目,获授权发明专利 10 余项,发表论文 30 余篇。 王钊,博士、中国石油大学(华东)控制科学与工程学院教师。从事自动化相关的教学和研究工作,主要研究方向是非线性系统的非光滑控制研究、故障诊断、工业过程控制等。主持山东省优秀中青年科学家科研奖励基金项目 1 项,发表论文 20 余篇,作为副主编编写教材1 部。
【内容】
本书介绍 STM32 开发的一些高级内容。部分详细介绍嵌入式操作系统 FreeRTOS 的使用;第二部分介绍使用 FatFS 管理 SPI-Flash 芯片、SD 卡和 U 盘上的文件系统;第三部分介绍 BMP 和 JPG 图片的获取与显示,触摸屏的使用,DCMI 接口和数字摄像头等。全书使用 STM32CubeMX 和 STM32CubeIDE软件开发例程,讲解 FreeRTOS、FatFS、LibJPEG、USB_Host、USB_Device 等中间件以及 SDIO、USB-OTG、
DCMI 等外设的原理和使用方法,并针对一个 STM32F407 开发板编写了完整示例项目。通过阅读本书,读者可以掌握 STM32 开发中的嵌入式操作系统、文件系统、触摸屏等高级软硬件的开发方法。
本书适合已经掌握 STM32CubeMX 和 STM32CubeIDE 软件的使用以及 STM32 常用外设的 STM32Cube开发等相关基础内容的读者阅读,可以作为高等院校电子、自动化、计算机类专业的教学用书,也可作为STM32 嵌入式系统开发的参考书。
【目录】
第 一部分 嵌入式操作系统FreeRTOS
第 1章 FreeRTOS基础2
1.1 FreeRTOS概述2
1.1.1 FreeRTOS的发展历史2
1.1.2 FreeRTOS的特点和许可方式2
1.1.3 FreeRTOS的一些概念和术语3
1.1.4 为什么要使用RTOS4
1.2 FreeRTOS入门示例4
1.2.1 CubeMX项目配置5
1.2.2 含FreeRTOS的项目的文件组成8
1.2.3 程序分析和功能实现9
1.3 FreeRTOS的文件组成和基本原理15
1.3.1 FreeRTOS的文件组成15
1.*.* FreeRTOS的编码规则20
1.3.3 FreeRTOS的配置和功能裁剪21
第 2章 FreeRTOS的任务管理29
2.1 任务相关的一些概念29
2.1.1 多任务运行基本机制29
2.1.2 任务的状态30
2.1.3 任务的优先级31
2.1.4 空闲任务32
2.1.5 基础时钟与嘀嗒信号32
2.2 FreeRTOS的任务调度32
2.2.1 任务调度方法概述32
2.2.2 使用时间片的抢占式调度方法33
2.2.3 不使用时间片的抢占式调度方法34
2.2.4 合作式任务调度方法35
2.3 任务管理相关函数36
2.3.1 相关函数概述36
2.*.* 主要函数功能说明38
2.4 多任务编程示例一40
2.4.1 示例功能与CubeMX项目设置40
2.4.2 初始程序分析42
2.4.3 编写用户功能代码44
2.5 任务管理工具函数49
2.5.1 相关函数概述49
2.5.2 获取任务句柄50
2.5.3 单个任务的操作51
2.5.4 内核信息统计53
2.6 多任务编程示例二55
2.6.1 示例功能与CubeMX项目设置55
2.6.2 程序功能实现56
第3章 FreeRTOS的中断管理62
3.1 FreeRTOS与中断62
*.* 任务与中断服务例程64
*.*.1 任务与中断服务例程的关系64
*.*.2 中断屏蔽和临界代码段65
*.*.3 在ISR中使用FreeRTOS API函数66
*.*.4 中断及其ISR设计原则67
3.3 任务和中断程序设计示例67
3.3.1 示例功能和CubeMX项目设置67
3.*.* 基本功能代码69
3.3.3 各种特性的测试71
第4章 *程间通信与消息队列74
4.1 *程间通信74
4.2 队列的特点和基本操作75
4.2.1 队列的创建和存储75
4.2.2 向队列写入数据76
4.2.3 从队列读取数据77
4.2.4 队列操作相关函数78
4.3 队列使用示例79
4.3.1 示例功能和CubeMX项目设置79
4.*.* 初始代码分析80
4.3.3 实现用户功能82
第5章 信号量86
5.1 信号量和互斥量概述86
5.1.1 二值信号量86
5.1.2 计数信号量87
5.1.3 互斥量87
5.1.4 递归互斥量88
5.1.5 相关函数概述88
5.2 二值信号量使用示例90
5.2.1 二值信号量操作相关函数详解90
5.2.2 示例功能和CubeMX项目设置92
5.2.3 程序功能实现94
5.3 计数信号量使用示例98
5.3.1 计数信号量操作相关函数详解98
5.*.* 示例功能和CubeMX项目设置99
5.3.3 程序功能实现100
第6章 互斥量104
6.1 优先级翻转问题104
6.2 互斥量的工作原理105
6.2.1 优先级继承105
6.2.2 互斥量相关函数详解105
6.3 优先级翻转示例106
6.3.1 示例功能和CubeMX项目设置106
6.*.* 程序功能实现107
6.4 互斥量使用示例111
6.4.1 示例功能和CubeMX项目设置111
6.4.2 程序功能实现111
第7章 事件组115
7.1 事件组的原理和功能115
7.1.1 事件组的功能特点115
7.1.2 事件组的工作原理115
7.2 事件组相关函数116
7.2.1 相关函数概述116
7.2.2 部分函数详解117
7.3 事件组使用示例120
7.3.1 示例功能和CubeMX项目设置120
7.*.* 程序功能实现120
7.4 通过事件组*行多任务同步125
7.4.1 多任务同步原理125
7.4.2 示例功能和CubeMX项目设置126
7.4.3 程序功能实现127
第8章 任务通知132
8.1 任务通知的原理和功能132
8.2 任务通知的相关函数133
8.2.1 相关函数概述133
8.2.2 函数详解134
8.3 示例一:使用任务通知传递数据137
8.3.1 示例功能与CubeMX项目设置137
8.*.* 程序功能实现138
8.4 示例二:将任务通知用作计数信号量141
8.4.1 示例功能141
8.4.2 CubeMX项目设置141
8.4.3 程序功能实现142
第9章 流缓冲区和消息缓冲区145
9.1 流缓冲区功能概述145
9.2 流缓冲区操作的相关函数146
9.2.1 相关函数概述146
9.2.2 部分函数详解146
9.2.3 表示发送完成和接收完成的宏149
9.3 流缓冲区使用示例149
9.3.1 示例功能与CubeMX项目设置149
9.*.* 程序功能实现151
9.4 消息缓冲区功能概述154
9.5 消息缓冲区操作相关函数154
9.5.1 相关函数概述154
9.5.2 部分函数详解155
9.6 消息缓冲区使用示例157
9.6.1 示例功能与CubeMX项目设置157
9.6.2 程序功能实现158
第 10章 软件定时器162
10.1 软件定时器概述162
10.1.1 软件定时器的特性162
10.1.2 软件定时器的相关配置163
10.1.3 定时器服务任务的优先级163
10.2 软件定时器的相关函数164
10.2.1 相关函数概述164
10.2.2 部分函数详解165
10.3 软件定时器使用示例169
10.3.1 示例功能和CubeMX项目设置169
10.*.* 程序功能实现170
第 11章 空闲任务与低功耗174
11.1 HAL和FreeRTOS的基础时钟174
11.1.1 使用SysTick作为HAL的基础时钟174
11.1.2 使用其他定时器作为HAL的基础时钟177
11.1.3 FreeRTOS的基础时钟179
11.2 空闲任务与低功耗处理182
11.2.1 实现原理182
11.2.2 设计示例183
11.3 Tickless低功耗模式186
11.3.1 Tickless模式的原理和功能186
11.*.* Tickless模式的使用示例187
第二部分 FatFS管理文件系统
第 12章 FatFS和文件系统192
12.1 FatFS概述192
12.1.1 FatFS的作用192
12.1.2 文件系统的一些基本概念193
12.1.3 FatFS的功能特点和参数194
12.1.4 FatFS的文件组成195
12.1.5 FatFS的基本数据类型定义196
12.2 FatFS的应用程序接口函数197
12.2.1 卷管理和系统配置相关函数197
12.2.2 文件和目录管理相关函数200
12.2.3 目录访问相关函数203
12.2.4 文件访问相关函数204
12.3 FatFS的存储介质访问函数208
12.4 针对SPI-Flash芯片移植FatFS209
12.4.1 SPI-Flash芯片硬件电路209
12.4.2 CubeMX项目基础设置210
12.4.3 在CubeMX中设置FatFS210
12.4.4 项目中FatFS的文件组成216
12.4.5 FatFS初始化过程218
12.4.6 针对SPI-Flash芯片的Disk IO函数实现226
12.5 在SPI-Flash芯片上使用文件系统231
12.5.1 主程序功能231
12.5.2 磁盘格式化234
12.5.3 获取FAT磁盘信息234
12.5.4 扫描根目录下的文件和子目录236
12.5.5 创建文件和目录237
12.5.6 读取文本文件239
12.5.7 读取二*制文件239
12.5.8 获取文件信息241
12.5.9 文件file_opera.h的完整定义242
第 13章 直接访问SD卡245
13.1 SD卡简介245
13.1.1 SD卡的分类245
13.1.2 常规SD卡的接口246
1*.* SDIO接口硬件电路247
1*.*.1 STM32F407的SDIO接口247
1*.*.2 开发板上的microSD卡连接电路248
13.3 SDIO接口和SD卡的HAL驱动程序249
13.3.1 SD驱动程序概述250
13.*.* 初始化和配置函数251
13.3.3 读取SD卡的参数信息251
13.3.4 获取SD卡的当前状态255
13.3.5 以轮询方式读写SD卡255
13.3.6 以中断方式读写SD卡256
13.3.7 以DMA方式读写SD卡256
13.4 示例一:以轮询方式读写SD卡257
13.4.1 示例功能与CubeMX项目设置257
13.4.2 主程序与SDIO接口 SD卡初始化259
13.4.3 程序功能实现260
13.5 示例二:以DMA方式读写SD卡264
13.5.1 示例功能与CubeMX项目设置264
13.5.2 主程序与外设初始化265
13.5.3 程序功能实现268
第 14章 用FatFS管理SD卡文件系统272
14.1 SD卡文件系统概述272
14.2 示例一:阻塞式访问SD卡272
14.2.1 示例功能与CubeMX项目设置272
14.2.2 项目文件组成和初始代码分析274
14.2.3 SD卡的Disk IO函数实现278
14.2.4 SD卡文件管理功能的实现284
14.3 示例二:以DMA方式访问SD卡288
14.3.1 示例功能和CubeMX项目设置288
14.*.* Disk IO函数实现代码分析289
14.3.3 SD卡文件管理功能的实现291
第 15章 用FatFS管理U盘文件系统295
15.1 USB概述295
15.1.1 USB协议295
15.1.2 USB设备类型296
15.1.3 USB接口类型296
15.2 STM32F407的USB-OTG接口298
15.2.1 USB-OTG概述298
15.2.2 USB-OTG FS299
15.2.3 开发板上的USB接口电路302
15.3 作为USB Host读写U盘303
15.3.1 示例功能和CubeMX项目设置303
15.*.* 项目文件组成和初始代码分析307
15.3.3 USBH状态变化测试316
15.3.4 U盘文件管理功能实现318
第 16章 USB-OTG用作USB MSC外设324
16.1 开发板作为USB MSC外设的原理324
16.2 示例一:SD卡读卡器326
16.2.1 示例功能和CubeMX项目设置326
16.2.2 项目文件组成和初始代码分析328
16.2.3 程序功能实现333
16.3 示例二:增加FatFS管理本机文件功能336
16.3.1 示例功能和CubeMX项目设置336
16.*.* 程序功能实现337
16.3.3 运行测试340
第 17章 在FreeRTOS中使用FatFS341
17.1 在RTOS中使用FatFS需考虑的问题341
17.1.1 可重入性问题341
17.1.2 FatFS的可重入性341
17.2 FreeRTOS中使用FatFS的示例343
17.2.1 示例功能和CubeMX项目设置343
17.2.2 项目文件组成和初始代码分析346
17.2.3 FatFS API函数的重入性实现原理350
17.2.4 添加用户功能代码354
第三部分 图片的获取与显示
第 18章 BMP图片360
18.1 LCD显示图片的原理360
18.1.1 像素颜色的表示360
18.1.2 根据图片的RGB565数据显示图片360
18.2 图片显示示例362
18.2.1 示例功能与CubeMX项目配置362
18.2.2 程序功能实现363
18.3 BMP图片文件的格式368
18.3.1 BMP图片文件的数据分段368
18.*.* 位图文件头368
18.3.3 位图信息头369
18.3.4 位图数据370
18.4 BMP图片文件的读写操作示例370
18.4.1 示例功能和CubeMX项目设置370
18.4.2 程序功能实现372
18.4.3 BMP文件操作驱动程序377
第 19章 JPG图片387
19.1 JPEG和LIBJPEG387
19.2 JPG图片文件的读写操作示例388
19.2.1 示例功能和CubeMX项目设置388
19.2.2 程序功能实现389
19.2.3 JPG文件操作驱动程序395
第 20章 电阻式触摸屏405
20.1 电阻式触摸屏的工作原理405
20.2 电阻式触摸屏的软硬件接口406
20.3 示例一:轮询方式检测触摸屏输出407
20.3.1 示例功能407
20.*.* CubeMX项目设置407
20.3.3 主程序功能实现409
20.3.4 GUI界面的创建与交互操作413
20.3.5 电阻式触摸屏驱动程序420
20.4 示例二:中断方式获取触摸屏输出426
20.4.1 示例功能和CubeMX项目设置426
20.4.2 程序功能实现427
第 21章 电容式触摸屏431
21.1 电容式触摸屏的工作原理431
21.2 电容式触摸屏的软硬件接口431
21.2.1 电容式触摸屏接口431
21.2.2 电容式触摸屏控制芯片功能433
21.3 电容触摸屏的使用示例437
21.3.1 示例功能和CubeMX项目设置437
21.*.* 程序功能实现438
21.3.3 电容触摸屏驱动程序443
第 22章 DCMI接口和数字摄像头455
22.1 数字摄像头455
22.1.1 数字摄像头概述455
22.1.2 OV7670图像传感器的功能和接口456
22.1.3 OV7670数据输出时序和格式457
22.1.4 SCCB通信458
22.1.5 OV7670的寄存器460
22.2 DCMI接口461
22.2.1 DCMI接口概述461
22.2.2 DCMI接口传输时序462
22.2.3 DCMI数据存储格式463
22.2.4 DCMI图像采集方式464
22.2.5 DCMI的中断465
22.3 DCMI的HAL驱动465
22.3.1 主要驱动函数概述465
22.*.* DCMI接口初始化466
22.3.3 DCMI的采集控制467
22.4 DCMI和摄像头使用示例467
22.4.1 摄像头模块467
22.4.2 开发板与摄像头模块的连接468
22.4.3 示例功能与CubeMX项目设置470
22.4.4 程序功能实现474
附录A CubeMX模板项目和公共驱动程序的使用487
A.1 公共驱动程序的目录组成487
A.2 CubeMX模板项目488
A.3 新建CubeMX项目后导入模板项目的配置488
A.4 复制模板项目以新建CubeMX项目490
A.5 在CubeIDE中设置驱动程序搜索路径490
附录B 复制一个项目493
附录C 开发板功能模块494
附录D 本书示例列表498
附录E 缩略词501
参考文献503
返回顶部