本書主要以基于ARM Cortex-M3內核的STM32F10xxx系列處理器為載體,介紹嵌入式系統(tǒng)的硬件結構與編程方法。全書共13章,包括嵌入式系統(tǒng)組成原理、ARM Cortex處理器內核結構、集成開發(fā)環(huán)境、STM32系列處理器時鐘系統(tǒng)、GPIO接口及其應用、異常與中斷、定時/計數器、A/D轉換器、D/A轉換器、USART串口通信、SPI通信接口、I2C總線接口和DMA控制器等內容。本書選取當前最為常用的Keil MDK集成開發(fā)環(huán)境介紹編程與軟件調試的方法;針對與硬件內容相關的各章,配置了若干工程實例,讀者可登錄出版社網站下載這些工程實例進行實驗。
本書適合作為普通高等學校計算機、通信、電子信息、自動化及測控技術與儀器等專業(yè)嵌入式系統(tǒng)基礎等課程的教材,也可作為從事嵌入式系統(tǒng)開發(fā)工作的工程技術人員的參考書。
隨著計算機技術的快速發(fā)展,嵌入式計算機系統(tǒng)的應用已逐漸遍布于工農業(yè)生產的各個領域,對社會的進步與發(fā)展起到了巨大的推動作用。伴隨著新型工業(yè)化、智能制造、人工智能及大數據等技術的快速發(fā)展,作為支撐這些先進技術發(fā)展的計算機信息技術受到了國家和社會的高度重視。
嵌入式計算機技術是計算機技術的重要分支,是計算機信息技術、測控技術高度發(fā)展的必然產物,是實現(xiàn)生產自動化、產品智能化、服務信息化的關鍵。目前,我國對嵌入式技術人才的需求旺盛,為此許多高等學校在計算機、通信、電子信息、自動化及測控技術與儀器等相關專業(yè)開設了嵌入式系統(tǒng)基礎等課程。為進一步推進嵌入式技術的教學,我們在充分吸收現(xiàn)有教材與教學經驗的基礎上編寫了本書。本書具有以下特點:
(1) 知識體系體現(xiàn)先進性。本書緊密結合嵌入式計算機系統(tǒng)發(fā)展的最新成果,選取了當前嵌入式處理器中應用廣泛、技術先進的基于ARM Cortex-M3內核的STM32F10xxx系列處理器,重點介紹嵌入式系統(tǒng)的硬件結構和工作原理;同時選取了當前最為常用的Keil MDK集成開發(fā)環(huán)境介紹編程與軟件調試的方法,還介紹了最新的Keil μVision開發(fā)工具的使用,以緊跟當前的技術潮流。
(2) 充分考慮相關專業(yè)的教學需求,突出實用性和應用性。嵌入式系統(tǒng)基礎課程目前針對的主要對象并非計算機專業(yè)的學生,而是電子信息、通信、自動化及測控技術等專業(yè)的學生。這些專業(yè)的學生通常不具有操作系統(tǒng)、編譯原理等計算機基礎知識,編程語言基礎也較為薄弱,這為開展嵌入式系統(tǒng)基礎課程的教學帶來了很多的困難;谶@樣的實際情況,結合以往的教學經驗,面向廣大非計算機專業(yè)的學生,選取結構先進、功能強大、性價比高的基于ARM Cortex-M3內核的STM32F10xxx系列處理器作為嵌入式系統(tǒng)的硬件教學內容,并在此硬件基礎上進行無需操作系統(tǒng)支持的軟件開發(fā)設計,是較為適合“嵌入式系統(tǒng)基礎”教學的一種選擇。
(3) 注重理論和實踐相結合,突出實踐,以激發(fā)讀者的學習興趣,提高學習效果。除前面幾章基礎內容外,本書其余各章均以理論和實踐相結合的方式進行內容設計,即先介紹相關的基本軟硬件的原理及方法,然后通過工程實例具體說明相關軟硬件的使用方法,讀者可登錄出版社網站下載這些工程實例進行實驗。
本書第1~9章由韓黨群編寫,第10~13章由琚曉濤編寫。
由于編著者水平有限,書中難免存在不妥之處,敬請各位讀者批評指正。
編著者
2021年7月
第1章 嵌入式系統(tǒng)組成原理 1
1.1 嵌入式系統(tǒng) 1
1.1.1 嵌入式系統(tǒng)概述 1
1.1.2 嵌入式系統(tǒng)的特點 3
1.1.3 嵌入式處理器 4
1.2 嵌入式系統(tǒng)的硬件結構原理 5
1.2.1 嵌入式系統(tǒng)的硬件組成 5
1.2.2 嵌入式處理器內核及其指標 7
1.2.3 嵌入式系統(tǒng)的存儲器 9
1.2.4 嵌入式系統(tǒng)的外部設備 14
1.3 嵌入式系統(tǒng)軟件及其開發(fā) 16
1.3.1 嵌入式系統(tǒng)軟件 16
1.3.2 嵌入式系統(tǒng)軟件開發(fā) 16
思考題與習題1 17
第2章 ARM Cortex處理器內核結構 18
2.1 ARM處理器概述 18
2.1.1 ARM公司簡介 18
2.1.2 ARM內核架構與產品系列 18
2.1.3 ARM處理器內核的設計特點 19
2.1.4 經典ARM系列的主要特征 21
2.1.5 Cortex系列簡介 22
2.1.6 ARM處理器的應用領域及
特點 22
2.2 Cortex-M3內核結構 23
2.2.1 Cortex-M3內核結構 23
2.2.2 Cortex-M3的存儲器組織結構 25
2.2.3 Cortex-M3位帶區(qū)的映射 26
2.2.4 Cortex-M3私有外設的映射 28
2.2.5 Cortex-M3片上外設映射區(qū) 29
2.3 STM32F10xxx系列處理器概述 29
2.3.1 STM32F10xxx系列處理器 29
2.3.2 STM32F10xxx系列處理器
架構 31
2.3.3 STM32F10xxx系列處理器的
片內存儲器 35
2.3.4 STM32F10xxx系列處理器
片內外設 35
2.3.5 STM32F10xxx系列處理器
片外存儲器和外設 38
2.4 STM32F10xxx最小系統(tǒng) 39
2.4.1 STM32F10xxx處理器芯片與
引腳 39
2.4.2 STM32F10xxx系列芯片
時鐘源 45
2.4.3 STM32F10xxx系列處理器的
復位與啟動模式 45
2.4.4 STM32F10xxx系列最小系統(tǒng) 46
思考題與習題2 47
第3章 集成開發(fā)環(huán)境 48
3.1 Keil μVision 4集成開發(fā)環(huán)境 48
3.1.1 Cortex-M3集成開發(fā)環(huán)境概述 48
3.1.2 Keil μVision 4集成開發(fā)環(huán)境 49
3.1.3 工程項目的創(chuàng)建 51
3.1.4 工程項目的配置 56
3.2 STM32標準外設庫簡介 60
3.2.1 STM32標準外設庫結構 60
3.2.2 重要庫文件介紹 60
3.2.3 工程模板的應用 62
3.3 Keil μVision 5集成開發(fā)環(huán)境 62
3.3.1 Keil μVision 5概述 63
3.3.2 Keil μVision 5集成開發(fā)環(huán)境 63
3.3.3 在Keil μVision 5環(huán)境中
新建工程 65
思考題與習題3 71
第4章 STM32系列處理器時鐘系統(tǒng) 72
4.1 STM32系列處理器時鐘系統(tǒng) 72
4.1.1 STM32F10xxx系列處理器時鐘
系統(tǒng)結構 72
4.1.2 內部主要時鐘信號 74
4.2 復位與時鐘控制(RCC)寄存器 76
4.2.1 RCC寄存器簡介 76
4.2.2 RCC寄存器的定義 84
4.2.3 RCC寄存器操作函數 86
思考題與習題4 94
第5章 GPIO接口及其應用 95
5.1 GPIO基礎 95
5.1.1 GPIO的基本結構 95
5.1.2 GPIO的工作模式 96
5.1.3 GPIO的相關寄存器 99
5.2 GPIO庫函數 103
5.2.1 GPIO相關寄存器的定義 103
5.2.2 GPIO庫函數 104
5.3 GPIO編程應用 108
5.3.1 GPIO測試電路 109
5.3.2 GPIO庫函數編程 109
5.3.3 GPIO寄存器編程 114
5.4 實驗開發(fā)環(huán)境 119
5.4.1 實驗開發(fā)環(huán)境概述 119
5.4.2 實驗開發(fā)板的選擇 120
5.4.3 仿真調試設備的選擇 122
5.5 用仿真器實現(xiàn)程序下載 126
5.5.1 J-LINK仿真器的配置 126
5.5.2 用J-LINK仿真器實現(xiàn)程序下載 132
5.5.3 ST-LINK v2仿真器的應用 134
5.6 其他程序的下載方法 135
5.6.1 搭建串口下載電路 136
5.6.2 安裝虛擬串口驅動程序 137
5.6.3 應用串口下載軟件實現(xiàn)程序下載 137
5.7 程序仿真基礎 144
5.7.1 軟件仿真 144
5.7.2 硬件仿真 151
思考題與習題5 154
第6章 異常與中斷 155
6.1 異常與中斷系統(tǒng)基礎 155
6.1.1 Cotex-M3異常與中斷系統(tǒng) 155
6.1.2 STM32F10xxx系列中斷系統(tǒng) 158
6.1.3 NVIC操作庫函數 162
6.2 外部中斷/事件控制器 165
6.2.1 外部中斷控制器EXTI 166
6.2.2 外部中斷的相關寄存器 167
6.2.3 外部中斷的操作庫函數 170
6.3 外部中斷編程實踐 172
6.3.1 使用外部中斷的基本步驟 173
6.3.2 GPIO外部中斷測試工程 177
思考題與習題6 181
第7章 定時/計數器 183
7.1 基本定時器 183
7.1.1 基本定時器的結構與原理 183
7.1.2 基本定時器的定時分析 185
7.1.3 基本定時器的相關寄存器 188
7.2 通用定時器 189
7.2.1 通用定時器的基本結構 189
7.2.2 通用定時器的計數模式 191
7.2.3 通用定時器的輸入模式 195
7.2.4 通用定時器的輸出模式 198
7.2.5 定時器的觸發(fā)與同步 201
7.2.6 通用定時器的相關寄存器 202
7.3 高級定時器 203
7.3.1 高級定時器的結構 203
7.3.2 高級定時器的功能 203
7.3.3 高級定時器的相關寄存器 205
7.4 定時器的相關寄存器 206
7.4.1 控制與狀態(tài)寄存器組 206
7.4.2 捕獲/比較通道控制寄存器組 213
7.4.3 時基單元寄存器組 216
7.4.4 捕獲/比較通道寄存器組 217
7.5 定時器的操作庫函數 219
7.5.1 定時器的操作庫函數概述 219
7.5.2 定時器的操作庫函數 222
7.6 定時器基本定時應用編程 232
7.6.1 測試硬件環(huán)境 233
7.6.2 查詢方式應用 233
7.6.3 中斷方式應用 236
7.7 定時器PWM輸出應用編程 239
7.7.1 PWM測試任務 239
7.7.2 PWM測試應用編程 239
7.7.3 PWM測試工程仿真 243
7.8 SysTick定時器 244
7.8.1 SysTick定時器概述 244
7.8.2 SysTick定時器的相關寄存器 245
7.8.3 SysTick定時器的操作庫函數 247
7.8.4 SysTick定時器編程應用舉例 248
思考題與習題7 252
第8章 A/D轉換器 254
8.1 STM32F10xxx系列A/D轉換器
基礎 254
8.1.1 A/D轉換器概述 254
8.1.2 A/D轉換器的結構 255
8.1.3 A/D轉換器的時鐘 257
8.1.4 ADC獨立工作模式 258
8.1.5 雙ADC工作模式 259
8.1.6 A/D轉換器校準 262
8.1.7 A/D轉換器的相關寄存器 262
8.2 A/D轉換器的操作庫函數 271
8.2.1 A/D轉換器的操作庫
函數概述 271
8.2.2 A/D轉換器的操作庫函數 272
8.3 A/D轉換器編程應用 281
8.3.1 單路A/D轉換器編程實例 282
8.3.2 雙路A/D轉換器編程實例 289
思考題與習題8 293
第9章 D/A轉換器 294
9.1 STM32F10xxx系列D/A
轉換器基礎 294
9.1.1 D/A轉換器的基本特性 294
9.1.2 D/A轉換器的結構與原理 294
9.1.3 DAC獨立工作模式 296
9.1.4 雙DAC工作模式 297
9.1.5 D/A轉換器的相關寄存器 298
9.2 D/A轉換器的操作庫函數 302
9.2.1 D/A轉換器的操作庫函數概述 302
9.2.2 D/A轉換器的操作庫函數 302
9.3 D/A轉換器編程應用 306
9.3.1 D/A轉換器編程的基本步驟 306
9.3.2 單路D/A轉換器編程實例 307
9.3.3 雙路D/A轉換器編程實例 312
思考題與習題9 318
第10章 USART串口通信 319
10.1 STM32F10xxx系列USART串口
?通信基礎 319
10.1.1 USART的基本特性 319
10.1.2 USART的結構與原理 320
10.1.3 USART幀格式 321
10.1.4 硬件流控制 322
10.1.5 USART的相關寄存器 324
10.2 USART串口通信的操作庫函數 330
10.2.1 USART串口通信的操作
庫函數概述 330
10.2.2 USART串口通信的操作
庫函數 330
10.3 USART串口通信編程應用 333
10.3.1 USART串口通信編程的
基本步驟 333
10.3.2 USART串口通信編程實例 334
思考題與習題10 340
第11章 SPI通信接口 341
11.1 STM32F10xxx系列SPI通信基礎 341
11.1.1 SPI基礎 341
11.1.2 SPI通信的基本特性 344
11.1.3 SPI通信的結構與工作原理 345
11.1.4 SPI的相關寄存器 346
11.2 SPI通信的操作庫函數 350
11.2.1 SPI通信的操作庫函數概述 350
11.2.2 SPI通信的操作庫函數 351
11.3 SPI通信編程應用 354
11.3.1 SPI通信編程的基本步驟 354
11.3.2 單路SPI通信編程實例 355
思考題與習題11 373
第12章 I2C總線接口 374
12.1 I2C概述 374
12.1.1 I2C總線的基本特性 374
12.1.2 I2C基礎 375
12.1.3 I2C結構 378
12.2 I2C操作 381
12.2.1 I2C的通信過程 381
12.2.2 I2C中斷請求 382
12.2.3 I2C相關寄存器 384
12.3 I2C編程應用 390
12.3.1 I2C初始化結構體詳解 390
12.3.2 I2C讀/寫EEPROM實驗 393
思考題與習題12 413
第13章 DMA控制器 414
13.1 DMA控制器的結構與原理 414
13.1.1 DMA控制器的基本特性 414
13.1.2 DMA控制器的結構與原理 414
13.1.3 DMA控制器的相關寄存器 418
13.2 DMA控制器的操作庫函數 422
13.2.1 DMA控制器的操作庫
函數概述 422
13.2.2 DMA控制器的操作庫函數 422
13.3 DMA控制器編程應用 426
13.3.1 DMA控制器編程的
基本步驟 426
13.3.2 DMA控制器編程實例 426
思考題與習題13 431
參考文獻 432