书籍详情

STM32Cube高效开发教程(高级篇)

STM32Cube高效开发教程(高级篇)

作者:王维波,鄢志丹,王钊 著

出版社:人民邮电出版社

出版时间:2022-03-01

ISBN:9787115552518

定价:¥129.90

购买这本书可以去
内容简介
  本书介绍 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 嵌入式系统开发的参考书。
作者简介
  王维波,博士、中国石油大学(华东)控制科学与工程学院教师。从事测控与仪器开发领域的教学和研究工作,主要研究方向是地球物理探测仪器开发、数据处理方法和软件开发。参与完成国家自然科学基金、山东省重点研发计划等多个科研项目,发表论文 20 余篇。著有《Qt 5.9 C++ 开发指南》和《Python Qt GUI 与数据可视化编程》。鄢志丹,博士、中国石油大学(华东)控制科学与工程学院教师。从事随钻测控技术、自抗扰控制方法、井下仪器开发、微弱信号处理等方面的研究工作。主持国家自然科学基金、中国博士后科学基金、山东省自然科学基金等 10 余个科研项目,获授权发明专利 10 余项,发表论文 30 余篇。王钊,博士、中国石油大学(华东)控制科学与工程学院教师。从事自动化相关的教学和研究工作,主要研究方向是非线性系统的非光滑控制研究、故障诊断、工业过程控制等。主持山东省优秀中青年科学家科研奖励基金项目 1 项,发表论文 20 余篇,作为副主编编写教材1 部。
