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

STM32Cube高效开发教程(高级篇)
作 者: 王维波 鄢志丹 王钊
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  王维波,博士、中国石油大学(华东)控制科学与工程学院教师。从事测控与仪器开发领域的教学和研究工作,主要研究方向是地球物理探测仪器开发、数据处理方法和软件开发。参与完成国家自然科学基金、山东省重点研发计划等多个科研项目,发表论文 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基础\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