店铺公告
为保障消费者合理购买需求及公平交易机会,避免因非生活消费目的的购买货囤积商品,抬价转售等违法行为发生,店铺有权对异常订单不发货且不进行赔付。异常订单:包括但不限于相同用户ID批量下单,同一用户(指不同用户ID,存在相同/临近/虚构收货地址,或相同联系号码,收件人,同账户付款人等情形的)批量下单(一次性大于5本),以及其他非消费目的的交易订单。
温馨提示:请务必当着快递员面开箱验货,如发现破损,请立即拍照拒收,如验货有问题请及时联系在线客服处理,(如开箱验货时发现破损,所产生运费由我司承担,一经签收即为货物完好,如果您未开箱验货,一切损失就需要由买家承担,所以请买家一定要仔细验货),
关于退货运费:对于下单后且物流已发货货品在途的状态下,原则上均不接受退货申请,如顾客原因退货需要承担来回运费,如因产品质量问题(非破损问题)可在签收后,联系在线客服。
本店存在书、古旧书、收藏书、二手书等特殊商品,因受采购成本限制,可能高于定价销售,明码标价,介意者勿拍!
1.书籍因稀缺可能导致售价高于定价,图书实际定价参见下方详情内基本信息,请买家看清楚且明确后再拍,避免价格争议!
2.店铺无纸质均开具电子,请联系客服开具电子版
内容介绍
本书介绍 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
第 *章 FreeRTOS基础 2
*.* FreeRTOS概述 2
*.*.* FreeRTOS的发展历史 2
*.*.2 FreeRTOS的*点和许可方式 2
*.*.3 FreeRTOS的*些概念和术语 3
*.*.4 为什么要使用RTOS 4
*.2 FreeRTOS入门示例 4
*.2.* CubeMX项目配置 5
*.2.2 含FreeRTOS的项目的文件组成 8
*.2.3 程序分析和功能实现 9
*.3 FreeRTOS的文件组成和基本原理 *5
*.3.* FreeRTOS的文件组成 *5
*.3.2 FreeRTOS的编码规则 20
*.3.3 FreeRTOS的配置和功能裁剪 2*
第 2章 FreeRTOS的任务管理 29
2.* 任务相关的*些概念 29
2.*.* 多任务运行基本机制 29
2.*.2 任务的状态 30
2.*.3 任务的*先级 3*
2.*.4 空闲任务 32
2.*.5 基础时钟与嘀嗒信号 32
2.2 FreeRTOS的任务调度 32
2.2.* 任务调度方法概述 32
2.2.2 使用时间片的*占式调度方法 33
2.2.3 *使用时间片的*占式调度方法 34
2.2.4 合作式任务调度方法 35
2.3 任务管理相关函数 36
2.3.* 相关函数概述 36
2.3.2 主要函数功能说明 38
2.4 多任务编程示例* 40
2.4.* 示例功能与CubeMX项目设置 40
2.4.2 初始程序分析 42
2.4.3 编写用户功能代码 44
2.5 任务管理工具函数 49
2.5.* 相关函数概述 49
2.5.2 获取任务句柄 50
2.5.3 单个任务的操作 5*
2.5.4 内核信息统计 53
2.6 多任务编程示例二 55
2.6.* 示例功能与CubeMX项目设置 55
2.6.2 程序功能实现 56
第3章 FreeRTOS的中断管理 62
3.* FreeRTOS与中断 62
3.2 任务与中断服务例程 64
3.2.* 任务与中断服务例程的关系 64
3.2.2 中断屏蔽和临界代码段 65
3.2.3 在ISR中使用FreeRTOS API函数 66
3.2.4 中断及其ISR设计原则 67
3.3 任务和中断程序设计示例 67
3.3.* 示例功能和CubeMX项目设置 67
3.3.2 基本功能代码 69
3.3.3 各种*性的测试 7*
第4章 进程间通信与消息队列 74
4.* 进程间通信 74
4.2 队列的*点和基本操作 75
4.2.* 队列的*建和存储 75
4.2.2 向队列写入数据 76
4.2.3 从队列读取数据 77
4.2.4 队列操作相关函数 78
4.3 队列使用示例 79
4.3.* 示例功能和CubeMX项目设置 79
4.3.2 初始代码分析 80
4.3.3 实现用户功能 82
第5章 信号量 86
5.* 信号量和互斥量概述 86
5.*.* 二值信号量 86
5.*.2 计数信号量 87
5.*.3 互斥量 87
5.*.4 递归互斥量 88
5.*.5 相关函数概述 88
5.2 二值信号量使用示例 90
5.2.* 二值信号量操作相关函数详解 90
5.2.2 示例功能和CubeMX项目设置 92
5.2.3 程序功能实现 94
5.3 计数信号量使用示例 98
5.3.* 计数信号量操作相关函数详解 98
5.3.2 示例功能和CubeMX项目设置 99
5.3.3 程序功能实现 *00
第6章 互斥量 *04
6.* *先级翻转问题 *04
6.2 互斥量的工作原理 *05
6.2.* *先级继承 *05
6.2.2 互斥量相关函数详解 *05
6.3 *先级翻转示例 *06
6.3.* 示例功能和CubeMX项目设置 *06
6.3.2 程序功能实现 *07
6.4 互斥量使用示例 ***
6.4.* 示例功能和CubeMX项目设置 ***
6.4.2 程序功能实现 ***
第7章 事件组 **5
7.* 事件组的原理和功能 **5
7.*.* 事件组的功能*点 **5
7.*.2 事件组的工作原理 **5
7.2 事件组相关函数 **6
7.2.* 相关函数概述 **6
7.2.2 *分函数详解 **7
7.3 事件组使用示例 *20
7.3.* 示例功能和CubeMX项目设置 *20
7.3.2 程序功能实现 *20
7.4 通过事件组进行多任务同步 *25
7.4.* 多任务同步原理 *25
7.4.2 示例功能和CubeMX项目设置 *26
7.4.3 程序功能实现 *27
第8章 任务通知 *32
8.* 任务通知的原理和功能 *32
8.2 任务通知的相关函数 *33
8.2.* 相关函数概述 *33
8.2.2 函数详解 *34
8.3 示例*:使用任务通知传递数据 *37
8.3.* 示例功能与CubeMX项目设置 *37
8.3.2 程序功能实现 *38
8.4 示例二:将任务通知用作计数信号量 *4*
8.4.* 示例功能 *4*
8.4.2 CubeMX项目设置 *4*
8.4.3 程序功能实现 *42
第9章 流缓冲区和消息缓冲区 *45
9.* 流缓冲区功能概述 *45
9.2 流缓冲区操作的相关函数 *46
9.2.* 相关函数概述 *46
9.2.2 *分函数详解 *46
9.2.3 表示发送完成和接收完成的宏 *49
9.3 流缓冲区使用示例 *49
9.3.* 示例功能与CubeMX项目设置 *49
9.3.2 程序功能实现 *5*
9.4 消息缓冲区功能概述 *54
9.5 消息缓冲区操作相关函数 *54
9.5.* 相关函数概述 *54
9.5.2 *分函数详解 *55
9.6 消息缓冲区使用示例 *57
9.6.* 示例功能与CubeMX项目设置 *57
9.6.2 程序功能实现 *58
第 *0章 软件定时器 *62
*0.* 软件定时器概述 *62
*0.*.* 软件定时器的*性 *62
*0.*.2 软件定时器的相关配置 *63
*0.*.3 定时器服务任务的*先级 *63
*0.2 软件定时器的相关函数 *64
*0.2.* 相关函数概述 *64
*0.2.2 *分函数详解 *65
*0.3 软件定时器使用示例 *69
*0.3.* 示例功能和CubeMX项目设置 *69
*0.3.2 程序功能实现 *70
第 **章 空闲任务与低功耗 *74
**.* HAL和FreeRTOS的基础时钟 *74
**.*.* 使用SysTick作为HAL的基础时钟 *74
**.*.2 使用其他定时器作为HAL的基础时钟 *77
**.*.3 FreeRTOS的基础时钟 *79
**.2 空闲任务与低功耗处理 *82
**.2.* 实现原理 *82
**.2.2 设计示例 *83
**.3 Tickless低功耗模式 *86
**.3.* Tickless模式的原理和功能 *86
**.3.2 Tickless模式的使用示例 *87
第二*分 FatFS管理文件系统
第 *2章 FatFS和文件系统 *92
*2.* FatFS概述 *92
*2.*.* FatFS的作用 *92
*2.*.2 文件系统的*些基本概念 *93
*2.*.3 FatFS的功能*点和参数 *94
*2.*.4 FatFS的文件组成 *95
*2.*.5 FatFS的基本数据类型定义 *96
*2.2 FatFS的应用程序接口函数 *97
*2.2.* 卷管理和系统配置相关函数 *97
*2.2.2 文件和目录管理相关函数 200
*2.2.3 目录访问相关函数 203
*2.2.4 文件访问相关函数 204
*2.3 FatFS的存储介质访问函数 208
*2.4 针对SPI-Flash芯片移植FatFS 209
*2.4.* SPI-Flash芯片硬件电路 209
*2.4.2 CubeMX项目基础设置 2*0
*2.4.3 在CubeMX中设置FatFS 2*0
*2.4.4 项目中FatFS的文件组成 2*6
*2.4.5 FatFS初始化过程 2*8
*2.4.6 针对SPI-Flash芯片的Disk IO函数实现 226
*2.5 在SPI-Flash芯片上使用文件系统 23*
*2.5.* 主程序功能 23*
*2.5.2 磁盘格式化 234
*2.5.3 获取FAT磁盘信息 234
*2.5.4 扫描根目录下的文件和子目录 236
*2.5.5 *建文件和目录 237
*2.5.6 读取文本文件 239
*2.5.7 读取二进制文件 239
*2.5.8 获取文件信息 24*
*2.5.9 文件file_opera.h的完整定义 242
第 *3章 直接访问SD卡 245
*3.* SD卡简介 245
*3.*.* SD卡的分类 245
*3.*.2 常规SD卡的接口 246
*3.2 SDIO接口硬件电路 247
*3.2.* STM32F407的SDIO接口 247
*3.2.2 开发板上的microSD卡连接电路 248
*3.3 SDIO接口和SD卡的HAL驱动程序 249
*3.3.* SD驱动程序概述 250
*3.3.2 初始化和配置函数 25*
*3.3.3 读取SD卡的参数信息 25*
*3.3.4 获取SD卡的当前状态 255
*3.3.5 以轮询方式读写SD卡 255
*3.3.6 以中断方式读写SD卡 256
*3.3.7 以DMA方式读写SD卡 256
*3.4 示例*:以轮询方式读写SD卡 257
*3.4.* 示例功能与CubeMX项目设置 257
*3.4.2 主程序与SDIO接口/SD卡初始化 259
*3.4.3 程序功能实现 260
*3.5 示例二:以DMA方式读写SD卡 264
*3.5.* 示例功能与CubeMX项目设置 264
*3.5.2 主程序与外设初始化 265
*3.5.3 程序功能实现 268
第 *4章 用FatFS管理SD卡文件系统 272
*4.* SD卡文件系统概述 272
*4.2 示例*:阻塞式访问SD卡 272
*4.2.* 示例功能与CubeMX项目设置 272
*4.2.2 项目文件组成和初始代码分析 274
*4.2.3 SD卡的Disk IO函数实现 278
*4.2.4 SD卡文件管理功能的实现 284
*4.3 示例二:以DMA方式访问SD卡 288
*4.3.* 示例功能和CubeMX项目设置 288
*4.3.2 Disk IO函数实现代码分析 289
*4.3.3 SD卡文件管理功能的实现 29*
第 *5章 用FatFS管理U盘文件系统 295
*5.* USB概述 295
*5.*.* USB协议 295
*5.*.2 USB设备类型 296
*5.*.3 USB接口类型 296
*5.2 STM32F407的USB-OTG接口 298
*5.2.* USB-OTG概述 298
*5.2.2 USB-OTG FS 299
*5.2.3 开发板上的USB接口电路 302
*5.3 作为USB Host读写U盘 303
*5.3.* 示例功能和CubeMX项目设置 303
*5.3.2 项目文件组成和初始代码分析 307
*5.3.3 USBH状态变化测试 3*6
*5.3.4 U盘文件管理功能实现 3*8
第 *6章 USB-OTG用作USB MSC外设 324
*6.* 开发板作为USB MSC外设的原理 324
*6.2 示例*:SD卡读卡器 326
*6.2.* 示例功能和CubeMX项目设置 326
*6.2.2 项目文件组成和初始代码分析 328
*6.2.3 程序功能实现 333
*6.3 示例二:增加FatFS管理本机文件功能 336
*6.3.* 示例功能和CubeMX项目设置 336
*6.3.2 程序功能实现 337
*6.3.3 运行测试 340
第 *7章 在FreeRTOS中使用FatFS 34*
*7.* 在RTOS中使用FatFS需考虑的问题 34*
*7.*.* 可重入性问题 34*
*7.*.2 FatFS的可重入性 34*
*7.2 FreeRTOS中使用FatFS的示例 343
*7.2.* 示例功能和CubeMX项目设置 343
*7.2.2 项目文件组成和初始代码分析 346
*7.2.3 FatFS API函数的重入性实现原理 350
*7.2.4 添加用户功能代码 354
第三*分 图片的获取与显示
第 *8章 BMP图片 360
*8.* LCD显示图片的原理 360
*8.*.* 像素颜色的表示 360
*8.*.2 根据图片的RGB565数据显示图片 360
*8.2 图片显示示例 362
*8.2.* 示例功能与CubeMX项目配置 362
*8.2.2 程序功能实现 363
*8.3 BMP图片文件的格式 368
*8.3.* BMP图片文件的数据分段 368
*8.3.2 位图文件头 368
*8.3.3 位图信息头 369
*8.3.4 位图数据 370
*8.4 BMP图片文件的读写操作示例 370
*8.4.* 示例功能和CubeMX项目设置 370
*8.4.2 程序功能实现 372
*8.4.3 BMP文件操作驱动程序 377
第 *9章 JPG图片 387
*9.* JPEG和LIBJPEG 387
*9.2 JPG图片文件的读写操作示例 388
*9.2.* 示例功能和CubeMX项目设置 388
*9.2.2 程序功能实现 389
*9.2.3 JPG文件操作驱动程序 395
第 20章 电阻式触摸屏 405
20.* 电阻式触摸屏的工作原理 405
20.2 电阻式触摸屏的软硬件接口 406
20.3 示例*:轮询方式检测触摸屏输出 407
20.3.* 示例功能 407
20.3.2 CubeMX项目设置 407
20.3.3 主程序功能实现 409
20.3.4 GUI界面的*建与交互操作 4*3
20.3.5 电阻式触摸屏驱动程序 420
20.4 示例二:中断方式获取触摸屏输出 426
20.4.* 示例功能和CubeMX项目设置 426
20.4.2 程序功能实现 427
第 2*章 电容式触摸屏 43*
2*.* 电容式触摸屏的工作原理 43*
2*.2 电容式触摸屏的软硬件接口 43*
2*.2.* 电容式触摸屏接口 43*
2*.2.2 电容式触摸屏控制芯片功能 433
2*.3 电容触摸屏的使用示例 437
2*.3.* 示例功能和CubeMX项目设置 437
2*.3.2 程序功能实现 438
2*.3.3 电容触摸屏驱动程序 443
第 22章 DCMI接口和数字摄像头 455
22.* 数字摄像头 455
22.*.* 数字摄像头概述 455
22.*.2 OV7670图像传感器的功能和接口 456
22.*.3 OV7670数据输出时序和格式 457
22.*.4 SCCB通信 458
22.*.5 OV7670的寄存器 460
22.2 DCMI接口 46*
22.2.* DCMI接口概述 46*
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.* 主要驱动函数概述 465
22.3.2 DCMI接口初始化 466
22.3.3 DCMI的采集控制 467
22.4 DCMI和摄像头使用示例 467
22.4.* 摄像头模块 467
22.4.2 开发板与摄像头模块的连接 468
22.4.3 示例功能与CubeMX项目设置 470
22.4.4 程序功能实现 474
附录A CubeMX模板项目和公共驱动程序的使用 487
A.* 公共驱动程序的目录组成 487
A.2 CubeMX模板项目 488
A.3 新建CubeMX项目后导入模板项目的配置 488
A.4 复制模板项目以新建CubeMX项目 490
A.5 在CubeIDE中设置驱动程序搜索路径 490
附录B 复制*个项目 493
附录C 开发板功能模块 494
附录D 本书示例列表 498
附录E 缩略词 50*
参考文献 503
作者介绍
*维波,博士、中*石油大学(华东)控制科学与工程学院教师。从事测控与仪器开发*域的教学和研究工作,主要研究方向是地球物理探测仪器开发、数据处理方法和软件开发。参与完成*家自然科学基金、山东省重点研发计划等多个科研项目,发表论文 20 余篇。著有《Qt 5.9 C++ 开发指南》和《Python Qt GUI 与数据可视化编程》。 鄢志丹,博士、中*石油大学(华东)控制科学与工程学院教师。从事随钻测控技术、自抗扰控制方法、井下仪器开发、微弱信号处理等方面的研究工作。主持*家自然科学基金、中*博士后科学基金、山东省自然科学基金等 *0 余个科研项目,获授权发明*利 *0 余项,发表论文 30 余篇。 *钊,博士、中*石油大学(华东)控制科学与工程学院教师。从事自动化相关的教学和研究工作,主要研究方向是非线性系统的非光滑控制研究、故障诊断、工业过程控制等。主持山东省*秀中青年*科研奖励基金项目 * 项,发表论文 20 余篇,作为副主编编写教材* *。