本書涵蓋了基于ARM的STM32 HAL庫的基本概念、基本原理、應用技術。硬件原理的闡述以學生"適用、易學、掌握”為原則,降低讀者入門和理解的難度。STM32的軟件設計基于HAL庫,方便讀者上手。本書在內(nèi)容組織和框架設計上具有兩個鮮明特點:全案例、基于讀者學習。從讀者學習的角度,組織每個章節(jié)的內(nèi)容體系,對STM32常用的典型外設模塊的原理及其應用設計均以若干個完整案例呈現(xiàn),同時也給出了一個完整的綜合性工程案例,這些都十分有利于學習者學習和模仿。
沈紅衛(wèi),歷任紹興文理學院自動化系副教授,紹興文理學院教務處處長(教授),現(xiàn)任紹興文理學院工學院院長。主要著作有《單片機應用系統(tǒng)設計實例與分析》、《基于單片機的智能系統(tǒng)設計與實現(xiàn)》等。
目 錄
第一篇 基于HAL + STM32CubeIDE
第1章 如何學習STM322
1.1 學習STM32必須具備的基礎知識2
1.2 STM32的基本架構和基本原理3
1.2.1 嵌入式與ARM3
1.2.2 什么是STM324
1.2.3 STM32的內(nèi)部結構5
1.2.4 STM32的時鐘樹6
1.2.5 STM32典型芯片9
1.3 STM32的開發(fā)10
1.3.1 STM32的4種開發(fā)模式10
1.3.2 HAL庫的文件結構12
1.3.3 基于HAL庫開發(fā)中必須掌握的幾個概念14
1.3.4 如何學習STM3216
1.3.5 學習STM32所需工具和平臺16
1.4 STM32的最小系統(tǒng)—學習和開發(fā)的最小平臺18
1.5 本章小結20
思考與實踐21
第2章 STM32的工程創(chuàng)建和調(diào)試22
2.1 STM32CubeMX與STM32CubeIDE22
2.1.1 什么是STM32CubeMX22
2.1.2 STM32CubeIDE與STM32CubeMX的區(qū)別22
2.2 STM32CubeIDE開發(fā)平臺的搭建23
2.2.1 IDE平臺的安裝23
2.2.2 Packs包下載與安裝26
2.3 新建工程流程29
2.4 STM32CubeIDE的功能及其基本操作37
2.4.1 工具欄介紹37
2.4.2 Debug調(diào)試模式38
2.4.3 窗口和文本設置39
2.5 本章小結41
思考與實踐41
第3章 通用輸入/輸出(GPIO)口42
3.1 STM32 GPIO口概述42
3.2 GPIO口的工作原理42
3.2.1 GPIO引腳介紹42
3.2.2 GPIO口的內(nèi)部結構43
3.2.3 GPIO口的工作模式46
3.3 GPIO口配置與應用50
3.3.1 GPIO口配置解析50
3.3.2 GPIO函數(shù)51
3.4 GPIO應用實例52
3.4.1 GPIO輸出控制52
3.4.2 單功能按鍵輸入57
3.4.3 復用功能按鍵輸入61
3.5 本章小結63
思考與實踐64
第4章 中斷65
4.1 中斷及其基本原理65
4.1.1 什么是中斷65
4.1.2 中斷系統(tǒng)66
4.1.3 中斷處理流程67
4.2 嵌套向量中斷控制器68
4.2.1 嵌套向量中斷控制器的主要功能68
4.2.2 異常和中斷69
4.2.3 EXTI71
4.3 EXTI的配置與應用73
4.3.1 EXTI配置解析73
4.3.2 EXTI函數(shù)76
4.4 EXTI應用實例76
4.4.1 EXTI控制LED翻轉76
4.4.2 EXTI嵌套LED控制83
4.5 本章小結89
思考與實踐90
第5章 串口(USART)91
5.1 串行通信91
5.1.1 嵌入式系統(tǒng)中的通信91
5.1.2 同步/異步串行通信92
5.1.3 UART93
5.2 STM32的USART95
5.2.1 USART接口95
5.2.2 5路USART的引腳關系96
5.2.3 USART的應用步驟97
5.3 串口通信配置97
5.3.1 串口設備配置解析97
5.3.2 常用的UART函數(shù)99
5.3.3 串口重定向100
5.3.4 串口調(diào)試助手101
5.4 串口應用實例102
5.4.1 串口收發(fā)輪詢方式102
5.4.2 串口收發(fā)中斷方式109
5.4.3 串口空閑中斷方式111
5.5 本章小結112
思考與實踐112
第6章 I2C和SPI113
6.1 STM32的I2C總線113
6.1.1 I2C總線概述113
6.1.2 I2C總線的工作原理和注意事項114
6.1.3 STM32的I2C總線的基本特點116
6.2 STM32的I2C總線的應用要領117
6.2.1 關于STM32的I2C模塊117
6.2.2 I2C總線死鎖的原因及其解決辦法118
6.2.3 STM32的I2C接收和發(fā)送流程118
6.3 硬件I2C與軟件I2C119
6.3.1 硬件I2C設備配置流程119
6.3.2 接口函數(shù)及其應用123
6.3.3 軟件I2C實現(xiàn)126
6.4 STM32的SPI129
6.4.1 硬件結構與時序129
6.4.2 STM32 SPI的構成131
6.4.3 STM32的SPI的主要工作流程132
6.4.4 SPI函數(shù)及其應用132
6.4.5 設備配置流程133
6.5 I2C和SPI應用實例135
6.5.1 I2C讀寫AT24C02135
6.5.2 基于SPI總線實現(xiàn)OLED顯示140
6.6 本章小結152
思考與實踐153
第7章 定時器154
7.1 STM32定時器154
7.1.1 高級定時器154
7.1.2 通用定時器155
7.1.3 基本定時器156
7.2 PWM157
7.2.1 什么是PWM157
7.2.2 PWM的主要參數(shù)157
7.2.3 PWM的工作原理157
7.2.4 PWM的應用158
7.3 定時器配置159
7.3.1 定時器模式159
7.3.2 定時器參數(shù)160
7.3.3 定時器中斷161
7.4 主要接口函數(shù)162
7.4.1 定時器啟停162
7.4.2 比較輸出162
7.4.3 PWM輸出163
7.4.4 輸入捕獲164
7.5 定時器應用實例165
7.5.1 定時器控制LED165
7.5.2 PWM呼吸燈166
7.5.3 輸入捕獲168
7.6 本章小結171
思考與實踐173
第8章 直接存儲器訪問(DMA)174
8.1 STM32的DMA174
8.1.1 什么是DMA174
8.1.2 DMA控制器的功能框圖174
8.1.3 DMA的基本原理175
8.1.4 DMA控制器的主要特點175
8.2 DMA的配置要點176
8.2.1 DMA控制器配置參數(shù)176
8.2.2 DMA的優(yōu)先級及其仲裁176
8.2.3 DMA通道177
8.2.4 DMA中斷請求178
8.2.5 DMA注意事項178
8.3 DMA配置178
8.3.1 設備配置解析178
8.3.2 配置函數(shù)解析181
8.4 DMA應用實例181
8.4.1 內(nèi)存到內(nèi)存?zhèn)鬏敺绞綉茫∕EMTOMEM)181
8.4.2 外設到內(nèi)存?zhèn)鬏敺绞綉?84
8.5 本章小結187
思考與實踐187
第9章 ADC188
9.1 STM32F1的ADC188
9.1.1 ADC及其基本特性188
9.1.2 ADC誤差來源及消除措施190
9.2 STM32外設模塊ADC的工作流程與編程要點191
9.2.1 ADC的工作流程191
9.2.2 ADC編程的要點192
9.3 ADC配置193
9.3.1 設備配置解析193
9.3.2 接口函數(shù)200
9.4 ADC應用實例203
9.4.1 單ADC單通道應用示例203
9.4.2 單ADC多通道應用示例207
9.5 本章小結211
思考與實踐211
第10章 DAC212
10.1 STM32的DAC212
10.1.1 DAC的功能、特點212
10.1.2 DAC的主要技術參數(shù)213
10.1.3 DAC配置的基本過程214
10.2 DAC配置214
10.2.1 設備配置解析214
10.2.2 接口函數(shù)217
10.3 DAC應用實例219
10.3.1 DAC輸出正弦波219
10.3.2 DAC輸出三角波221
10.4 本章小結224
思考與實踐224
第11章 Flash225
11.1 STM32的Flash存儲器及其基本特性225
11.1.1 嵌入式系統(tǒng)中的存儲器225
11.1.2 Flash模塊的組織關系226
11.1.3 STM32的Flash架構226
11.1.4 Flash的相關操作227
11.1.5 選項字節(jié)編程228
11.2 Flash配置與接口函數(shù)229
11.2.1 寫操作函數(shù)229
11.2.2 解鎖與上鎖函數(shù)230
11.2.3 Flash擦除函數(shù)230
11.2.4 讀操作231
11.2.5 選項字節(jié)相關操作函數(shù)231
11.3 Flash應用實例232
11.3.1 功能描述232
11.3.2 軟件設計232
11.3.3 實驗結果234
?
11.4 本章小結237
思考與實踐237
第12章 綜合性設計項目238
12.1 信號發(fā)生與采集238
12.1.1 項目性能和功能要求238
12.1.2 外設配置238
12.1.3 程序設計242
12.1.4 運行結果242
12.2 煙霧報警及其處置的模擬243
12.2.1 項目設計要求243
12.2.2 外圍電路設計243
12.2.3 外設配置244
12.2.4 程序設計245
12.2.5 運行結果246
12.3 串口觸摸屏設計246
12.3.1 功能描述246
12.3.2 串口觸摸屏的程序設計246
12.3.3 STM32的外設配置249
12.3.4 程序設計250
12.3.5 運行結果251
12.4 本章小結251
思考與實踐251
第二篇 基于固件庫+Keil(MDK-ARM)
第13章 基于固件庫的開發(fā)及其示例254
13.1 STM32的最小系統(tǒng)254
13.2 STM32工程模板的建立255
13.2.1 STM32的固件庫255
13.2.2 新建工程模板的第一步——復制固件庫文件259
13.2.3 新建工程模板的第二步——新建一個Keil工程260
13.2.4 關于創(chuàng)建工程模板的簡單小結266
13.3 程序的燒寫267
13.3.1 基于串口的程序下載(燒寫)方式268
13.3.2 基于JTAG(SWD)的程序下載(燒寫)方式269
13.4 程序的調(diào)試271
13.5 模板的使用273
13.6 3個GPIO輸出的范例——STM32中實現(xiàn) 延時的三種常用方法274
13.6.1 第一個LED工程——基于延時函數(shù)的延時274
13.6.2 第二個LED工程——SysTick中斷延時276
13.6.3 第三個LED工程——定時器中斷延時278
13.7 本章小結281
思考與實踐282
第14章 液晶顯示在STM32中的應用——基于固件庫283
14.1 STM32與12864液晶模塊連接的硬件接口283
14.1.1 12864液晶模塊的基本原理283
14.1.2 硬件接口284
14.2 STM32與12864液晶模塊連接的軟件 接口實現(xiàn)——查詢“忙”狀態(tài)284
14.2.1 程序設計思想284
14.2.2 程序實現(xiàn)285
14.2.3 程序演示303
14.3 本章小結304
思考與實踐304