STM32Cube 高效開發教程 (基礎篇)

STM32Cube 高效開發教程 (基礎篇)

作者: 王維波 鄢志丹 王釗
出版社: 人民郵電
出版在: 2021-09-01
ISBN-13: 9787115551771
ISBN-10: 7115551774
總頁數: 487 頁





內容描述


STM32CubeMX和STM32CubeIDE是ST公司提供的用於STM32開發的免費工具軟件,是STM32Cube生態系統的核心工具軟件。本書首先詳細介紹這兩個軟件的用法,然後以STM32F407為研究對象,採用STM32Cube開發方式介紹STM32F407各種系統功能和常用外設的編程開發,包括外設基本工作原理和接口電路、HAL驅動程序功能和使用方法,以及針對一個STM32F407開發板的完整編程示例。通過閱讀本書,讀者可以掌握STM32Cube開發方式和工具軟件的使用,掌握基於HAL庫的STM32F407系統功能和常用外設的編程開發方法。
本書適合具有C語言、微機原理或單片機基礎,想要學習STM32最新開發技術的讀者閱讀,可以作為高等院校電子、自動化、電腦、測控等專業的教材,也可作為STM32應用開發者的參考書。


目錄大綱


第 一部分 軟硬件基礎
第 1章 概述 2
1.1 STM32系列單片機 2
1.2 STM32的器件驅動庫 3
1.2.1 標準外設庫 3
1.2.2 HAL/LL庫 4
1.3 STM32Cube生態系統 4
1.3.1 嵌入式軟件 5
1.3.2 軟件工具 6
1.4 STM32Cube開發方式 8
第 2章 STM32F407和開發板 10
2.1 STM32F407簡介 10
2.1.1 功能特性 10
2.1.2 內部結構 10
2.1.3 引腳定義 13
2.1.4 小系統參考設計 14
2.2 STM32F407開發板 17
2.2.1 開發板功能 17
2.2.2 開發板基本電路 20
2.3 仿真器 23
第3章 STM32CubeMX的使用 24
3.1 安裝STM32CubeMX 24
3.2 安裝MCU固件包 25
3.2.1 軟件庫文件夾設置 25
3.2.2 管理嵌入式軟件包 26
3.2.3 MCU固件庫文件組成 28
3.3 軟件功能和基本使用 29
3.3.1 軟件界面 29
3.3.2 新建項目 32
3.3.3 MCU圖形化配置界面總覽 35
3.3.4 MCU配置 36
3.3.5 時鐘配置 41
3.3.6 項目管理 45
3.3.7 生成報告和代碼 48
3.4 項目示例:LED初始輸出 49
3.4.1 硬件電路 49
3.4.2 CubeMX項目設置 49
3.4.3 生成CubeIDE項目代碼 50
第4章 STM32CubeIDE的使用 51
4.1 安裝STM32CubeIDE 51
4.2 基本概念和MCU固件庫設置 52
4.2.1 啟動軟件 52
4.2.2 打開項目 53
4.2.3 CubeIDE的一些基本概念 55
4.2.4 STM32Cube軟件庫設置 57
4.3 C/C++場景的界面功能和操作 58
4.3.1 主要的視圖 58
4.3.2 工具欄功能 59
4.3.3 文本編輯器功能和操作 61
4.4 CubeMX生成項目的文件組成 63
4.4.1 CMSIS驅動程序文件 63
4.4.2 HAL驅動程序文件 65
4.4.3 用戶程序文件 66
4.4.4 啟動文件 71
4.4.5 根目錄下的文件 71
4.4.6 Include搜索路徑 72
4.5 項目管理、構建和下載調試 72
4.5.1 項目管理 72
4.5.2 項目構建 74
4.5.3 下載和調試 75
4.6 使用內置的CubeMX 79
4.6.1 創建項目 79
4.6.2 配置MCU和生成代碼 80
4.7 CubeIDE使用偏好設置 81
4.8 HAL庫的一些基本問題 83
4.8.1 基本數據類型 83
4.8.2 一些通用定義 83
4.8.3 獲取HAL庫幫助信息 84
第5章 STM32CubeMonitor的使用 85
5.1 STM32CubeMonitor功能簡介 85
5.2 CubeMonitor基本操作 87
5.2.1 Node-RED中的一些基本概念 87
5.2.2 設計模式界面和基本操作 88
5.2.3 程序部署和Dashboard界面 91
5.3 CubeMonitor基本功能使用示例 92
5.3.1 STM32 MCU項目 92
5.3.2 變量監測的基本操作 95
5.3.3 監測外設寄存器的值 104
5.3.4 監測變量的數值顯示 106
5.3.5 修改變量的值 110
5.4 CubeMonitor的使用小結 113
二部分 系統功能和常用外設的使用
第6章 GPIO輸入/輸出 116
6.1 GPIO功能概述 116
6.2 GPIO的HAL驅動程序 117
6.3 GPIO使用示例 120
6.3.1 示例功能和CubeMX配置 120
6.3.2 項目初始化代碼分析 122
6.3.3 編寫按鍵和LED的驅動程序 124
6.3.4 使用驅動程序實現示例功能 127
6.4 作為公共驅動程序 130
第7章 中斷系統和外部中斷 131
7.1 STM32F407的中斷 131
7.1.1 中斷向量表 131
7.1.2 中斷優先級 134
7.1.3 中斷設置相關HAL驅動程序 135
7.2 外部中斷EXTI 136
7.2.1 外部中斷功能和外部中斷線 136
7.2.2 外部中斷相關HAL函數 138
7.3 外部中斷使用示例 141
7.3.1 示例功能和CubeMX項目設置 141
7.3.2 項目初始代碼分析 142
7.3.3 編寫用戶功能代碼 145
7.3.4 中斷優先級的 146
第8章 FSMC連接TFT LCD 148
8.1 FSMC連接TFT LCD的原理 148
8.1.1 FSMC接口 148
8.1.2 TFT LCD接口 149
8.1.3 FSMC與TFT LCD的連接 150
8.2 FSMC連接LCD的電路和接口初始化 151
8.2.1 電路連接 151
8.2.2 示例功能和CubeMX項目設置 153
8.2.3 初始代碼分析 155
8.3 使用LCD驅動程序 159
8.3.1 設置搜索路徑 159
8.3.2 LCD驅動程序的改寫 161
8.3.3 LCD驅動程序的原理和功能 162
8.3.4 LCD驅動程序的使用 171
8.4 作為公共驅動程序 172
第9章 基礎定時器 174
9.1 定時器概述 174
9.2 基礎定時器內部結構和功能 175
9.3 基礎定時器HAL驅動程序 177
9.3.1 基礎定時器主要函數 177
9.3.2 其他通用操作函數 179
9.3.3 中斷處理 180
9.4 外設的中斷處理概念小結 182
9.5 基礎定時器使用示例 185
9.5.1 示例功能和CubeMX項目配置 185
9.5.2 程序功能實現 187
第 10章 通用定時器 192
10.1 通用定時器功能概述 192
10.1.1 功能概述 192
10.1.2 結構框圖 192
10.2 典型功能原理和HAL驅動 196
10.2.1 生成PWM波 196
10.2.2 輸出比較 197
10.2.3 輸入捕獲 199
10.2.4 PWM輸入模式 200
10.2.5 定時器同步 201
10.2.6 通用定時器中斷事件和回調函數 202
10.3 示例1:生成PWM波 204
10.3.1 電路原理和CubeMX項目配置 204
10.3.2 輸出固定佔空比PWM波 206
10.3.3 輸出可變佔空比PWM波 208
10.4 示例2:輸出比較 210
10.4.1 示例功能和CubeMX項目設置 210
10.4.2 程序功能實現 211
10.5 示例3:輸入PWM 213
10.5.1 示例功能和CubeMX項目設置 213
10.5.2 程序功能實現 215
第 11章 實時時鐘 220
11.1 RTC功能概述 220
11.1.1 RTC的功能 220
11.1.2 工作原理 220
11.1.3 RTC的中斷和復用引腳 223
11.1.4 RTC的HAL基礎驅動程序 224
11.2 週期喚醒和鬧鐘 227
11.2.1 週期喚醒相關HAL函數 227
11.2.2 鬧鐘相關HAL函數 229
11.2.3 示例功能和電路 230
11.2.4 CubeMX項目配置 230
11.2.5 程序功能實現 234
11.3 備份寄存器 239
11.3.1 備份寄存器的功能 239
11.3.2 示例功能與CubeMX項目設置 240
11.3.3 程序實現和運行效果 240
11.4 入侵檢測和時間戳 246
11.4.1 入侵檢測的功能 246
11.4.2 示例功能與CubeMX項目設置 247
11.4.3 程序功能實現 249
第 12章 USART/UART通信 255
12.1 USART/UART接口概述 255
12.1.1 USART/UART接口信號 255
12.1.2 開發板上的串口電路 256
12.1.3 串口通信參數 259
12.2 串口的HAL驅動程序 259
12.2.1 常用功能函數 259
12.2.2 常用的宏函數 262
12.2.3 中斷事件與回調函數 263
12.3 串口通信示例 264
12.3.1 硬件電路與示例功能 264
12.3.2 CubeMX項目設置 265
12.3.3 程序功能實現 267
12.3.4 接收不定長度數據的改進代碼 273
第 13章 DMA 276
13.1 DMA功能概述 276
13.1.1 DMA簡介 276
13.1.2 DMA傳輸屬性 277
13.2 DMA的HAL驅動程序 280
13.2.1 DMA的HAL函數概述 280
13.2.2 DMA傳輸初始化配置 280
13.2.3 啟動DMA數據傳輸 282
13.2.4 DMA的中斷 282
13.3 串口的DMA傳輸示例 284
13.3.1 示例功能與CubeMX項目設置 284
13.3.2 程序功能實現 286
第 14章 ADC 295
14.1 ADC功能概述 295
14.1.1 ADC的特性 295
14.1.2 ADC的工作原理 295
14.1.3 多重ADC模式 299
14.2 ADC的HAL驅動程序 299
14.2.1 常規通道 299
14.2.2 注入通道 303
14.2.3 多重ADC 303
14.3 示例1:軟件啟動ADC轉換 303
14.3.1 電路和示例功能 303
14.3.2 CubeMX項目設置 304
14.3.3 程序功能實現 306
14.4 示例2:定時器觸發ADC轉換 308
14.4.1 示例功能和CubeMX項目設置 308
14.4.2 程序功能實現 310
14.5 示例3:多通道和DMA傳輸 313
14.5.1 示例功能和CubeMX項目設置 313
14.5.2 程序功能實現 315
14.6 示例4:雙ADC同步轉換 319
14.6.1 示例功能與CubeMX項目設置 319
14.6.2 程序功能實現 320
第 15章 DAC 325
15.1 DAC功能概述 325
15.1.1 DAC的結構和特性 325
15.1.2 功能說明 326
15.2 DAC的HAL驅動程序 328
15.2.1 DAC驅動宏函數 328
15.2.2 DAC驅動功能函數 328
15.3 示例1:軟件觸發DAC轉換 332
15.3.1 開發板上的DAC電路 332
15.3.2 示例功能和CubeMX項目設置 332
15.3.3 程序功能實現 333
15.4 示例2:輸出三角波 335
15.4.1 示例功能和CubeMX項目設置 335
15.4.2 程序功能實現 336
15.5 示例3:使用DMA輸出自定義波形 339
15.5.1 示例功能和CubeMX項目設置 339
15.5.2 程序功能實現 340
第 16章 SPI通信 343
16.1 SPI接口和通信協議 343
16.1.1 SPI硬件接口 343
16.1.2 SPI傳輸協議 343
16.1.3 STM32F407的SPI接口 345
16.2 SPI的HAL驅動程序 346
16.2.1 SPI寄存器操作的宏函數 346
16.2.2 SPI初始化和阻塞式數據傳輸 347
16.2.3 中斷方式數據傳輸 348
16.2.4 DMA方式數據傳輸 349
16.3 Flash存儲芯片W25Q128 350
16.3.1 硬件接口和連接 350
16.3.2 存儲空間劃分 351
16.3.3 數據讀寫的原則 351
16.3.4 操作指令 351
16.3.5 狀態寄存器 353
16.4 示例1:輪詢方式讀寫W25Q128 354
16.4.1 示例功能與CubeMX項目設置 354
16.4.2 初始程序 356
16.4.3 編寫W25Q128的驅動程序 357
16.4.4 W25Q128功能 366
16.5 示例2:DMA方式讀寫W25Q128 370
16.5.1 示例功能和CubeMX項目設置 370
16.5.2 程序功能實現 371
第 17章 I2C通信 377
17.1 I2C總線和通信協議 377
17.1.1 I2C總線結構 377
17.1.2 I2C總線通信協議 378
17.1.3 STM32F407的I2C接口 378
17.2 I2C的HAL驅動程序 379
17.2.1 I2C接口的初始化 379
17.2.2 阻塞式數據傳輸 379
17.2.3 中斷方式數據傳輸 381
17.2.4 DMA方式數據傳輸 381
17.3 EEPROM芯片24C02 382
17.3.1 接口和通信協議 382
17.3.2 驅動程序設計 384
17.4 讀寫24C02示例 387
17.4.1 示例功能和CubeMX項目設置 387
17.4.2 程序功能實現 388
第 18章 CAN總線通信 392
18.1 CAN總線結構和傳輸協議 392
18.1.1 CAN總線結構 392
18.1.2 CAN總線傳輸協議 394
18.2 CAN外設工作原理和HAL驅動程序 397
18.2.1 片上CAN外設的功能概述 397
18.2.2 CAN模塊的基本控制 398
18.2.3 CAN模塊的模式 399
18.2.4 消息發送 400
18.2.5 消息接收 401
18.2.6 標識符篩選 402
18.2.7 中斷及其處理 405
18.3 開發板上的CAN接口電路 406
18.4 示例1:輪詢方式CAN通信 407
18.4.1 示例功能和CubeMX項目設置 407
18.4.2 程序功能實現 409
18.5 示例2:中斷方式CAN通信 415
18.5.1 示例功能和CubeMX項目設置 415
18.5.2 程序功能實現 415
第 19章 FSMC連接外部SRAM 422
19.1 FSMC連接外部SRAM的原理 422
19.1.1 FSMC控制區域的劃分 422
19.1.2 SRAM芯片與MCU的連接 422
19.2 訪問外部SRAM的HAL驅動程序 423
19.2.1 外部SRAM初始化與控制 423
19.2.2 外部SRAM讀寫函數 424
19.2.3 直接通過指針訪問外部SRAM 425
19.2.4 DMA方式讀寫外部SRAM 426
19.3 示例1:輪詢方式讀寫外部SRAM 427
19.3.1 示例功能和CubeMX項目設置 427
19.3.2 程序功能實現 429
19.4 示例2:DMA方式讀寫外部SRAM 435
19.4.1 示例功能和CubeMX項目設置 435
19.4.2 程序功能實現 437
第 20章 獨立看門狗 442
20.1 獨立看門狗的工作原理 442
20.2 獨立看門狗的HAL驅動程序 443
20.3 獨立看門狗使用示例 444
20.3.1 示例功能和CubeMX項目設置 444
20.3.2 程序功能實現 445
第 21章 窗口看門狗 448
21.1 窗口看門狗的工作原理 448
21.2 窗口看門狗的HAL驅動程序 450
21.3 窗口看門狗使用示例 451
21.3.1 示例功能和CubeMX項目設置 451
21.3.2 不使用EWI中斷 452
21.3.3 使用EWI中斷 454
第 22章 電源管理和低功耗模式 456
22.1 電源系統和低功耗模式 456
22.1.1 STM32F4的電源系統 456
22.1.2 STM32F4的低功耗模式 457
22.2 CubeMX的功耗計算器 458
22.2.1 PCC界面概述 458
22.2.2 步驟和序列管理 459
22.2.3 功耗分析 461
22.3 睡眠模式 462
22.3.1 睡眠模式的特點和操作 462
22.3.2 睡眠模式編程示例 464
22.4 停止模式 467
22.4.1 停止模式的特點和操作 467
22.4.2 停止模式編程示例 469
22.5 待機模式 472
22.5.1 待機模式的特點和操作 472
22.5.2 待機模式編程示例 473
附錄A CubeMX模板項目和公共驅動程序的使用 477
A.1 公共驅動程序的目錄組成 477
A.2 CubeMX模板項目 478
A.3 新建CubeMX項目後導入模板項目的配置 478
A.4 複製模板項目以新建CubeMX項目 479
A.5 在CubeIDE中設置驅動程序搜索路徑 480
附錄B 複製一個項目 482
附錄C 本書示例項目列表 483
附錄D 縮略詞 485
附參考文獻 488


