STM32Cube高效開發(fā)教程(基礎(chǔ)篇)
STM32CubeMX和STM32CubeIDE是ST公司提供的用于STM32開發(fā)的免費(fèi)工具軟件,是STM32Cube生態(tài)系統(tǒng)的核心工具軟件。本書首先詳細(xì)介紹這兩個(gè)軟件的用法,然后以STM32F407為研究對(duì)象,采用STM32Cube開發(fā)方式介紹STM32F407各種系統(tǒng)功能和常用外設(shè)的編程開發(fā),包括外設(shè)基本工作原理和接口電路、HAL驅(qū)動(dòng)程序功能和使用方法,以及針對(duì)一個(gè)STM32F407開發(fā)板的完整編程示例。通過閱讀本書,讀者可以掌握STM32Cube開發(fā)方式和工具軟件的使用,掌握基于HAL庫(kù)的STM32F407系統(tǒng)功能和常用外設(shè)的編程開發(fā)方法。
本書適合具有C語言、微機(jī)原理或單片機(jī)基礎(chǔ),想要學(xué)習(xí)STM32最新開發(fā)技術(shù)的讀者閱讀,可以作為高等院校電子、自動(dòng)化、計(jì)算機(jī)、測(cè)控等專業(yè)的教材,也可作為STM32應(yīng)用開發(fā)者的參考書。
1.使用STM32CubeMX和STM32CubeIDE作為開發(fā)軟件,系統(tǒng)性地介紹STM32的HAL庫(kù)開發(fā)。
2.覆蓋了STM32F4嵌入式開發(fā)的幾乎全部主題。
3.通過閱讀本書,讀者可以掌握STM32Cube開發(fā)方式和工具軟件的使用。
3.豐富的配套資源:示例源代碼、示例運(yùn)行演示視頻和課件。
王維波,博士、中國(guó)石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事測(cè)控與儀器開發(fā)領(lǐng)域的教學(xué)和研究工作,主要研究方向是地球物理探測(cè)儀器開發(fā)、數(shù)據(jù)處理方法和軟件開發(fā)。參與完成國(guó)家自然科學(xué)基金、山東省重點(diǎn)研發(fā)計(jì)劃等多個(gè)科研項(xiàng)目,發(fā)表論文 20 余篇。著有《Qt 5.9 C++ 開發(fā)指南》和《Python Qt GUI 與數(shù)據(jù)可視化編程》。
鄢志丹,博士、中國(guó)石油大學(xué)(華東)控制科學(xué)與工程學(xué)院教師。從事隨鉆測(cè)控技術(shù)、自抗擾控制方法、井下儀器開發(fā)、微弱信號(hào)處理等方面的研究工作。主持國(guó)家自然科學(xué)基金、中國(guó)博士后科學(xué)基金、山東省自然科學(xué)基金等 10 余個(gè)科研項(xiàng)目,獲授權(quán)發(fā)明專利 10 余項(xiàng),發(fā)表論文 30 余篇。
王釗,博士、中國(guó)石油大學(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 部。
第一部分 軟硬件基礎(chǔ)
第1章 概述 2
1.1 STM32系列單片機(jī) 2
1.2 STM32的器件驅(qū)動(dòng)庫(kù) 3
1.2.1 標(biāo)準(zhǔn)外設(shè)庫(kù) 3
1.2.2 HAL/LL庫(kù) 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簡(jiǎn)介 10
2.1.1 功能特性 10
2.1.2 內(nèi)部結(jié)構(gòu) 10
2.1.3 引腳定義 13
2.1.4 最小系統(tǒng)參考設(shè)計(jì) 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 軟件庫(kù)文件夾設(shè)置 25
3.2.2 管理嵌入式軟件包 26
3.2.3 MCU固件庫(kù)文件組成 28
3.3 軟件功能和基本使用 29
3.3.1 軟件界面 29
3.3.2 新建項(xiàng)目 32
3.3.3 MCU圖形化配置界面總覽 35
3.3.4 MCU配置 36
3.3.5 時(shí)鐘配置 41
3.3.6 項(xiàng)目管理 45
3.3.7 生成報(bào)告和代碼 48
3.4 項(xiàng)目示例:LED初始輸出 49
3.4.1 硬件電路 49
3.4.2 CubeMX項(xiàng)目設(shè)置 49
3.4.3 生成CubeIDE項(xiàng)目代碼 50
第4章 STM32CubeIDE的使用 51
4.1 安裝STM32CubeIDE 51
4.2 基本概念和MCU固件庫(kù)設(shè)置 52
4.2.1 啟動(dòng)軟件 52
4.2.2 打開項(xiàng)目 53
4.2.3 CubeIDE的一些基本概念 55
4.2.4 STM32Cube軟件庫(kù)設(shè)置 57
4.3 C/C++場(chǎng)景的界面功能和操作 58
4.3.1 主要的視圖 58
4.3.2 工具欄功能 59
4.3.3 文本編輯器功能和操作 61
4.4 CubeMX生成項(xiàng)目的文件組成 63
4.4.1 CMSIS驅(qū)動(dòng)程序文件 63
4.4.2 HAL驅(qū)動(dòng)程序文件 65
4.4.3 用戶程序文件 66
4.4.4 啟動(dòng)文件 71
4.4.5 根目錄下的文件 71
4.4.6 Include搜索路徑 72
4.5 項(xiàng)目管理、構(gòu)建和下載調(diào)試 72
4.5.1 項(xiàng)目管理 72
4.5.2 項(xiàng)目構(gòu)建 74
4.5.3 下載和調(diào)試 75
4.6 使用內(nèi)置的CubeMX 79
4.6.1 創(chuàng)建項(xiàng)目 79
4.6.2 配置MCU和生成代碼 80
4.7 CubeIDE使用偏好設(shè)置 81
4.8 HAL庫(kù)的一些基本問題 83
4.8.1 基本數(shù)據(jù)類型 83
4.8.2 一些通用定義 83
4.8.3 獲取HAL庫(kù)幫助信息 84
第5章 STM32CubeMonitor的使用 85
5.1 STM32CubeMonitor功能簡(jiǎn)介 85
5.2 CubeMonitor基本操作 87
5.2.1 Node-RED中的一些基本概念 87
5.2.2 設(shè)計(jì)模式界面和基本操作 88
5.2.3 程序部署和Dashboard界面 91
5.3 CubeMonitor基本功能使用示例 92
5.3.1 STM32 MCU項(xiàng)目 92
5.3.2 變量監(jiān)測(cè)的基本操作 95
5.3.3 監(jiān)測(cè)外設(shè)寄存器的值 104
5.3.4 監(jiān)測(cè)變量的數(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ū)動(dòng)程序 117
6.3 GPIO使用示例 120
6.3.1 示例功能和CubeMX配置 120
6.3.2 項(xiàng)目初始化代碼分析 122
6.3.3 編寫按鍵和LED的驅(qū)動(dòng)程序 124
6.3.4 使用驅(qū)動(dòng)程序?qū)崿F(xiàn)示例功能 127
6.4 作為公共驅(qū)動(dòng)程序 130
第7章 中斷系統(tǒng)和外部中斷 131
7.1 STM32F407的中斷 131
7.1.1 中斷向量表 131
7.1.2 中斷優(yōu)先級(jí) 134
7.1.3 中斷設(shè)置相關(guān)HAL驅(qū)動(dòng)程序 135
7.2 外部中斷EXTI 136
7.2.1 外部中斷功能和外部中斷線 136
7.2.2 外部中斷相關(guān)HAL函數(shù) 138
7.3 外部中斷使用示例 141
7.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 141
7.3.2 項(xiàng)目初始代碼分析 142
7.3.3 編寫用戶功能代碼 145
7.3.4 中斷優(yōu)先級(jí)的測(cè)試 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項(xiàng)目設(shè)置 153
8.2.3 初始代碼分析 155
8.3 使用LCD驅(qū)動(dòng)程序 159
8.3.1 設(shè)置搜索路徑 159
8.3.2 LCD驅(qū)動(dòng)程序的改寫 161
8.3.3 LCD驅(qū)動(dòng)程序的原理和功能 162
8.3.4 LCD驅(qū)動(dòng)程序的使用 171
8.4 作為公共驅(qū)動(dòng)程序 172
第9章 基礎(chǔ)定時(shí)器 174
9.1 定時(shí)器概述 174
9.2 基礎(chǔ)定時(shí)器內(nèi)部結(jié)構(gòu)和功能 175
9.3 基礎(chǔ)定時(shí)器HAL驅(qū)動(dòng)程序 177
9.3.1 基礎(chǔ)定時(shí)器主要函數(shù) 177
9.3.2 其他通用操作函數(shù) 179
9.3.3 中斷處理 180
9.4 外設(shè)的中斷處理概念小結(jié) 182
9.5 基礎(chǔ)定時(shí)器使用示例 185
9.5.1 示例功能和CubeMX項(xiàng)目配置 185
9.5.2 程序功能實(shí)現(xiàn) 187
第10章 通用定時(shí)器 192
10.1 通用定時(shí)器功能概述 192
10.1.1 功能概述 192
10.1.2 結(jié)構(gòu)框圖 192
10.2 典型功能原理和HAL驅(qū)動(dòng) 196
10.2.1 生成PWM波 196
10.2.2 輸出比較 197
10.2.3 輸入捕獲 199
10.2.4 PWM輸入模式 200
10.2.5 定時(shí)器同步 201
10.2.6 通用定時(shí)器中斷事件和回調(diào)函數(shù) 202
10.3 示例1:生成PWM波 204
10.3.1 電路原理和CubeMX項(xiàng)目配置 204
10.3.2 輸出固定占空比PWM波 206
10.3.3 輸出可變占空比PWM波 208
10.4 示例2:輸出比較 210
10.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 210
10.4.2 程序功能實(shí)現(xiàn) 211
10.5 示例3:輸入PWM 213
10.5.1 示例功能和CubeMX項(xiàng)目設(shè)置 213
10.5.2 程序功能實(shí)現(xiàn) 215
第11章 實(shí)時(shí)時(shí)鐘 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ū)動(dòng)程序 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項(xiàng)目配置 230
11.2.5 程序功能實(shí)現(xiàn) 234
11.3 備份寄存器 239
11.3.1 備份寄存器的功能 239
11.3.2 示例功能與CubeMX項(xiàng)目設(shè)置 240
11.3.3 程序?qū)崿F(xiàn)和運(yùn)行效果 240
11.4 入侵檢測(cè)和時(shí)間戳 246
11.4.1 入侵檢測(cè)的功能 246
11.4.2 示例功能與CubeMX項(xiàng)目設(shè)置 247
11.4.3 程序功能實(shí)現(xiàn) 249
第12章 USART/UART通信 255
12.1 USART/UART接口概述 255
12.1.1 USART/UART接口信號(hào) 255
12.1.2 開發(fā)板上的串口電路 256
12.1.3 串口通信參數(shù) 259
12.2 串口的HAL驅(qū)動(dòng)程序 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項(xiàng)目設(shè)置 265
12.3.3 程序功能實(shí)現(xiàn) 267
12.3.4 接收不定長(zhǎng)度數(shù)據(jù)的改進(jìn)代碼 273
第13章 DMA 276
13.1 DMA功能概述 276
13.1.1 DMA簡(jiǎn)介 276
13.1.2 DMA傳輸屬性 277
13.2 DMA的HAL驅(qū)動(dòng)程序 280
13.2.1 DMA的HAL函數(shù)概述 280
13.2.2 DMA傳輸初始化配置 280
13.2.3 啟動(dòng)DMA數(shù)據(jù)傳輸 282
13.2.4 DMA的中斷 282
13.3 串口的DMA傳輸示例 284
13.3.1 示例功能與CubeMX項(xiàng)目設(shè)置 284
13.3.2 程序功能實(shí)現(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ū)動(dòng)程序 299
14.2.1 常規(guī)通道 299
14.2.2 注入通道 303
14.2.3 多重ADC 303
14.3 示例1:軟件啟動(dòng)ADC轉(zhuǎn)換 303
14.3.1 電路和示例功能 303
14.3.2 CubeMX項(xiàng)目設(shè)置 304
14.3.3 程序功能實(shí)現(xiàn) 306
14.4 示例2:定時(shí)器觸發(fā)ADC轉(zhuǎn)換 308
14.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 308
14.4.2 程序功能實(shí)現(xiàn) 310
14.5 示例3:多通道和DMA傳輸 313
14.5.1 示例功能和CubeMX項(xiàng)目設(shè)置 313
14.5.2 程序功能實(shí)現(xiàn) 315
14.6 示例4:雙ADC同步轉(zhuǎn)換 319
14.6.1 示例功能與CubeMX項(xiàng)目設(shè)置 319
14.6.2 程序功能實(shí)現(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ū)動(dòng)程序 328
15.2.1 DAC驅(qū)動(dòng)宏函數(shù) 328
15.2.2 DAC驅(qū)動(dòng)功能函數(shù) 328
15.3 示例1:軟件觸發(fā)DAC轉(zhuǎn)換 332
15.3.1 開發(fā)板上的DAC電路 332
15.3.2 示例功能和CubeMX項(xiàng)目設(shè)置 332
15.3.3 程序功能實(shí)現(xiàn) 333
15.4 示例2:輸出三角波 335
15.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 335
15.4.2 程序功能實(shí)現(xiàn) 336
15.5 示例3:使用DMA輸出自定義波形 339
15.5.1 示例功能和CubeMX項(xiàng)目設(shè)置 339
15.5.2 程序功能實(shí)現(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ū)動(dòng)程序 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存儲(chǔ)芯片W25Q128 350
16.3.1 硬件接口和連接 350
16.3.2 存儲(chǔ)空間劃分 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項(xiàng)目設(shè)置 354
16.4.2 初始程序 356
16.4.3 編寫W25Q128的驅(qū)動(dòng)程序 357
16.4.4 W25Q128功能測(cè)試 366
16.5 示例2:DMA方式讀寫W25Q128 370
16.5.1 示例功能和CubeMX項(xiàng)目設(shè)置 370
16.5.2 程序功能實(shí)現(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ū)動(dòng)程序 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ū)動(dòng)程序設(shè)計(jì) 384
17.4 讀寫24C02示例 387
17.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 387
17.4.2 程序功能實(shí)現(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ū)動(dòng)程序 397
18.2.1 片上CAN外設(shè)的功能概述 397
18.2.2 CAN模塊的基本控制 398
18.2.3 CAN模塊的測(cè)試模式 399
18.2.4 消息發(fā)送 400
18.2.5 消息接收 401
18.2.6 標(biāo)識(shí)符篩選 402
18.2.7 中斷及其處理 405
18.3 開發(fā)板上的CAN接口電路 406
18.4 示例1:輪詢方式CAN通信 407
18.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 407
18.4.2 程序功能實(shí)現(xiàn) 409
18.5 示例2:中斷方式CAN通信 415
18.5.1 示例功能和CubeMX項(xiàng)目設(shè)置 415
18.5.2 程序功能實(shí)現(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ū)動(dòng)程序 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項(xiàng)目設(shè)置 427
19.3.2 程序功能實(shí)現(xiàn) 429
19.4 示例2:DMA方式讀寫外部SRAM 435
19.4.1 示例功能和CubeMX項(xiàng)目設(shè)置 435
19.4.2 程序功能實(shí)現(xiàn) 437
第20章 獨(dú)立看門狗 442
20.1 獨(dú)立看門狗的工作原理 442
20.2 獨(dú)立看門狗的HAL驅(qū)動(dòng)程序 443
20.3 獨(dú)立看門狗使用示例 444
20.3.1 示例功能和CubeMX項(xiàng)目設(shè)置 444
20.3.2 程序功能實(shí)現(xiàn) 445
第21章 窗口看門狗 448
21.1 窗口看門狗的工作原理 448
21.2 窗口看門狗的HAL驅(qū)動(dòng)程序 450
21.3 窗口看門狗使用示例 451
21.3.1 示例功能和CubeMX項(xiàng)目設(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的功耗計(jì)算器 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模板項(xiàng)目和公共驅(qū)動(dòng)程序的使用 477
A.1 公共驅(qū)動(dòng)程序的目錄組成 477
A.2 CubeMX模板項(xiàng)目 478
A.3 新建CubeMX項(xiàng)目后導(dǎo)入模板項(xiàng)目的配置 478
A.4 復(fù)制模板項(xiàng)目以新建CubeMX項(xiàng)目 479
A.5 在CubeIDE中設(shè)置驅(qū)動(dòng)程序搜索路徑 480
附錄B 復(fù)制一個(gè)項(xiàng)目 482
附錄C 本書示例項(xiàng)目列表 483
附錄D 縮略詞 485
附參考文獻(xiàn) 488