STM32Cube高效開發(fā)教程(基礎(chǔ)篇)
STM32CubeMX和STM32CubeIDE是ST公司提供的用于STM32開發(fā)的免費(fèi)工具軟件,是STM32Cube生態(tài)系統(tǒng)的核心工具軟件。本書首先詳細(xì)介紹這兩個軟件的用法,然后以STM32F407為研究對象,采用STM32Cube開發(fā)方式介紹STM32F407各種系統(tǒng)功能和常用外設(shè)的編程開發(fā),包括外設(shè)基本工作原理和接口電路、HAL驅(qū)動程序功能和使用方法,以及針對一個STM32F407開發(fā)板的完整編程示例。通過閱讀本書,讀者可以掌握STM32Cube開發(fā)方式和工具軟件的使用,掌握基于HAL庫的STM32F407系統(tǒng)功能和常用外設(shè)的編程開發(fā)方法。
本書適合具有C語言、微機(jī)原理或單片機(jī)基礎(chǔ),想要學(xué)習(xí)STM32最新開發(fā)技術(shù)的讀者閱讀,可以作為高等院校電子、自動化、計算機(jī)、測控等專業(yè)的教材,也可作為STM32應(yīng)用開發(fā)者的參考書。
1.使用STM32CubeMX和STM32CubeIDE作為開發(fā)軟件,系統(tǒng)性地介紹STM32的HAL庫開發(fā)。
2.覆蓋了STM32F4嵌入式開發(fā)的幾乎全部主題。
3.通過閱讀本書,讀者可以掌握STM32Cube開發(fā)方式和工具軟件的使用。
3.豐富的配套資源:示例源代碼、示例運(yùn)行演示視頻和課件。
王維波,博士、中國石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事測控與儀器開發(fā)領(lǐng)域的教學(xué)和研究工作,主要研究方向是地球物理探測儀器開發(fā)、數(shù)據(jù)處理方法和軟件開發(fā)。參與完成國家自然科學(xué)基金、山東省重點(diǎn)研發(fā)計劃等多個科研項目,發(fā)表論文 20 余篇。著有《Qt 5.9 C++ 開發(fā)指南》和《Python Qt GUI 與數(shù)據(jù)可視化編程》。
鄢志丹,博士、中國石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事隨鉆測控技術(shù)、自抗擾控制方法、井下儀器開發(fā)、微弱信號處理等方面的研究工作。主持國家自然科學(xué)基金、中國博士后科學(xué)基金、山東省自然科學(xué)基金等 10 余個科研項目,獲授權(quán)發(fā)明專利 10 余項,發(fā)表論文 30 余篇。
王釗,博士、中國石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事自動化相關(guān)的教學(xué)和研究工作,主要研究方向是非線性系統(tǒng)的非光滑控制研究、故障診斷、工業(yè)過程控制等。主持山東省優(yōu)秀中青年科學(xué)家科研獎勵基金項目 1 項,發(fā)表論文 20 余篇,作為副主編編寫教材1 部。
第一部分 軟硬件基礎(chǔ)
第1章 概述 2
1.1 STM32系列單片機(jī) 2
1.2 STM32的器件驅(qū)動庫 3
1.2.1 標(biāo)準(zhǔn)外設(shè)庫 3
1.2.2 HAL/LL庫 4
1.3 STM32Cube生態(tài)系統(tǒng) 4
1.3.1 嵌入式軟件 5
1.3.2 軟件工具 6
1.4 STM32Cube開發(fā)方式 8
第2章 STM32F407和開發(fā)板 10
2.1 STM32F407簡介 10
2.1.1 功能特性 10
2.1.2 內(nèi)部結(jié)構(gòu) 10
2.1.3 引腳定義 13
2.1.4 最小系統(tǒng)參考設(shè)計 14
2.2 STM32F407開發(fā)板 17
2.2.1 開發(fā)板功能 17
2.2.2 開發(fā)板基本電路 20
2.3 仿真器 23
第3章 STM32CubeMX的使用 24
3.1 安裝STM32CubeMX 24
3.2 安裝MCU固件包 25
3.2.1 軟件庫文件夾設(shè)置 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項目設(shè)置 49
3.4.3 生成CubeIDE項目代碼 50
第4章 STM32CubeIDE的使用 51
4.1 安裝STM32CubeIDE 51
4.2 基本概念和MCU固件庫設(shè)置 52
4.2.1 啟動軟件 52
4.2.2 打開項目 53
4.2.3 CubeIDE的一些基本概念 55
4.2.4 STM32Cube軟件庫設(shè)置 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驅(qū)動程序文件 63
4.4.2 HAL驅(qū)動程序文件 65
4.4.3 用戶程序文件 66
4.4.4 啟動文件 71
4.4.5 根目錄下的文件 71
4.4.6 Include搜索路徑 72
4.5 項目管理、構(gòu)建和下載調(diào)試 72
4.5.1 項目管理 72
4.5.2 項目構(gòu)建 74
4.5.3 下載和調(diào)試 75
4.6 使用內(nèi)置的CubeMX 79
4.6.1 創(chuàng)建項目 79
4.6.2 配置MCU和生成代碼 80
4.7 CubeIDE使用偏好設(shè)置 81
4.8 HAL庫的一些基本問題 83
4.8.1 基本數(shù)據(jù)類型 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 設(shè)計模式界面和基本操作 88
5.2.3 程序部署和Dashboard界面 91
5.3 CubeMonitor基本功能使用示例 92
5.3.1 STM32 MCU項目 92
5.3.2 變量監(jiān)測的基本操作 95
5.3.3 監(jiān)測外設(shè)寄存器的值 104
5.3.4 監(jiān)測變量的數(shù)值顯示 106
5.3.5 修改變量的值 110
5.4 CubeMonitor的使用小結(jié) 113
第二部分 系統(tǒng)功能和常用外設(shè)的使用
第6章 GPIO輸入/輸出 116
6.1 GPIO功能概述 116
6.2 GPIO的HAL驅(qū)動程序 117
6.3 GPIO使用示例 120
6.3.1 示例功能和CubeMX配置 120
6.3.2 項目初始化代碼分析 122
6.3.3 編寫按鍵和LED的驅(qū)動程序 124
6.3.4 使用驅(qū)動程序?qū)崿F(xiàn)示例功能 127
6.4 作為公共驅(qū)動程序 130
第7章 中斷系統(tǒng)和外部中斷 131
7.1 STM32F407的中斷 131
7.1.1 中斷向量表 131
7.1.2 中斷優(yōu)先級 134
7.1.3 中斷設(shè)置相關(guān)HAL驅(qū)動程序 135
7.2 外部中斷EXTI 136
7.2.1 外部中斷功能和外部中斷線 136
7.2.2 外部中斷相關(guān)HAL函數(shù) 138
7.3 外部中斷使用示例 141
7.3.1 示例功能和CubeMX項目設(shè)置 141
7.3.2 項目初始代碼分析 142
7.3.3 編寫用戶功能代碼 145
7.3.4 中斷優(yōu)先級的測試 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項目設(shè)置 153
8.2.3 初始代碼分析 155
8.3 使用LCD驅(qū)動程序 159
8.3.1 設(shè)置搜索路徑 159
8.3.2 LCD驅(qū)動程序的改寫 161
8.3.3 LCD驅(qū)動程序的原理和功能 162
8.3.4 LCD驅(qū)動程序的使用 171
8.4 作為公共驅(qū)動程序 172
第9章 基礎(chǔ)定時器 174
9.1 定時器概述 174
9.2 基礎(chǔ)定時器內(nèi)部結(jié)構(gòu)和功能 175
9.3 基礎(chǔ)定時器HAL驅(qū)動程序 177
9.3.1 基礎(chǔ)定時器主要函數(shù) 177
9.3.2 其他通用操作函數(shù) 179
9.3.3 中斷處理 180
9.4 外設(shè)的中斷處理概念小結(jié) 182
9.5 基礎(chǔ)定時器使用示例 185
9.5.1 示例功能和CubeMX項目配置 185
9.5.2 程序功能實現(xiàn) 187
第10章 通用定時器 192
10.1 通用定時器功能概述 192
10.1.1 功能概述 192
10.1.2 結(jié)構(gòu)框圖 192
10.2 典型功能原理和HAL驅(qū)動 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 通用定時器中斷事件和回調(diào)函數(shù) 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項目設(shè)置 210
10.4.2 程序功能實現(xiàn) 211
10.5 示例3:輸入PWM 213
10.5.1 示例功能和CubeMX項目設(shè)置 213
10.5.2 程序功能實現(xiàn) 215
第11章 實時時鐘 220
11.1 RTC功能概述 220
11.1.1 RTC的功能 220
11.1.2 工作原理 220
11.1.3 RTC的中斷和復(fù)用引腳 223
11.1.4 RTC的HAL基礎(chǔ)驅(qū)動程序 224
11.2 周期喚醒和鬧鐘 227
11.2.1 周期喚醒相關(guān)HAL函數(shù) 227
11.2.2 鬧鐘相關(guān)HAL函數(shù) 229
11.2.3 示例功能和電路 230
11.2.4 CubeMX項目配置 230
11.2.5 程序功能實現(xiàn) 234
11.3 備份寄存器 239
11.3.1 備份寄存器的功能 239
11.3.2 示例功能與CubeMX項目設(shè)置 240
11.3.3 程序?qū)崿F(xiàn)和運(yùn)行效果 240
11.4 入侵檢測和時間戳 246
11.4.1 入侵檢測的功能 246
11.4.2 示例功能與CubeMX項目設(shè)置 247
11.4.3 程序功能實現(xiàn) 249
第12章 USART/UART通信 255
12.1 USART/UART接口概述 255
12.1.1 USART/UART接口信號 255
12.1.2 開發(fā)板上的串口電路 256
12.1.3 串口通信參數(shù) 259
12.2 串口的HAL驅(qū)動程序 259
12.2.1 常用功能函數(shù) 259
12.2.2 常用的宏函數(shù) 262
12.2.3 中斷事件與回調(diào)函數(shù) 263
12.3 串口通信示例 264
12.3.1 硬件電路與示例功能 264
12.3.2 CubeMX項目設(shè)置 265
12.3.3 程序功能實現(xiàn) 267
12.3.4 接收不定長度數(shù)據(jù)的改進(jìn)代碼 273
第13章 DMA 276
13.1 DMA功能概述 276
13.1.1 DMA簡介 276
13.1.2 DMA傳輸屬性 277
13.2 DMA的HAL驅(qū)動程序 280
13.2.1 DMA的HAL函數(shù)概述 280
13.2.2 DMA傳輸初始化配置 280
13.2.3 啟動DMA數(shù)據(jù)傳輸 282
13.2.4 DMA的中斷 282
13.3 串口的DMA傳輸示例 284
13.3.1 示例功能與CubeMX項目設(shè)置 284
13.3.2 程序功能實現(xiàn) 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驅(qū)動程序 299
14.2.1 常規(guī)通道 299
14.2.2 注入通道 303
14.2.3 多重ADC 303
14.3 示例1:軟件啟動ADC轉(zhuǎn)換 303
14.3.1 電路和示例功能 303
14.3.2 CubeMX項目設(shè)置 304
14.3.3 程序功能實現(xiàn) 306
14.4 示例2:定時器觸發(fā)ADC轉(zhuǎn)換 308
14.4.1 示例功能和CubeMX項目設(shè)置 308
14.4.2 程序功能實現(xiàn) 310
14.5 示例3:多通道和DMA傳輸 313
14.5.1 示例功能和CubeMX項目設(shè)置 313
14.5.2 程序功能實現(xiàn) 315
14.6 示例4:雙ADC同步轉(zhuǎn)換 319
14.6.1 示例功能與CubeMX項目設(shè)置 319
14.6.2 程序功能實現(xiàn) 320
第15章 DAC 325
15.1 DAC功能概述 325
15.1.1 DAC的結(jié)構(gòu)和特性 325
15.1.2 功能說明 326
15.2 DAC的HAL驅(qū)動程序 328
15.2.1 DAC驅(qū)動宏函數(shù) 328
15.2.2 DAC驅(qū)動功能函數(shù) 328
15.3 示例1:軟件觸發(fā)DAC轉(zhuǎn)換 332
15.3.1 開發(fā)板上的DAC電路 332
15.3.2 示例功能和CubeMX項目設(shè)置 332
15.3.3 程序功能實現(xiàn) 333
15.4 示例2:輸出三角波 335
15.4.1 示例功能和CubeMX項目設(shè)置 335
15.4.2 程序功能實現(xiàn) 336
15.5 示例3:使用DMA輸出自定義波形 339
15.5.1 示例功能和CubeMX項目設(shè)置 339
15.5.2 程序功能實現(xiàn) 340
第16章 SPI通信 343
16.1 SPI接口和通信協(xié)議 343
16.1.1 SPI硬件接口 343
16.1.2 SPI傳輸協(xié)議 343
16.1.3 STM32F407的SPI接口 345
16.2 SPI的HAL驅(qū)動程序 346
16.2.1 SPI寄存器操作的宏函數(shù) 346
16.2.2 SPI初始化和阻塞式數(shù)據(jù)傳輸 347
16.2.3 中斷方式數(shù)據(jù)傳輸 348
16.2.4 DMA方式數(shù)據(jù)傳輸 349
16.3 Flash存儲芯片W25Q128 350
16.3.1 硬件接口和連接 350
16.3.2 存儲空間劃分 351
16.3.3 數(shù)據(jù)讀寫的原則 351
16.3.4 操作指令 351
16.3.5 狀態(tài)寄存器 353
16.4 示例1:輪詢方式讀寫W25Q128 354
16.4.1 示例功能與CubeMX項目設(shè)置 354
16.4.2 初始程序 356
16.4.3 編寫W25Q128的驅(qū)動程序 357
16.4.4 W25Q128功能測試 366
16.5 示例2:DMA方式讀寫W25Q128 370
16.5.1 示例功能和CubeMX項目設(shè)置 370
16.5.2 程序功能實現(xiàn) 371
第17章 I2C通信 377
17.1 I2C總線和通信協(xié)議 377
17.1.1 I2C總線結(jié)構(gòu) 377
17.1.2 I2C總線通信協(xié)議 378
17.1.3 STM32F407的I2C接口 378
17.2 I2C的HAL驅(qū)動程序 379
17.2.1 I2C接口的初始化 379
17.2.2 阻塞式數(shù)據(jù)傳輸 379
17.2.3 中斷方式數(shù)據(jù)傳輸 381
17.2.4 DMA方式數(shù)據(jù)傳輸 381
17.3 EEPROM芯片24C02 382
17.3.1 接口和通信協(xié)議 382
17.3.2 驅(qū)動程序設(shè)計 384
17.4 讀寫24C02示例 387
17.4.1 示例功能和CubeMX項目設(shè)置 387
17.4.2 程序功能實現(xiàn) 388
第18章 CAN總線通信 392
18.1 CAN總線結(jié)構(gòu)和傳輸協(xié)議 392
18.1.1 CAN總線結(jié)構(gòu) 392
18.1.2 CAN總線傳輸協(xié)議 394
18.2 CAN外設(shè)工作原理和HAL驅(qū)動程序 397
18.2.1 片上CAN外設(shè)的功能概述 397
18.2.2 CAN模塊的基本控制 398
18.2.3 CAN模塊的測試模式 399
18.2.4 消息發(fā)送 400
18.2.5 消息接收 401
18.2.6 標(biāo)識符篩選 402
18.2.7 中斷及其處理 405
18.3 開發(fā)板上的CAN接口電路 406
18.4 示例1:輪詢方式CAN通信 407
18.4.1 示例功能和CubeMX項目設(shè)置 407
18.4.2 程序功能實現(xiàn) 409
18.5 示例2:中斷方式CAN通信 415
18.5.1 示例功能和CubeMX項目設(shè)置 415
18.5.2 程序功能實現(xiàn) 415
第19章 FSMC連接外部SRAM 422
19.1 FSMC連接外部SRAM的原理 422
19.1.1 FSMC控制區(qū)域的劃分 422
19.1.2 SRAM芯片與MCU的連接 422
19.2 訪問外部SRAM的HAL驅(qū)動程序 423
19.2.1 外部SRAM初始化與控制 423
19.2.2 外部SRAM讀寫函數(shù) 424
19.2.3 直接通過指針訪問外部SRAM 425
19.2.4 DMA方式讀寫外部SRAM 426
19.3 示例1:輪詢方式讀寫外部SRAM 427
19.3.1 示例功能和CubeMX項目設(shè)置 427
19.3.2 程序功能實現(xiàn) 429
19.4 示例2:DMA方式讀寫外部SRAM 435
19.4.1 示例功能和CubeMX項目設(shè)置 435
19.4.2 程序功能實現(xiàn) 437
第20章 獨(dú)立看門狗 442
20.1 獨(dú)立看門狗的工作原理 442
20.2 獨(dú)立看門狗的HAL驅(qū)動程序 443
20.3 獨(dú)立看門狗使用示例 444
20.3.1 示例功能和CubeMX項目設(shè)置 444
20.3.2 程序功能實現(xiàn) 445
第21章 窗口看門狗 448
21.1 窗口看門狗的工作原理 448
21.2 窗口看門狗的HAL驅(qū)動程序 450
21.3 窗口看門狗使用示例 451
21.3.1 示例功能和CubeMX項目設(shè)置 451
21.3.2 不使用EWI中斷 452
21.3.3 使用EWI中斷 454
第22章 電源管理和低功耗模式 456
22.1 電源系統(tǒng)和低功耗模式 456
22.1.1 STM32F4的電源系統(tǒng) 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 睡眠模式的特點(diǎn)和操作 462
22.3.2 睡眠模式編程示例 464
22.4 停止模式 467
22.4.1 停止模式的特點(diǎn)和操作 467
22.4.2 停止模式編程示例 469
22.5 待機(jī)模式 472
22.5.1 待機(jī)模式的特點(diǎn)和操作 472
22.5.2 待機(jī)模式編程示例 473
附錄A CubeMX模板項目和公共驅(qū)動程序的使用 477
A.1 公共驅(qū)動程序的目錄組成 477
A.2 CubeMX模板項目 478
A.3 新建CubeMX項目后導(dǎo)入模板項目的配置 478
A.4 復(fù)制模板項目以新建CubeMX項目 479
A.5 在CubeIDE中設(shè)置驅(qū)動程序搜索路徑 480
附錄B 復(fù)制一個項目 482
附錄C 本書示例項目列表 483
附錄D 縮略詞 485
附參考文獻(xiàn) 488