商品描述
隨著物聯網、無人飛行器、機器人等技術與產業的飛速發展,嵌入式系統的重要性愈發凸顯。本書主要介紹ARM Cortex-M3結構的STM32F103ZET6應用開發技術。主要內容包括Cortex-M3與STM32F103ZET6的硬件架構,分層軟件架構與設計方法,以及片上外設GPIO、中斷控制器、DMA、UART、TIMER、FSMC、I2C、SPI和ADC的編程技術。本書通過引入軟件工程UML,以及綜合性項目的分析、設計案例,以綜合性項目“智慧教室”的開發技術為主線,將CPU與外設之間的程序查詢、中斷和DMA通信方式,線程(或任務)之間的同步、互斥、消息和共享變量等各種通信技術,面向對象的類圖、序列圖、狀態機的UML軟件建模方法,以及嵌入式編程中常用的一些軟件設計技巧適當地安排在項目實戰或編程舉例中,拓展讀者思維,豐富讀者工程經驗;通過分層架構、面向對象的設計思想和良好的編碼規範,提升讀者復雜工程的軟件建模、設計與開發能力。
目錄大綱
目錄
第1 章 嵌入式系統概述 1
1.1 學習目標 1
1.2 嵌入式系統的概念 1
1.3 嵌入式系統的組成 2
1.3.1 嵌入式系統的硬件組成 2
1.3.2 嵌入式系統的軟件組成 3
1.4 嵌入式系統的應用領域 4
1.5 嵌入式系統的發展 4
1.6 嵌入式系統的操作系統 5
1.6.1 嵌入式系統的操作系統分類 5
1.6.2 嵌入式系統的操作系統功能 6
1.7 常用嵌入式系統的操作系統介紹 7
1.7.1 μC/OS 7
1.7.2 VxWorks 7
1.7.3 FreeRTOS 8
1.7.4 RT-Thread 8
1.7.5 Embedded Linux 8
1.7.6 Android 9
1.7.7 LiteOS 9
1.8 習題 9
第2 章 嵌入式系統開發過程及分層架構 10
2.1 學習目標 10
2.2 嵌入式系統開發過程 10
2.3 軟件系統分層架構 11
2.3.1 為什麼需要分層 11
2.3.2 軟件系統分層的概念 13
2.4 驅動層與應用層的交互 14
2.5 裸機工程結構與分層架構設計 14
2.5.1 STM32CubeMX 生成的裸機工程目錄結構 14
2.5.2 裸機工程的啟動過程 15
2.5.3 裸機工程的分層架構設計 16
2.6 基於LiteOS 的嵌入式系統分層架構設計 17
2.7 分層架構實驗 18
2.7.1 寄存器編程 18
2.7.2 LiteOS 編程 21
2.8 習題 23
第3 章 嵌入式系統開發基礎 24
3.1 學習目標 24
3.2 CPU 與外設的通信方式 24
3.2.1 CPU 與外設的接口 25
3.2.2 外設尋址與外設寄存器變量 27
3.2.3 單個外設寄存器變量的定義 27
3.2.4 地址連續的多個外設寄存器變量定義 27
3.3 位運算 28
3.4 軟件建模語言UML 29
3.4.1 類圖 29
3.4.2 用例圖 32
3.4.3 活動圖 33
3.4.4 序列圖 34
3.4.5 狀態圖 35
3.5 LiteOS 開發基礎 36
3.5.1 LiteOS 的內核架構 36
3.5.2 LiteOS 的目錄結構 37
3.5.3 LiteOS 的啟動過程 38
3.5.4 LiteOS 任務及其創建 39
3.6 習題 41
第4 章 Cortex-M3 與STM32F103ZET6 42
4.1 學習目標 42
4.2 Cortex-M3 介紹 43
4.2.1 Cortex-M3 的架構 43
4.2.2 Cortex-M3 寄存器 43
4.2.3 Cortex-M3 的工作模式和特權級別 44
4.2.4 指令集 45
4.2.5 指令流水線 45
4.3 STM32F103ZET6 介紹 46
4.3.1 STM32F103ZET6 架構 46
4.3.2 STM32F103ZET6 時鐘 47
4.3.3 STM32F103ZET6 存儲器映射 51
4.3.4 STM32F103ZET6 引腳定義 52
4.4 習題 59
第5 章 GPIO編程 60
5.1 學習目標 60
5.2 信號類型 60
5.3 STM32F103ZET6 GPIO 特性 61
5.4 GPIO 的端口結構 61
5.5 GPIO 的工作模式 63
5.6 GPIO 的復用功能AFIO 63
5.7 GPIO 與AFIO 相關寄存器 63
5.7.1 工作方式配置寄存器GPIOx_CRL 與GPIOx_CRH 64
5.7.2 輸入數據寄存器GPIOx_IDR 65
5.7.3 輸出數據寄存器GPIOx_ODR 65
5.7.4 位置位/復位寄存器GPIOx_BSRR 66
5.7.5 位復位寄存器GPIOx_BRR 66
5.7.6 鎖定寄存器GPIOx_LCKR 67
5.7.7 事件控制寄存器AFIO_EVCR 67
5.7.8 外部中斷控制寄存器AFIO_EXTICRx 68
5.7.9 引腳映射寄存器AFIO_MAPR 69
5.7.10 GPIO 寄存器映射 72
5.8 AFIO 寄存器映射 72
5.9 GPIO 編程方法 73
5.9.1 寄存器編程方法 73
5.9.2 庫函數編程方法 74
5.10 GPIO 編程舉例 77
5.10.1 寄存器編程舉例 77
5.10.2 庫函數編程舉例 79
5.11 項目實戰——智慧教室:人走關扇熄燈 82
5.11.1 項目需求 82
5.11.2 實驗環境 82
5.11.3 人體紅外檢測傳感器的工作原理 83
5.11.4 系統分析 84
5.11.5 系統設計 85
5.11.6 LiteOS+庫函數編程 87
5.11.7 系統實現 88
5.12 習題 96
第6 章 中斷控制 97
6.1 學習目標 97
6.2 中斷的工作原理 97
6.2.1 NVIC 中斷控制器 98
6.2.2 NVIC 中斷相關寄存器 103
6.2.3 EXTI 外部中斷控制器 110
6.3 STM32F103ZET6 異常與中斷向量表 114
6.4 裸機工程默認的中斷設置 117
6.5 中斷編程方法 118
6.5.1 寄存器編程方法 118
6.5.2 庫函數編程方法 121
6.6 中斷編程舉例 128
6.6.1 寄存器編程舉例 128
6.6.2 庫函數編程舉例 129
6.7 項目實戰——按鍵報警 129
6.7.1 項目需求 129
6.7.2 實驗環境 130
6.7.3 系統分析 130
6.7.4 系統設計 131
6.7.5 系統實現 134
6.8 習題 144
第7 章 DMA 編程 146
7.1 學習目標 146
7.2 DMA 的工作原理 146
7.3 DMA 的主要特性 147
7.4 DMA 處理 148
7.4.1 通道 148
7.4.2 數據寬度與數據對齊方式 149
7.4.3 中斷 150
7.4.4 錯誤管理 150
7.4.5 DMA 的工作模式 151
7.4.6 DMA 請求的處理流程 151
7.5 DMA 寄存器 152
7.6 DMA 寄存器映射 152
7.7 DMA 的編程方法 153
7.7.1 庫函數接口 153
7.7.2 庫函數編程方法 154
7.8 DMA 編程舉例 155
7.9 習題 160
第8 章 UART 通信 161
8.1 學習目標 161
8.2 STM32F103ZET6 USART概述 161
8.3 STM32F103ZET6 UART 的特性 162
8.4 STM32F103ZET6 UART 的工作原理 162
8.5 串行通信幀格式 163
8.6 波特率的生成 164
8.7 多處理器模式 165
8.8 USART 寄存器 166
8.9 USART 寄存器映射 171
8.10 UART 編程方法 172
8.10.1 寄存器編程方法 172
8.10.2 庫函數編程方法 173
X 嵌入式系統開發與實戰
8.11 UART 編程舉例 175
8.11.1 寄存器編程舉例 175
8.11.2 庫函數編程舉例 178
8.11.3 printf()輸出重定向 184
8.12 項目實戰——智慧教室系統人機交互調試接口 184
8.12.1 項目需求 184
8.12.2 實驗環境 185
8.12.3 系統分析 185
8.12.4 系統設計 186
8.12.5 系統實現 189
8.13 習題 199
第9 章 定時器 200
9.1 學習目標 200
9.2 定時器的基本工作原理 200
9.3 計數模式 201
9.3.1 上計數 201
9.3.2 下計數 201
9.3.3 上/下計數 202
9.4 定時事件 203
9.4.1 溢出事件 203
9.4.2 更新事件 203
9.4.3 比較事件 203
9.4.4 捕獲事件 204
9.5 PWM 204
9.6 死區 204
9.7 STM32F103ZET6 的定時器類型 205
9.8 基本定時器(TIM6 和TIM7) 205
9.8.1 主要特性 206
9.8.2 計數時序與更新事件 206
9.8.3 自動重裝載值的計算 207
9.8.4 基本定時器寄存器 207
9.8.5 基本定時器寄存器映射 210
9.9 高級定時器(TIM1 和TIM8) 211
9.9.1 主要特性 211
9.9.2 重復計數器 212
9.9.3 計數時鐘源 212
9.9.4 輸入捕獲 213
9.9.5 輸出比較 214
9.9.6 生成PWM 信號 214
9.9.7 高級定時器寄存器 218
9.9.8 高級定時器寄存器映射 218
9.10 通用定時器 219
9.11 系統節拍定時器SysTick 220
9.11.1 系統節拍定時器的工作原理 220
9.11.2 系統節拍定時器寄存器 221
9.11.3 系統節拍定時器寄存器映射 222
9.11.4 裸機工程對系統節拍定時器的使用 222
9.12 看門狗定時器 223
9.12.1 獨立看門狗IWDG 223
9.12.2 窗口看門狗WWDG 225
9.13 定時器編程方法 229
9.13.1 庫函數接口 229
9.13.2 庫函數編程方法 234
9.14 定時器編程舉例 234
9.14.1 基本定時器編程舉例 234
9.14.2 高級定時器編程舉例 238
9.15 項目實戰——人體智慧檢測 243
9.15.1 項目需求 243
9.15.2 實驗環境 244
9.15.3 步進電機的工作原理與工作方式 244
9.15.4 系統分析 245
9.15.5 系統設計 247
9.15.6 系統實現 249
9.16 習題 256
第10 章 FSMC 編程 257
10.1 學習目標 257
10.2 FSMC 控制概述 257
10.3 FSMC 功能框圖 258
10.4 各類存儲器地址映射 259
10.5 NOR Flash 和PSRAM 控制器 260
10.5.1 支持的存儲器類型 260
10.5.2 讀/寫時序 260
10.6 FSMC NOR/PSRAM 控制器寄存器 261
10.7 寄存器映射 261
10.8 FSMC 編程方法 262
10.8.1 庫函數接口 262
10.8.2 庫函數編程方法 263
10.9 FSMC 編程舉例 264
10.9.1 IS62WV51216BLL芯片介紹 265
10.9.2 利用庫函數讀/寫SRAM 267
10.10 習題 272
第11 章 I2C 編程 273
11.1 學習目標 273
11.2 I2C 協議簡介 273
11.2.1 I2C 網絡 274
11.2.2 I2C 總線信號與時序 274
11.2.3 I2C 設備地址格式 275
11.2.4 I2C 數據傳送過程 276
11.3 STM32F103ZET6 I2C 的工作原理 277
11.3.1 主要特性 277
11.3.2 功能結構 277
11.3.3 工作方式 278
11.3.4 通信故障 283
11.3.5 SDA/SCL 控制 283
11.3.6 中斷 284
11.4 I2C 寄存器 284
11.5 I2C 寄存器映射 285
11.6 I2C 編程方法 285
11.6.1 庫函數接口 285
11.6.2 庫函數編程方法 287
11.7 I2C 編程舉例 288
11.7.1 AT24C02 EEPROM介紹 288
11.7.2 基於程序查詢方式 289
11.7.3 基於中斷方式 292
11.8 項目實戰——智慧教室:溫度控制 298
11.8.1 項目需求 298
11.8.2 實驗環境 298
11.8.3 AHT10 溫濕度傳感器簡介 299
11.8.4 系統分析 300
11.8.5 系統設計 301
11.8.6 系統實現 303
11.9 習題 311
第12 章 串行外設接口SPI 312
12.1 學習目標 312
12.2 SPI 的功能及主要特性 312
12.3 SPI 的工作原理 313
12.3.1 SPI 功能框圖 313
12.3.2 SPI 的工作模式 314
12.3.3 SPI 用作主設備 315
12.3.4 SPI 用作從設備 315
12.3.5 狀態標誌 315
12.3.6 DMA 傳輸 316
12.4 寄存器 316
12.5 寄存器映射 317
12.6 SPI 編程方法 317
12.6.1 庫函數接口 317
12.6.2 庫函數編程方法 318
12.7 SPI 編程舉例 319
12.8 項目實戰——智慧教室:OLED 顯示教室溫濕度 320
12.8.1 項目需求 320
12.8.2 實驗環境 320
12.8.3 OLED SSD1306 介紹 321
12.8.4 系統分析 324
12.8.5 系統設計 324
12.8.6 系統實現 325
12.9 習題 334
第13 章 模數轉換器ADC 335
13.1 學習目標 335
13.2 ADC 的主要特性 335
13.3 ADC 的功能結構與基本概念 336
13.3.1 ADC 轉換的觸發方式 337
13.3.2 模擬信號輸入通道 337
13.3.3 通道序列/通道分組 337
13.3.4 規則序列與註入序列 337
13.3.5 自動註入 338
13.3.6 序列的定義與轉換結果的保存 338
13.4 ADC 的工作方式 338
13.5 註入序列轉換的啟動方式 339
13.6 中斷和DMA 339
13.7 ADC 的時鐘與采樣時間 340
13.8 ADC 的觸發 340
13.9 數據對齊 342
13.10 校準 342
13.11 模擬看門狗 342
13.12 轉換結果 343
13.13 ADC 寄存器 343
13.14 ADC 寄存器映射 343
13.15 ADC 編程方法 344
13.15.1 庫函數接口 344
13.15.2 庫函數編程方法 346
13.16 ADC 編程舉例 346
13.16.1 使用STM32CubeMX配置ADC 347
13.16.2 使用STM32CubeMX生成代碼 349
13.16.3 電位器驅動 351
13.17 項目實踐——智慧教室:光照強度控制 353
13.17.1 項目需求 353
13.17.2 實驗環境 353
13.17.3 光照強度傳感器——光敏電阻特性 353
13.17.4 系統分析 355
13.17.5 系統設計 356
13.17.6 系統實現 359
13.18 習題 368