目录
第 一部分 嵌入式操作系统FreeRTOS
第 1章 FreeRTOS基础\t2
1.1 FreeRTOS概述\t2
1.1.1 FreeRTOS的发展历史\t2
1.1.2 FreeRTOS的特点和许可方式\t2
1.1.3 FreeRTOS的一些概念和术语\t3
1.1.4 为什么要使用RTOS\t4
1.2 FreeRTOS入门示例\t4
1.2.1 CubeMX项目配置\t5
1.2.2 含FreeRTOS的项目的文件组成\t8
1.2.3 程序分析和功能实现\t9
1.3 FreeRTOS的文件组成和基本原理\t15
1.3.1 FreeRTOS的文件组成\t15
1.3.2 FreeRTOS的编码规则\t20
1.3.3 FreeRTOS的配置和功能裁剪\t21
第 2章 FreeRTOS的任务管理\t29
2.1 任务相关的一些概念\t29
2.1.1 多任务运行基本机制\t29
2.1.2 任务的状态\t30
2.1.3 任务的优先级\t31
2.1.4 空闲任务\t32
2.1.5 基础时钟与嘀嗒信号\t32
2.2 FreeRTOS的任务调度\t32
2.2.1 任务调度方法概述\t32
2.2.2 使用时间片的抢占式调度方法\t33
2.2.3 不使用时间片的抢占式调度方法\t34
2.2.4 合作式任务调度方法\t35
2.3 任务管理相关函数\t36
2.3.1 相关函数概述\t36
2.3.2 主要函数功能说明\t38
2.4 多任务编程示例一\t40
2.4.1 示例功能与CubeMX项目设置\t40
2.4.2 初始程序分析\t42
2.4.3 编写用户功能代码\t44
2.5 任务管理工具函数\t49
2.5.1 相关函数概述\t49
2.5.2 获取任务句柄\t50
2.5.3 单个任务的操作\t51
2.5.4 内核信息统计\t53
2.6 多任务编程示例二\t55
2.6.1 示例功能与CubeMX项目设置\t55
2.6.2 程序功能实现\t56
第3章 FreeRTOS的中断管理\t62
3.1 FreeRTOS与中断\t62
3.2 任务与中断服务例程\t64
3.2.1 任务与中断服务例程的关系\t64
3.2.2 中断屏蔽和临界代码段\t65
3.2.3 在ISR中使用FreeRTOS API函数\t66
3.2.4 中断及其ISR设计原则\t67
3.3 任务和中断程序设计示例\t67
3.3.1 示例功能和CubeMX项目设置\t67
3.3.2 基本功能代码\t69
3.3.3 各种特性的测试\t71
第4章 进程间通信与消息队列\t74
4.1 进程间通信\t74
4.2 队列的特点和基本操作\t75
4.2.1 队列的创建和存储\t75
4.2.2 向队列写入数据\t76
4.2.3 从队列读取数据\t77
4.2.4 队列操作相关函数\t78
4.3 队列使用示例\t79
4.3.1 示例功能和CubeMX项目设置\t79
4.3.2 初始代码分析\t80
4.3.3 实现用户功能\t82
第5章 信号量\t86
5.1 信号量和互斥量概述\t86
5.1.1 二值信号量\t86
5.1.2 计数信号量\t87
5.1.3 互斥量\t87
5.1.4 递归互斥量\t88
5.1.5 相关函数概述\t88
5.2 二值信号量使用示例\t90
5.2.1 二值信号量操作相关函数详解\t90
5.2.2 示例功能和CubeMX项目设置\t92
5.2.3 程序功能实现\t94
5.3 计数信号量使用示例\t98
5.3.1 计数信号量操作相关函数详解\t98
5.3.2 示例功能和CubeMX项目设置\t99
5.3.3 程序功能实现\t100
第6章 互斥量\t104
6.1 优先级翻转问题\t104
6.2 互斥量的工作原理\t105
6.2.1 优先级继承\t105
6.2.2 互斥量相关函数详解\t105
6.3 优先级翻转示例\t106
6.3.1 示例功能和CubeMX项目设置\t106
6.3.2 程序功能实现\t107
6.4 互斥量使用示例\t111
6.4.1 示例功能和CubeMX项目设置\t111
6.4.2 程序功能实现\t111
第7章 事件组\t115
7.1 事件组的原理和功能\t115
7.1.1 事件组的功能特点\t115
7.1.2 事件组的工作原理\t115
7.2 事件组相关函数\t116
7.2.1 相关函数概述\t116
7.2.2 部分函数详解\t117
7.3 事件组使用示例\t120
7.3.1 示例功能和CubeMX项目设置\t120
7.3.2 程序功能实现\t120
7.4 通过事件组进行多任务同步\t125
7.4.1 多任务同步原理\t125
7.4.2 示例功能和CubeMX项目设置\t126
7.4.3 程序功能实现\t127
第8章 任务通知\t132
8.1 任务通知的原理和功能\t132
8.2 任务通知的相关函数\t133
8.2.1 相关函数概述\t133
8.2.2 函数详解\t134
8.3 示例一:使用任务通知传递数据\t137
8.3.1 示例功能与CubeMX项目设置\t137
8.3.2 程序功能实现\t138
8.4 示例二:将任务通知用作计数信号量\t141
8.4.1 示例功能\t141
8.4.2 CubeMX项目设置\t141
8.4.3 程序功能实现\t142
第9章 流缓冲区和消息缓冲区\t145
9.1 流缓冲区功能概述\t145
9.2 流缓冲区操作的相关函数\t146
9.2.1 相关函数概述\t146
9.2.2 部分函数详解\t146
9.2.3 表示发送完成和接收完成的宏\t149
9.3 流缓冲区使用示例\t149
9.3.1 示例功能与CubeMX项目设置\t149
9.3.2 程序功能实现\t151
9.4 消息缓冲区功能概述\t154
9.5 消息缓冲区操作相关函数\t154
9.5.1 相关函数概述\t154
9.5.2 部分函数详解\t155
9.6 消息缓冲区使用示例\t157
9.6.1 示例功能与CubeMX项目设置\t157
9.6.2 程序功能实现\t158
第 10章 软件定时器\t162
10.1 软件定时器概述\t162
10.1.1 软件定时器的特性\t162
10.1.2 软件定时器的相关配置\t163
10.1.3 定时器服务任务的优先级\t163
10.2 软件定时器的相关函数\t164
10.2.1 相关函数概述\t164
10.2.2 部分函数详解\t165
10.3 软件定时器使用示例\t169
10.3.1 示例功能和CubeMX项目设置\t169
10.3.2 程序功能实现\t170
第 11章 空闲任务与低功耗\t174
11.1 HAL和FreeRTOS的基础时钟\t174
11.1.1 使用SysTick作为HAL的基础时钟\t174
11.1.2 使用其他定时器作为HAL的基础时钟\t177
11.1.3 FreeRTOS的基础时钟\t179
11.2 空闲任务与低功耗处理\t182
11.2.1 实现原理\t182
11.2.2 设计示例\t183
11.3 Tickless低功耗模式\t186
11.3.1 Tickless模式的原理和功能\t186
11.3.2 Tickless模式的使用示例\t187
第二部分 FatFS管理文件系统
第 12章 FatFS和文件系统\t192
12.1 FatFS概述\t192
12.1.1 FatFS的作用\t192
12.1.2 文件系统的一些基本概念\t193
12.1.3 FatFS的功能特点和参数\t194
12.1.4 FatFS的文件组成\t195
12.1.5 FatFS的基本数据类型定义\t196
12.2 FatFS的应用程序接口函数\t197
12.2.1 卷管理和系统配置相关函数\t197
12.2.2 文件和目录管理相关函数\t200
12.2.3 目录访问相关函数\t203
12.2.4 文件访问相关函数\t204
12.3 FatFS的存储介质访问函数\t208
12.4 针对SPI-Flash芯片移植FatFS\t209
12.4.1 SPI-Flash芯片硬件电路\t209
12.4.2 CubeMX项目基础设置\t210
12.4.3 在CubeMX中设置FatFS\t210
12.4.4 项目中FatFS的文件组成\t216
12.4.5 FatFS初始化过程\t218
12.4.6 针对SPI-Flash芯片的Disk IO函数实现\t226
12.5 在SPI-Flash芯片上使用文件系统\t231
12.5.1 主程序功能\t231
12.5.2 磁盘格式化\t234
12.5.3 获取FAT磁盘信息\t234
12.5.4 扫描根目录下的文件和子目录\t236
12.5.5 创建文件和目录\t237
12.5.6 读取文本文件\t239
12.5.7 读取二进制文件\t239
12.5.8 获取文件信息\t241
12.5.9 文件file_opera.h的完整定义\t242
第 13章 直接访问SD卡\t245
13.1 SD卡简介\t245
13.1.1 SD卡的分类\t245
13.1.2 常规SD卡的接口\t246
13.2 SDIO接口硬件电路\t247
13.2.1 STM32F407的SDIO接口\t247
13.2.2 开发板上的microSD卡连接电路\t248
13.3 SDIO接口和SD卡的HAL驱动程序\t249
13.3.1 SD驱动程序概述\t250
13.3.2 初始化和配置函数\t251
13.3.3 读取SD卡的参数信息\t251
13.3.4 获取SD卡的当前状态\t255
13.3.5 以轮询方式读写SD卡\t255
13.3.6 以中断方式读写SD卡\t256
13.3.7 以DMA方式读写SD卡\t256
13.4 示例一:以轮询方式读写SD卡\t257
13.4.1 示例功能与CubeMX项目设置\t257
13.4.2 主程序与SDIO接口/SD卡初始化\t259
13.4.3 程序功能实现\t260
13.5 示例二:以DMA方式读写SD卡\t264
13.5.1 示例功能与CubeMX项目设置\t264
13.5.2 主程序与外设初始化\t265
13.5.3 程序功能实现\t268
第 14章 用FatFS管理SD卡文件系统\t272
14.1 SD卡文件系统概述\t272
14.2 示例一:阻塞式访问SD卡\t272
14.2.1 示例功能与CubeMX项目设置\t272
14.2.2 项目文件组成和初始代码分析\t274
14.2.3 SD卡的Disk IO函数实现\t278
14.2.4 SD卡文件管理功能的实现\t284
14.3 示例二:以DMA方式访问SD卡\t288
14.3.1 示例功能和CubeMX项目设置\t288
14.3.2 Disk IO函数实现代码分析\t289
14.3.3 SD卡文件管理功能的实现\t291
第 15章 用FatFS管理U盘文件系统\t295
15.1 USB概述\t295
15.1.1 USB协议\t295
15.1.2 USB设备类型\t296
15.1.3 USB接口类型\t296
15.2 STM32F407的USB-OTG接口\t298
15.2.1 USB-OTG概述\t298
15.2.2 USB-OTG FS\t299
15.2.3 开发板上的USB接口电路\t302
15.3 作为USB Host读写U盘\t303
15.3.1 示例功能和CubeMX项目设置\t303
15.3.2 项目文件组成和初始代码分析\t307
15.3.3 USBH状态变化测试\t316
15.3.4 U盘文件管理功能实现\t318
第 16章 USB-OTG用作USB MSC外设\t324
16.1 开发板作为USB MSC外设的原理\t324
16.2 示例一:SD卡读卡器\t326
16.2.1 示例功能和CubeMX项目设置\t326
16.2.2 项目文件组成和初始代码分析\t328
16.2.3 程序功能实现\t333
16.3 示例二:增加FatFS管理本机文件功能\t336
16.3.1 示例功能和CubeMX项目设置\t336
16.3.2 程序功能实现\t337
16.3.3 运行测试\t340
第 17章 在FreeRTOS中使用FatFS\t341
17.1 在RTOS中使用FatFS需考虑的问题\t341
17.1.1 可重入性问题\t341
17.1.2 FatFS的可重入性\t341
17.2 FreeRTOS中使用FatFS的示例\t343
17.2.1 示例功能和CubeMX项目设置\t343
17.2.2 项目文件组成和初始代码分析\t346
17.2.3 FatFS API函数的重入性实现原理\t350
17.2.4 添加用户功能代码\t354
第三部分 图片的获取与显示
第 18章 BMP图片\t360
18.1 LCD显示图片的原理\t360
18.1.1 像素颜色的表示\t360
18.1.2 根据图片的RGB565数据显示图片\t360
18.2 图片显示示例\t362
18.2.1 示例功能与CubeMX项目配置\t362
18.2.2 程序功能实现\t363
18.3 BMP图片文件的格式\t368
18.3.1 BMP图片文件的数据分段\t368
18.3.2 位图文件头\t368
18.3.3 位图信息头\t369
18.3.4 位图数据\t370
18.4 BMP图片文件的读写操作示例\t370
18.4.1 示例功能和CubeMX项目设置\t370
18.4.2 程序功能实现\t372
18.4.3 BMP文件操作驱动程序\t377
第 19章 JPG图片\t387
19.1 JPEG和LIBJPEG\t387
19.2 JPG图片文件的读写操作示例\t388
19.2.1 示例功能和CubeMX项目设置\t388
19.2.2 程序功能实现\t389
19.2.3 JPG文件操作驱动程序\t395
第 20章 电阻式触摸屏\t405
20.1 电阻式触摸屏的工作原理\t405
20.2 电阻式触摸屏的软硬件接口\t406
20.3 示例一:轮询方式检测触摸屏输出\t407
20.3.1 示例功能\t407
20.3.2 CubeMX项目设置\t407
20.3.3 主程序功能实现\t409
20.3.4 GUI界面的创建与交互操作\t413
20.3.5 电阻式触摸屏驱动程序\t420
20.4 示例二:中断方式获取触摸屏输出\t426
20.4.1 示例功能和CubeMX项目设置\t426
20.4.2 程序功能实现\t427
第 21章 电容式触摸屏\t431
21.1 电容式触摸屏的工作原理\t431
21.2 电容式触摸屏的软硬件接口\t431
21.2.1 电容式触摸屏接口\t431
21.2.2 电容式触摸屏控制芯片功能\t433
21.3 电容触摸屏的使用示例\t437
21.3.1 示例功能和CubeMX项目设置\t437
21.3.2 程序功能实现\t438
21.3.3 电容触摸屏驱动程序\t443
第 22章 DCMI接口和数字摄像头\t455
22.1 数字摄像头\t455
22.1.1 数字摄像头概述\t455
22.1.2 OV7670图像传感器的功能和接口\t456
22.1.3 OV7670数据输出时序和格式\t457
22.1.4 SCCB通信\t458
22.1.5 OV7670的寄存器\t460
22.2 DCMI接口\t461
22.2.1 DCMI接口概述\t461
22.2.2 DCMI接口传输时序\t462
22.2.3 DCMI数据存储格式\t463
22.2.4 DCMI图像采集方式\t464
22.2.5 DCMI的中断\t465
22.3 DCMI的HAL驱动\t465
22.3.1 主要驱动函数概述\t465
22.3.2 DCMI接口初始化\t466
22.3.3 DCMI的采集控制\t467
22.4 DCMI和摄像头使用示例\t467
22.4.1 摄像头模块\t467
22.4.2 开发板与摄像头模块的连接\t468
22.4.3 示例功能与CubeMX项目设置\t470
22.4.4 程序功能实现\t474
附录A CubeMX模板项目和公共驱动程序的使用\t487
A.1 公共驱动程序的目录组成\t487
A.2 CubeMX模板项目\t488
A.3 新建CubeMX项目后导入模板项目的配置\t488
A.4 复制模板项目以新建CubeMX项目\t490
A.5 在CubeIDE中设置驱动程序搜索路径\t490
附录B 复制一个项目\t493
附录C 开发板功能模块\t494
附录D 本书示例列表\t498
附录E 缩略词\t501
参考文献\t503
猜您喜欢

读书导航