STM32Cube 高效開發教程 (高級篇)

王維波 鄢志丹 王釗

  • STM32Cube 高效開發教程 (高級篇)-preview-1
  • STM32Cube 高效開發教程 (高級篇)-preview-2
STM32Cube 高效開發教程 (高級篇)-preview-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 嵌入式系統開發的參考書。

作者簡介

王维波,博士、中国石油大学(华东)控制科学与工程学院教师。从事测控与仪器开发领域的教学和研究工作,主要研究方向是地球物理探测仪器开发、数据处理方法和软件开发。参与完成国家自然科学基金、山东省重点研发计划等多个科研项目,发表论文 20 余篇。著有《Qt 5.9 C++ 开发指南》和《Python Qt GUI 与数据可视化编程》。

 

鄢志丹,博士、中国石油大学(华东)控制科学与工程学院教师。从事随钻测控技术、自抗扰控制方法、井下仪器开发、微弱信号处理等方面的研究工作。主持国家自然科学基金、中国博士后科学基金、山东省自然科学基金等 10 余个科研项目,获授权发明专利 10 余项,发表论文 30 余篇。

 

王钊,博士、中国石油大学(华东)控制科学与工程学院教师。从事自动化相关的教学和研究工作,主要研究方向是非线性系统的非光滑控制研究、故障诊断、工业过程控制等。主持山东省优秀中青年科学家科研奖励基金项目 1 项,发表论文 20 余篇,作为副主编编写教材1 部。

目錄大綱

第 一部分 嵌入式操作系統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 為什麽要使用RTOS 4

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.3.2 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.3.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

3.2 任務與中斷服務例程 64

3.2.1 任務與中斷服務例程的關系 64

3.2.2 中斷屏蔽和臨界代碼段 65

3.2.3 在ISR中使用FreeRTOS API函數 66

3.2.4 中斷及其ISR設計原則 67

3.3 任務和中斷程序設計示例 67

3.3.1 示例功能和CubeMX項目設置 67

3.3.2 基本功能代碼 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.3.2 初始代碼分析 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.3.2 示例功能和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.3.2 程序功能實現 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.3.2 程序功能實現 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.3.2 程序功能實現 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.3.2 程序功能實現 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.3.2 程序功能實現 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.3.2 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芯片移植FatFS 209

12.4.1 SPI-Flash芯片硬件電路 209

12.4.2 CubeMX項目基礎設置 210

12.4.3 在CubeMX中設置FatFS 210

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

13.2 SDIO接口硬件電路 247

13.2.1 STM32F407的SDIO接口 247

13.2.2 開發板上的microSD卡連接電路 248

13.3 SDIO接口和SD卡的HAL驅動程序 249

13.3.1 SD驅動程序概述 250

13.3.2 初始化和配置函數 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.3.2 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 FS 299

15.2.3 開發板上的USB接口電路 302

15.3 作為USB Host讀寫U盤 303

15.3.1 示例功能和CubeMX項目設置 303

15.3.2 項目文件組成和初始代碼分析 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.3.2 程序功能實現 337

16.3.3 運行測試 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項目設置 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.3.2 位圖文件頭 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和LIBJPEG 387

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.3.2 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.3.2 程序功能實現 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.3.2 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