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