STM32Cube高效開發(fā)教程(高級(jí)篇)
定 價(jià):129.9 元
- 作者:王維波 鄢志丹 王釗
- 出版時(shí)間:2022/3/1
- ISBN:9787115552518
- 出 版 社:人民郵電出版社
- 中圖法分類:TP332.3
- 頁碼:502
- 紙張:
- 版次:01
- 開本:16開
本書介紹 STM32 開發(fā)的一些高級(jí)內(nèi)容。第一部分詳細(xì)介紹嵌入式操作系統(tǒng) FreeRTOS 的使用;第二部分介紹使用 FatFS 管理 SPI-Flash 芯片、SD 卡和 U 盤上的文件系統(tǒng);第三部分介紹 BMP 和 JPG 圖片的獲取與顯示,觸摸屏的使用,DCMI 接口和數(shù)字?jǐn)z像頭等。全書使用 STM32CubeMX 和 STM32CubeIDE軟件開發(fā)例程,講解 FreeRTOS、FatFS、LibJPEG、USB_Host、USB_Device 等中間件以及 SDIO、USB-OTG、
DCMI 等外設(shè)的原理和使用方法,并針對(duì)一個(gè) STM32F407 開發(fā)板編寫了完整示例項(xiàng)目。通過閱讀本書,讀者可以掌握 STM32 開發(fā)中的嵌入式操作系統(tǒng)、文件系統(tǒng)、觸摸屏等高級(jí)軟硬件的開發(fā)方法。
本書適合已經(jīng)掌握 STM32CubeMX 和 STM32CubeIDE 軟件的使用以及 STM32 常用外設(shè)的 STM32Cube開發(fā)等相關(guān)基礎(chǔ)內(nèi)容的讀者閱讀,可以作為高等院校電子、自動(dòng)化、計(jì)算機(jī)類專業(yè)的教學(xué)用書,也可作為STM32 嵌入式系統(tǒng)開發(fā)的參考書。
1. 使用ST官方的STM32Cube全套工具鏈軟件。STM32CubeMX進(jìn)行MCU圖形化配置然后導(dǎo)出初始化代碼的開發(fā)方式簡單便捷,程序結(jié)構(gòu)統(tǒng)一,開發(fā)效率高,是廣大初學(xué)者最容易掌握的方式。
2. 使用ST官方免費(fèi)的IDE軟件TrueSTUDIO和STM32CubeIDE,沒有軟件版權(quán)風(fēng)險(xiǎn)。
3. 本書介紹STM32 嵌入式開發(fā)的高級(jí)內(nèi)容:STM32Cube MCU 固件庫所包含一些移植好的中間件,如 FreeRTOS、FatFS、LibJPEG、USB_Host、USB_Device 等,以及 SDIO、USB-OTG、DCMI 等硬件接口的編程和使用方法,旨在幫助讀者掌握嵌入式操作系統(tǒng)、嵌入式文件系統(tǒng)、圖片顯示和觸摸屏交互操作等知識(shí)。
4. 本書為讀者提供示例源代碼、示例運(yùn)行演示視頻、課件等資源,讀者可登錄異步社區(qū)圖書頁面下載。
王維波,博士、中國石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事測控與儀器開發(fā)領(lǐng)域的教學(xué)和研究工作,主要研究方向是地球物理探測儀器開發(fā)、數(shù)據(jù)處理方法和軟件開發(fā)。參與完成國家自然科學(xué)基金、山東省重點(diǎn)研發(fā)計(jì)劃等多個(gè)科研項(xiàng)目,發(fā)表論文 20 余篇。著有《Qt 5.9 C++ 開發(fā)指南》和《Python Qt GUI 與數(shù)據(jù)可視化編程》。
鄢志丹,博士、中國石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事隨鉆測控技術(shù)、自抗擾控制方法、井下儀器開發(fā)、微弱信號(hào)處理等方面的研究工作。主持國家自然科學(xué)基金、中國博士后科學(xué)基金、山東省自然科學(xué)基金等 10 余個(gè)科研項(xiàng)目,獲授權(quán)發(fā)明專利 10 余項(xiàng),發(fā)表論文 30 余篇。
王釗,博士、中國石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事自動(dòng)化相關(guān)的教學(xué)和研究工作,主要研究方向是非線性系統(tǒng)的非光滑控制研究、故障診斷、工業(yè)過程控制等。主持山東省優(yōu)秀中青年科學(xué)家科研獎(jiǎng)勵(lì)基金項(xiàng)目 1 項(xiàng),發(fā)表論文 20 余篇,作為副主編編寫教材1 部。
第 一部分 嵌入式操作系統(tǒng)FreeRTOS
第 1章 FreeRTOS基礎(chǔ) 2
1.1 FreeRTOS概述 2
1.1.1 FreeRTOS的發(fā)展歷史 2
1.1.2 FreeRTOS的特點(diǎn)和許可方式 2
1.1.3 FreeRTOS的一些概念和術(shù)語 3
1.1.4 為什么要使用RTOS 4
1.2 FreeRTOS入門示例 4
1.2.1 CubeMX項(xiàng)目配置 5
1.2.2 含F(xiàn)reeRTOS的項(xiàng)目的文件組成 8
1.2.3 程序分析和功能實(shí)現(xiàn) 9
1.3 FreeRTOS的文件組成和基本原理 15
1.3.1 FreeRTOS的文件組成 15
1.3.2 FreeRTOS的編碼規(guī)則 20
1.3.3 FreeRTOS的配置和功能裁剪 21
第 2章 FreeRTOS的任務(wù)管理 29
2.1 任務(wù)相關(guān)的一些概念 29
2.1.1 多任務(wù)運(yùn)行基本機(jī)制 29
2.1.2 任務(wù)的狀態(tài) 30
2.1.3 任務(wù)的優(yōu)先級(jí) 31
2.1.4 空閑任務(wù) 32
2.1.5 基礎(chǔ)時(shí)鐘與嘀嗒信號(hào) 32
2.2 FreeRTOS的任務(wù)調(diào)度 32
2.2.1 任務(wù)調(diào)度方法概述 32
2.2.2 使用時(shí)間片的搶占式調(diào)度方法 33
2.2.3 不使用時(shí)間片的搶占式調(diào)度方法 34
2.2.4 合作式任務(wù)調(diào)度方法 35
2.3 任務(wù)管理相關(guān)函數(shù) 36
2.3.1 相關(guān)函數(shù)概述 36
2.3.2 主要函數(shù)功能說明 38
2.4 多任務(wù)編程示例一 40
2.4.1 示例功能與CubeMX項(xiàng)目設(shè)置 40
2.4.2 初始程序分析 42
2.4.3 編寫用戶功能代碼 44
2.5 任務(wù)管理工具函數(shù) 49
2.5.1 相關(guān)函數(shù)概述 49
2.5.2 獲取任務(wù)句柄 50
2.5.3 單個(gè)任務(wù)的操作 51
2.5.4 內(nèi)核信息統(tǒng)計(jì) 53
2.6 多任務(wù)編程示例二 55
2.6.1 示例功能與CubeMX項(xiàng)目設(shè)置 55
2.6.2 程序功能實(shí)現(xiàn) 56
第3章 FreeRTOS的中斷管理 62
3.1 FreeRTOS與中斷 62
3.2 任務(wù)與中斷服務(wù)例程 64
3.2.1 任務(wù)與中斷服務(wù)例程的關(guān)系 64
3.2.2 中斷屏蔽和臨界代碼段 65
3.2.3 在ISR中使用FreeRTOS API函數(shù) 66
3.2.4 中斷及其ISR設(shè)計(jì)原則 67
3.3 任務(wù)和中斷程序設(shè)計(jì)示例 67
3.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 67
3.3.2 基本功能代碼 69
3.3.3 各種特性的測試 71
第4章 進(jìn)程間通信與消息隊(duì)列 74
4.1 進(jìn)程間通信 74
4.2 隊(duì)列的特點(diǎn)和基本操作 75
4.2.1 隊(duì)列的創(chuàng)建和存儲(chǔ) 75
4.2.2 向隊(duì)列寫入數(shù)據(jù) 76
4.2.3 從隊(duì)列讀取數(shù)據(jù) 77
4.2.4 隊(duì)列操作相關(guān)函數(shù) 78
4.3 隊(duì)列使用示例 79
4.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 79
4.3.2 初始代碼分析 80
4.3.3 實(shí)現(xiàn)用戶功能 82
第5章 信號(hào)量 86
5.1 信號(hào)量和互斥量概述 86
5.1.1 二值信號(hào)量 86
5.1.2 計(jì)數(shù)信號(hào)量 87
5.1.3 互斥量 87
5.1.4 遞歸互斥量 88
5.1.5 相關(guān)函數(shù)概述 88
5.2 二值信號(hào)量使用示例 90
5.2.1 二值信號(hào)量操作相關(guān)函數(shù)詳解 90
5.2.2 示例功能和CubeMX項(xiàng)目設(shè)置 92
5.2.3 程序功能實(shí)現(xiàn) 94
5.3 計(jì)數(shù)信號(hào)量使用示例 98
5.3.1 計(jì)數(shù)信號(hào)量操作相關(guān)函數(shù)詳解 98
5.3.2 示例功能和CubeMX項(xiàng)目設(shè)置 99
5.3.3 程序功能實(shí)現(xiàn) 100
第6章 互斥量 104
6.1 優(yōu)先級(jí)翻轉(zhuǎn)問題 104
6.2 互斥量的工作原理 105
6.2.1 優(yōu)先級(jí)繼承 105
6.2.2 互斥量相關(guān)函數(shù)詳解 105
6.3 優(yōu)先級(jí)翻轉(zhuǎn)示例 106
6.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 106
6.3.2 程序功能實(shí)現(xiàn) 107
6.4 互斥量使用示例 111
6.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 111
6.4.2 程序功能實(shí)現(xiàn) 111
第7章 事件組 115
7.1 事件組的原理和功能 115
7.1.1 事件組的功能特點(diǎn) 115
7.1.2 事件組的工作原理 115
7.2 事件組相關(guān)函數(shù) 116
7.2.1 相關(guān)函數(shù)概述 116
7.2.2 部分函數(shù)詳解 117
7.3 事件組使用示例 120
7.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 120
7.3.2 程序功能實(shí)現(xiàn) 120
7.4 通過事件組進(jìn)行多任務(wù)同步 125
7.4.1 多任務(wù)同步原理 125
7.4.2 示例功能和CubeMX項(xiàng)目設(shè)置 126
7.4.3 程序功能實(shí)現(xiàn) 127
第8章 任務(wù)通知 132
8.1 任務(wù)通知的原理和功能 132
8.2 任務(wù)通知的相關(guān)函數(shù) 133
8.2.1 相關(guān)函數(shù)概述 133
8.2.2 函數(shù)詳解 134
8.3 示例一:使用任務(wù)通知傳遞數(shù)據(jù) 137
8.3.1 示例功能與CubeMX項(xiàng)目設(shè)置 137
8.3.2 程序功能實(shí)現(xiàn) 138
8.4 示例二:將任務(wù)通知用作計(jì)數(shù)信號(hào)量 141
8.4.1 示例功能 141
8.4.2 CubeMX項(xiàng)目設(shè)置 141
8.4.3 程序功能實(shí)現(xiàn) 142
第9章 流緩沖區(qū)和消息緩沖區(qū) 145
9.1 流緩沖區(qū)功能概述 145
9.2 流緩沖區(qū)操作的相關(guān)函數(shù) 146
9.2.1 相關(guān)函數(shù)概述 146
9.2.2 部分函數(shù)詳解 146
9.2.3 表示發(fā)送完成和接收完成的宏 149
9.3 流緩沖區(qū)使用示例 149
9.3.1 示例功能與CubeMX項(xiàng)目設(shè)置 149
9.3.2 程序功能實(shí)現(xiàn) 151
9.4 消息緩沖區(qū)功能概述 154
9.5 消息緩沖區(qū)操作相關(guān)函數(shù) 154
9.5.1 相關(guān)函數(shù)概述 154
9.5.2 部分函數(shù)詳解 155
9.6 消息緩沖區(qū)使用示例 157
9.6.1 示例功能與CubeMX項(xiàng)目設(shè)置 157
9.6.2 程序功能實(shí)現(xiàn) 158
第 10章 軟件定時(shí)器 162
10.1 軟件定時(shí)器概述 162
10.1.1 軟件定時(shí)器的特性 162
10.1.2 軟件定時(shí)器的相關(guān)配置 163
10.1.3 定時(shí)器服務(wù)任務(wù)的優(yōu)先級(jí) 163
10.2 軟件定時(shí)器的相關(guān)函數(shù) 164
10.2.1 相關(guān)函數(shù)概述 164
10.2.2 部分函數(shù)詳解 165
10.3 軟件定時(shí)器使用示例 169
10.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 169
10.3.2 程序功能實(shí)現(xiàn) 170
第 11章 空閑任務(wù)與低功耗 174
11.1 HAL和FreeRTOS的基礎(chǔ)時(shí)鐘 174
11.1.1 使用SysTick作為HAL的基礎(chǔ)時(shí)鐘 174
11.1.2 使用其他定時(shí)器作為HAL的基礎(chǔ)時(shí)鐘 177
11.1.3 FreeRTOS的基礎(chǔ)時(shí)鐘 179
11.2 空閑任務(wù)與低功耗處理 182
11.2.1 實(shí)現(xiàn)原理 182
11.2.2 設(shè)計(jì)示例 183
11.3 Tickless低功耗模式 186
11.3.1 Tickless模式的原理和功能 186
11.3.2 Tickless模式的使用示例 187
第二部分 FatFS管理文件系統(tǒng)
第 12章 FatFS和文件系統(tǒng) 192
12.1 FatFS概述 192
12.1.1 FatFS的作用 192
12.1.2 文件系統(tǒng)的一些基本概念 193
12.1.3 FatFS的功能特點(diǎn)和參數(shù) 194
12.1.4 FatFS的文件組成 195
12.1.5 FatFS的基本數(shù)據(jù)類型定義 196
12.2 FatFS的應(yīng)用程序接口函數(shù) 197
12.2.1 卷管理和系統(tǒng)配置相關(guān)函數(shù) 197
12.2.2 文件和目錄管理相關(guān)函數(shù) 200
12.2.3 目錄訪問相關(guān)函數(shù) 203
12.2.4 文件訪問相關(guān)函數(shù) 204
12.3 FatFS的存儲(chǔ)介質(zhì)訪問函數(shù) 208
12.4 針對(duì)SPI-Flash芯片移植FatFS 209
12.4.1 SPI-Flash芯片硬件電路 209
12.4.2 CubeMX項(xiàng)目基礎(chǔ)設(shè)置 210
12.4.3 在CubeMX中設(shè)置FatFS 210
12.4.4 項(xiàng)目中FatFS的文件組成 216
12.4.5 FatFS初始化過程 218
12.4.6 針對(duì)SPI-Flash芯片的Disk IO函數(shù)實(shí)現(xiàn) 226
12.5 在SPI-Flash芯片上使用文件系統(tǒng) 231
12.5.1 主程序功能 231
12.5.2 磁盤格式化 234
12.5.3 獲取FAT磁盤信息 234
12.5.4 掃描根目錄下的文件和子目錄 236
12.5.5 創(chuàng)建文件和目錄 237
12.5.6 讀取文本文件 239
12.5.7 讀取二進(jìn)制文件 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 常規(guī)SD卡的接口 246
13.2 SDIO接口硬件電路 247
13.2.1 STM32F407的SDIO接口 247
13.2.2 開發(fā)板上的microSD卡連接電路 248
13.3 SDIO接口和SD卡的HAL驅(qū)動(dòng)程序 249
13.3.1 SD驅(qū)動(dòng)程序概述 250
13.3.2 初始化和配置函數(shù) 251
13.3.3 讀取SD卡的參數(shù)信息 251
13.3.4 獲取SD卡的當(dāng)前狀態(tài) 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項(xiàng)目設(shè)置 257
13.4.2 主程序與SDIO接口/SD卡初始化 259
13.4.3 程序功能實(shí)現(xiàn) 260
13.5 示例二:以DMA方式讀寫SD卡 264
13.5.1 示例功能與CubeMX項(xiàng)目設(shè)置 264
13.5.2 主程序與外設(shè)初始化 265
13.5.3 程序功能實(shí)現(xiàn) 268
第 14章 用FatFS管理SD卡文件系統(tǒng) 272
14.1 SD卡文件系統(tǒng)概述 272
14.2 示例一:阻塞式訪問SD卡 272
14.2.1 示例功能與CubeMX項(xiàng)目設(shè)置 272
14.2.2 項(xiàng)目文件組成和初始代碼分析 274
14.2.3 SD卡的Disk IO函數(shù)實(shí)現(xiàn) 278
14.2.4 SD卡文件管理功能的實(shí)現(xiàn) 284
14.3 示例二:以DMA方式訪問SD卡 288
14.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 288
14.3.2 Disk IO函數(shù)實(shí)現(xiàn)代碼分析 289
14.3.3 SD卡文件管理功能的實(shí)現(xiàn) 291
第 15章 用FatFS管理U盤文件系統(tǒng) 295
15.1 USB概述 295
15.1.1 USB協(xié)議 295
15.1.2 USB設(shè)備類型 296
15.1.3 USB接口類型 296
15.2 STM32F407的USB-OTG接口 298
15.2.1 USB-OTG概述 298
15.2.2 USB-OTG FS 299
15.2.3 開發(fā)板上的USB接口電路 302
15.3 作為USB Host讀寫U盤 303
15.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 303
15.3.2 項(xiàng)目文件組成和初始代碼分析 307
15.3.3 USBH狀態(tài)變化測試 316
15.3.4 U盤文件管理功能實(shí)現(xiàn) 318
第 16章 USB-OTG用作USB MSC外設(shè) 324
16.1 開發(fā)板作為USB MSC外設(shè)的原理 324
16.2 示例一:SD卡讀卡器 326
16.2.1 示例功能和CubeMX項(xiàng)目設(shè)置 326
16.2.2 項(xiàng)目文件組成和初始代碼分析 328
16.2.3 程序功能實(shí)現(xiàn) 333
16.3 示例二:增加FatFS管理本機(jī)文件功能 336
16.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 336
16.3.2 程序功能實(shí)現(xiàn) 337
16.3.3 運(yùn)行測試 340
第 17章 在FreeRTOS中使用FatFS 341
17.1 在RTOS中使用FatFS需考慮的問題 341
17.1.1 可重入性問題 341
17.1.2 FatFS的可重入性 341
17.2 FreeRTOS中使用FatFS的示例 343
17.2.1 示例功能和CubeMX項(xiàng)目設(shè)置 343
17.2.2 項(xiàng)目文件組成和初始代碼分析 346
17.2.3 FatFS API函數(shù)的重入性實(shí)現(xiàn)原理 350
17.2.4 添加用戶功能代碼 354
第三部分 圖片的獲取與顯示
第 18章 BMP圖片 360
18.1 LCD顯示圖片的原理 360
18.1.1 像素顏色的表示 360
18.1.2 根據(jù)圖片的RGB565數(shù)據(jù)顯示圖片 360
18.2 圖片顯示示例 362
18.2.1 示例功能與CubeMX項(xiàng)目配置 362
18.2.2 程序功能實(shí)現(xiàn) 363
18.3 BMP圖片文件的格式 368
18.3.1 BMP圖片文件的數(shù)據(jù)分段 368
18.3.2 位圖文件頭 368
18.3.3 位圖信息頭 369
18.3.4 位圖數(shù)據(jù) 370
18.4 BMP圖片文件的讀寫操作示例 370
18.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 370
18.4.2 程序功能實(shí)現(xiàn) 372
18.4.3 BMP文件操作驅(qū)動(dòng)程序 377
第 19章 JPG圖片 387
19.1 JPEG和LIBJPEG 387
19.2 JPG圖片文件的讀寫操作示例 388
19.2.1 示例功能和CubeMX項(xiàng)目設(shè)置 388
19.2.2 程序功能實(shí)現(xiàn) 389
19.2.3 JPG文件操作驅(qū)動(dòng)程序 395
第 20章 電阻式觸摸屏 405
20.1 電阻式觸摸屏的工作原理 405
20.2 電阻式觸摸屏的軟硬件接口 406
20.3 示例一:輪詢方式檢測觸摸屏輸出 407
20.3.1 示例功能 407
20.3.2 CubeMX項(xiàng)目設(shè)置 407
20.3.3 主程序功能實(shí)現(xiàn) 409
20.3.4 GUI界面的創(chuàng)建與交互操作 413
20.3.5 電阻式觸摸屏驅(qū)動(dòng)程序 420
20.4 示例二:中斷方式獲取觸摸屏輸出 426
20.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 426
20.4.2 程序功能實(shí)現(xiàn) 427
第 21章 電容式觸摸屏 431
21.1 電容式觸摸屏的工作原理 431
21.2 電容式觸摸屏的軟硬件接口 431
21.2.1 電容式觸摸屏接口 431
21.2.2 電容式觸摸屏控制芯片功能 433
21.3 電容觸摸屏的使用示例 437
21.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 437
21.3.2 程序功能實(shí)現(xiàn) 438
21.3.3 電容觸摸屏驅(qū)動(dòng)程序 443
第 22章 DCMI接口和數(shù)字?jǐn)z像頭 455
22.1 數(shù)字?jǐn)z像頭 455
22.1.1 數(shù)字?jǐn)z像頭概述 455
22.1.2 OV7670圖像傳感器的功能和接口 456
22.1.3 OV7670數(shù)據(jù)輸出時(shí)序和格式 457
22.1.4 SCCB通信 458
22.1.5 OV7670的寄存器 460
22.2 DCMI接口 461
22.2.1 DCMI接口概述 461
22.2.2 DCMI接口傳輸時(shí)序 462
22.2.3 DCMI數(shù)據(jù)存儲(chǔ)格式 463
22.2.4 DCMI圖像采集方式 464
22.2.5 DCMI的中斷 465
22.3 DCMI的HAL驅(qū)動(dòng) 465
22.3.1 主要驅(qū)動(dòng)函數(shù)概述 465
22.3.2 DCMI接口初始化 466
22.3.3 DCMI的采集控制 467
22.4 DCMI和攝像頭使用示例 467
22.4.1 攝像頭模塊 467
22.4.2 開發(fā)板與攝像頭模塊的連接 468
22.4.3 示例功能與CubeMX項(xiàng)目設(shè)置 470
22.4.4 程序功能實(shí)現(xiàn) 474
附錄A CubeMX模板項(xiàng)目和公共驅(qū)動(dòng)程序的使用 487
A.1 公共驅(qū)動(dòng)程序的目錄組成 487
A.2 CubeMX模板項(xiàng)目 488
A.3 新建CubeMX項(xiàng)目后導(dǎo)入模板項(xiàng)目的配置 488
A.4 復(fù)制模板項(xiàng)目以新建CubeMX項(xiàng)目 490
A.5 在CubeIDE中設(shè)置驅(qū)動(dòng)程序搜索路徑 490
附錄B 復(fù)制一個(gè)項(xiàng)目 493
附錄C 開發(fā)板功能模塊 494
附錄D 本書示例列表 498
附錄E 縮略詞 501
參考文獻(xiàn) 503