作者介紹


王維波,博士、中國石油大學(華東)控制科學與工程學院教師。
從事測控與儀器開發領域的教學和研究工作,主要研究方向是地球物理探測儀器開發、數據處理方法和軟件開發。
參與完成國家自然科學基金、山東省重點研發計劃等多個科研項目,發表論文 20 餘篇。
著有《Qt 5.9 C++ 開髮指南》和《Python Qt GUI 與數據可視化編程》。

鄢志丹,博士、中國石油大學(華東)控制科學與工程學院教師。
從事隨鑽測控技術、自抗擾控制方法、井下儀器開發、微弱信號處理等方面的研究工作。
主持國家自然科學基金、中國博士後科學基金、山東省自然科學基金等 10 餘個科研項目,獲授權發明專利 10 餘項,發表論文 30 餘篇。

王釗,博士、中國石油大學(華東)控制科學與工程學院教師。
從事自動化相關的教學和研究工作,主要研究方向是非線性系統的非光滑控制研究、故障診斷、工業過程控制等。
主持山東省*秀中青年科學家科研獎勵基金項目 1 項,發表論文 20 餘篇,作為副主編編寫教材1 部。




相關書籍

微電子學《第三冊》

作者 林昀 江韶珊

2021-09-01

CMOS 電路模擬與設計: 使用 Hspice, 4/e

作者 鍾文耀 鄭美珠

2021-09-01

STM32 自學筆記, 3/e

作者 蒙博宇

2021-09-01