嵌入式系統(tǒng)原理及應(yīng)用——基于ARM Cortex-M3內(nèi)核的STM32F103系列微控制器(高等院校信息技術(shù)規(guī)劃教材)
定 價:89 元
- 作者:王益涵、孫憲坤、史志才
- 出版時間:2016/9/18
- ISBN:9787302441359
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP368.1
- 頁碼:596
- 紙張:膠版紙
- 版次:1
- 開本:10開
本書通過與常見的桌面通用系統(tǒng)比較,引入嵌入式系統(tǒng)的基本概念,主要介紹ARM CortexM3內(nèi)核以及意法半導(dǎo)體公司推出的基于ARM CortexM3內(nèi)核的STM32F103微控制器。
全書共分3篇 第1篇(第1、2章)為系統(tǒng)篇,介紹嵌入式系統(tǒng)及其開發(fā)的基本概念;第2篇(第3、4章)為內(nèi)核篇,分析ARM CortexM3內(nèi)核以及基于ARM CortexM3內(nèi)核的STM32F103微控制器的體系結(jié)構(gòu)、工作原理、編程模型和開發(fā)方法等;第3篇(第5~12章)為片內(nèi)外設(shè)篇,基于STM32F103微控制器講述常用的片上外設(shè)∕接口,包括GPIO、定時器、EXTI、DMA、ADC、USART、SPI和I2C等,并分別給出在KEIL MDK下采用庫函數(shù)方式使用這些片上外設(shè)∕接口進行應(yīng)用開發(fā)的典型案例。
本書適合作為高等院校計算機、自動化、電子信息等電氣信息類專業(yè)高年級本科生、研究生嵌入式相關(guān)課程的教材,同時可供從事嵌入式開發(fā)的技術(shù)和研究人員參考。
本書首先通過與個人計算機(PC)的比較,引出嵌入式系統(tǒng)的基本概念,從零開始、由淺入深引導(dǎo)讀者進入嵌入式系統(tǒng)的世界,講解嵌入式系統(tǒng)的開發(fā)過程,然后以目前ARM Cortex-M3內(nèi)核以及意法半導(dǎo)體公司推出的基于ARM Cortex-M3內(nèi)核的STM32F103微控制器為目標(biāo)硬件平臺,按照基本原理、內(nèi)部結(jié)構(gòu)、工作機制和相關(guān)庫函數(shù)的順序循序漸進、逐步展開,詳細介紹STM32F103微控制器各個常用片上外設(shè)∕接口(包括GPIO、定時器、EXTI、DMA、ADC、USART、SPI和I2C等),并給出在嵌入式軟件開發(fā)工具KEIL MDK下使用C語言采用庫函數(shù)方式開發(fā)STM32F103微控制器的典型案例。
為了降低讀者的學(xué)習(xí)成本和學(xué)習(xí)難度,本書不僅提供了書中所有程序的源碼,而且在STM32F103微控制器典型開發(fā)案例中回顧了嵌入式相關(guān)的硬件基礎(chǔ)知識、C語言編程技巧和方法。針對目前身邊暫時沒有STM32F103微控制器硬件的讀者,本書還介紹嵌入式系統(tǒng)的軟件仿真調(diào)試方法,指導(dǎo)讀者在嵌入式軟件開發(fā)工具KEIL MDK下調(diào)試自己編寫的基于STM32F103微控制器的應(yīng)用程序,使讀者無需購買嵌入式硬件開發(fā)板也可以完成對自己編寫的嵌入式程序的調(diào)試和驗證。
本書適合作為高等院校計算機、自動化、電子信息等電氣信息類專業(yè)高年級本科生、研究生“嵌入式”相關(guān)課程的教材,同時可供從事嵌入式開發(fā)的技術(shù)和研究人員參考。尤其面向嵌入式初學(xué)者,本書在調(diào)研和分析當(dāng)前嵌入式開發(fā)工程師的人才需求和能力要求的基礎(chǔ)上,提出了從嵌入式“菜鳥”到嵌入式工程師的進階之路。
第1篇系統(tǒng)篇
第1章嵌入式系統(tǒng)概述3
1.1嵌入式系統(tǒng)的定義和特點3
1.1.1嵌入式系統(tǒng)的定義3
1.1.2嵌入式系統(tǒng)和通用計算機比較4
1.1.3嵌入式系統(tǒng)的特點5
1.2嵌入式系統(tǒng)的硬件6
1.2.1嵌入式處理器7
1.2.2嵌入式存儲器15
1.2.3嵌入式I/O設(shè)備18
1.2.4嵌入式I/O接口18
1.3嵌入式系統(tǒng)的軟件21
1.3.1無操作系統(tǒng)的嵌入式軟件22
1.3.2帶操作系統(tǒng)的嵌入式軟件24
1.4嵌入式系統(tǒng)的分類27
1.4.1按硬件(嵌入式處理器)劃分27
1.4.2按軟件復(fù)雜度劃分27
1.4.3按實時性劃分28
1.4.4按使用對象劃分28
1.5嵌入式系統(tǒng)的應(yīng)用28
1.5.1國防軍事28
1.5.2工業(yè)控制29
1.5.3消費電子30
1.5.4辦公自動化產(chǎn)品30
1.5.5網(wǎng)絡(luò)和通信設(shè)備30
1.5.6汽車電子31◆嵌入式系統(tǒng)原理及應(yīng)用目錄1.5.7金融商業(yè)31
1.5.8生物醫(yī)學(xué)32
1.5.9信息家電32
1.6本章小結(jié)34
習(xí)題134
第2章嵌入式系統(tǒng)開發(fā)35
2.1嵌入式系統(tǒng)的開發(fā)環(huán)境、開發(fā)工具和調(diào)試方式35
2.1.1嵌入式系統(tǒng)的開發(fā)環(huán)境35
2.1.2嵌入式系統(tǒng)的開發(fā)工具37
2.1.3嵌入式系統(tǒng)的調(diào)試方式43
2.2嵌入式系統(tǒng)的開發(fā)語言50
2.2.1嵌入式硬件開發(fā)語言50
2.2.2嵌入式軟件開發(fā)語言51
2.3嵌入式系統(tǒng)的開發(fā)過程53
2.3.1需求分析54
2.3.2系統(tǒng)設(shè)計55
2.3.3系統(tǒng)實現(xiàn)61
2.3.4系統(tǒng)測試70
2.3.5系統(tǒng)發(fā)布73
2.4嵌入式開發(fā)工程師之路74
2.4.1嵌入式行業(yè)和人才的現(xiàn)狀分析74
2.4.2嵌入式開發(fā)工程師的能力要求74
2.4.3嵌入式開發(fā)工程師的進階之路75
2.5本章小結(jié)77
習(xí)題278
第2篇內(nèi)核篇
第3章ARM CortexM3處理器81
3.1ARM CortexM3組成結(jié)構(gòu)81
3.1.1CortexM3內(nèi)核82
3.1.2調(diào)試系統(tǒng)84
3.2ARM CortexM3總線接口86
3.2.1CortexM3總線接口類型87
3.2.2CortexM3總線連接方案88
3.3ARM CortexM3編程模型89
3.3.1工作狀態(tài)89
3.3.2數(shù)據(jù)類型89
3.3.3寄存器89
3.3.4指令系統(tǒng)93
3.3.5操作模式和特權(quán)分級96
3.3.6異常和中斷98
3.3.7雙堆棧機制105
3.4ARM CortexM3存儲器系統(tǒng)107
3.4.1存儲器映射107
3.4.2位帶操作110
3.4.3存儲格式112
3.5ARM CortexM3的低功耗模式113
3.6本章小結(jié)114
習(xí)題3115
第4章基于ARM CortexM3的STM32微控制器117
4.1從CortexM3到基于CortexM3的MCU117
4.2基于CortexM3的STM32系列微控制器概述118
4.2.1產(chǎn)品線118
4.2.2命名規(guī)則124
4.2.3生態(tài)系統(tǒng)125
4.2.4開發(fā)方法131
4.2.5學(xué)習(xí)之路134
4.3STM32F103微控制器基礎(chǔ)136
4.3.1概述136
4.3.2主系統(tǒng)結(jié)構(gòu)137
4.3.3功能模塊139
4.3.4引腳定義140
4.3.5存儲器組織141
4.4STM32F103微控制器的最小系統(tǒng)145
4.4.1電源電路145
4.4.2時鐘電路148
4.4.3復(fù)位電路149
4.4.4調(diào)試和下載電路150
4.4.5其他151
4.5STM32F103微控制器的時鐘系統(tǒng)153
4.5.1輸入時鐘153
4.5.2系統(tǒng)時鐘155
4.5.3由系統(tǒng)時鐘分頻得到的其他時鐘155
4.5.4STM32F10x時鐘系統(tǒng)相關(guān)庫函數(shù)157
4.6STM32F103微控制器的低功耗模式162
4.6.1睡眠模式163
4.6.2停機模式163
4.6.3待機模式164
4.7STM32F103微控制器的安全特性165
4.7.1看門狗165
4.7.2電源檢測166
4.7.3時鐘安全系統(tǒng)166
4.8STM32F103微控制器的啟動過程167
4.8.1啟動過程和啟動代碼概述167
4.8.2ARM啟動代碼所需匯編語言基礎(chǔ)167
4.8.3STM32F103的啟動代碼分析171
4.8.4STM32F103的啟動過程分析182
4.9建立第一個STM32F103應(yīng)用工程185
4.9.1STM32F10x標(biāo)準(zhǔn)外設(shè)庫的下載和認知185
4.9.2嵌入式開發(fā)工具的下載和安裝198
4.9.3配置STM32F103工程198
4.9.4編寫用戶程序源代碼206
4.9.5編譯和鏈接STM32F103工程207
4.9.6調(diào)試STM32F103工程208
4.9.7將可執(zhí)行程序下載到STM32F103運行215
4.10本章小結(jié)217
習(xí)題4217
第3篇片內(nèi)外設(shè)篇
第5章GPIO221
5.1GPIO概述221
5.2STM32F103的GPIO工作原理221
5.2.1內(nèi)部結(jié)構(gòu)222
5.2.2工作模式224
5.2.3輸出速度224
5.2.4復(fù)用功能重映射225
5.2.5外部中斷映射和事件輸出228
5.2.6主要特性228
5.3STM32F10x的GPIO相關(guān)庫函數(shù)228
5.3.1GPIO_DeInit229
5.3.2GPIO_Init229
5.3.3GPIO_SetBits231
5.3.4GPIO_ResetBits231
5.3.5GPIO_Write232
5.3.6GPIO_ReadOutputDataBit232
5.3.7GPIO_ReadOutputData232
5.3.8GPIO_ReadInputDataBit233
5.3.9GPIO_ReadInputData233
5.3.10GPIO_EXTILineConfig233
5.3.11GPIO_PinRemapConfig234
5.4STM32F103的GPIO開發(fā)實例——LED閃爍235
5.4.1功能要求235
5.4.2硬件設(shè)計235
5.4.3軟件流程設(shè)計236
5.4.4軟件代碼實現(xiàn)236
5.4.5軟件模擬仿真238
5.4.6下載到硬件運行241
5.4.7開發(fā)經(jīng)驗小結(jié)——STM32微控制器開發(fā)的一般步驟241
5.5STM32F103的GPIO開發(fā)實例——按鍵控制LED亮滅241
5.5.1功能要求241
5.5.2硬件設(shè)計241
5.5.3軟件流程設(shè)計242
5.5.4軟件代碼實現(xiàn)243
5.5.5軟件模擬仿真244
5.5.6下載到硬件運行246
5.5.7開發(fā)經(jīng)驗小結(jié)——使用庫函數(shù)開發(fā)STM32F103的GPIO246
5.6本章小結(jié)247
習(xí)題5248
第6章定時器249
6.1定時器概述249
6.1.1延時的實現(xiàn)249
6.1.2可編程定時/計數(shù)器功能概述251
6.2STM32F103的定時器概述252
6.3STM32F103的基本定時器TIM6和TIM7252
6.3.1內(nèi)部結(jié)構(gòu)253
6.3.2時鐘源253
6.3.3計數(shù)模式254
6.3.4主要特性254
6.4STM32F103的通用定時器TIM2—TIM5254
6.4.1內(nèi)部結(jié)構(gòu)254
6.4.2時鐘源256
6.4.3計數(shù)模式257
6.4.4輸出比較模式259
6.4.5PWM輸出模式259
6.4.6輸入捕獲模式262
6.4.7PWM輸入模式262
6.4.8單脈沖模式263
6.4.9編碼器接口263
6.4.10主要特性263
6.5STM32F103的高級定時器TIM1和TIM8264
6.5.1內(nèi)部結(jié)構(gòu)264
6.5.2時鐘源264
6.5.3功能描述266
6.5.4主要特性266
6.6STM32F10x定時器相關(guān)庫函數(shù)266
6.6.1TIM_DeInit267
6.6.2TIM_TimeBaseInit268
6.6.3TIM_OC1Init269
6.6.4TIM_OC2Init270
6.6.5TIM_OC3Init271
6.6.6TIM_OC4Init271
6.6.7TIM_OC1PreloadConfig272
6.6.8TIM_OC2PreloadConfig272
6.6.9TIM_OC3PreloadConfig272
6.6.10TIM_OC4PreloadConfig273
6.6.11TIM_ARRPreloadConfig273
6.6.12TIM_CtrlPWMOutputs274
6.6.13TIM_Cmd274
6.6.14TIM_GetFlagStatus275
6.6.15TIM_ClearFlag275
6.6.16TIM_ITConfig276
6.6.17TIM_GetITStatus276
6.6.18TIM_ClearITPendingBit277
6.7STM32F103定時器開發(fā)實例——精確定時的LED閃爍277
6.7.1功能要求277
6.7.2硬件設(shè)計277
6.7.3軟件流程設(shè)計278
6.7.4軟件代碼實現(xiàn)279
6.7.5軟件模擬仿真281
6.7.6下載到硬件運行283
6.7.7開發(fā)經(jīng)驗小結(jié)——使用printf在調(diào)試窗口輸出284
6.8STM32F103定時器開發(fā)實例——PWM輸出285
6.8.1功能要求285
6.8.2硬件設(shè)計286
6.8.3軟件流程設(shè)計286
6.8.4軟件代碼實現(xiàn)288
6.8.5軟件模擬仿真289
6.8.6下載到硬件運行291
6.8.7開發(fā)經(jīng)驗小結(jié)——基于無限循環(huán)的嵌入式軟件架構(gòu)291
6.9本章小結(jié)292
習(xí)題6292
第7章中斷293
7.1中斷的基本概念293
7.1.1中斷源294
7.1.2中斷屏蔽294
7.1.3中斷處理過程294
7.1.4中斷優(yōu)先級296
7.1.5中斷嵌套297
7.1.6中斷的利與弊298
7.2STM32F103中斷系統(tǒng)298
7.2.1嵌套向量中斷控制器NVIC298
7.2.2STM32F103中斷優(yōu)先級299
7.2.3STM32F103中斷向量表300
7.2.4STM32F103中斷服務(wù)函數(shù)303
7.2.5STM32F103中斷設(shè)置過程304
7.3STM32F103外部中斷/事件控制器EXTI306
7.3.1內(nèi)部結(jié)構(gòu)307
7.3.2工作原理308
7.3.3主要特性309
7.4STM32F10x的NVIC相關(guān)庫函數(shù)309
7.4.1NVIC_PriorityGroupConfig310
7.4.2NVIC_Init310
7.4.3NVIC_DeInit313
7.5STM32F10x的EXTI相關(guān)庫函數(shù)314
7.5.1EXTI_DeInit314
7.5.2EXTI_Init314
7.5.3EXTI_GetFlagStatus316
7.5.4EXTI_ClearFlag316
7.5.5EXTI_GetITStatus317
7.5.6EXTI_ClearITPendingBit317
7.6STM32F103的中斷開發(fā)實例——按鍵控制LED亮滅318
7.6.1功能要求318
7.6.2硬件設(shè)計318
7.6.3軟件流程設(shè)計319
7.6.4軟件代碼實現(xiàn)320
7.6.5下載到硬件運行323
7.6.6開發(fā)經(jīng)驗小結(jié)——前/后臺嵌入式軟件架構(gòu)323
7.7STM32F103的中斷開發(fā)實例——精確延時的LED閃爍325
7.7.1功能要求325
7.7.2硬件設(shè)計325
7.7.3軟件流程設(shè)計326
7.7.4軟件代碼實現(xiàn)328
7.7.5軟件代碼分析——volatile331
7.7.6軟件模擬仿真332
7.7.7下載到硬件運行334
7.7.8開發(fā)經(jīng)驗小結(jié)——改進的前/后臺嵌入式軟件架構(gòu)334
7.8本章小結(jié)336
習(xí)題7336
第8章DMA337
8.1DMA的基本概念337
8.1.1DMA的引入337
8.1.2DMA的定義338
8.1.3DMA傳輸要素338
8.1.4DMA傳輸過程338
8.1.5DMA的特點與應(yīng)用339
8.2STM32F103的DMA工作原理339
8.2.1功能框圖340
8.2.2觸發(fā)通道341
8.2.3優(yōu)先級344
8.2.4傳輸模式344
8.2.5主要特性344
8.3STM32F10x的DMA相關(guān)庫函數(shù)345
8.3.1DMA_DeInit346
8.3.2DMA_Init346
8.3.3DMA_GetCurrDataCounter348
8.3.4DMA_Cmd348
8.3.5DMA_GetFlagStatus349
8.3.6DMA_ClearFlag350
8.3.7DMA_ITConfig351
8.3.8DMA_GetITStatus351
8.3.9DMA_ClearITPendingBit353
8.4STM32F103的DMA開發(fā)實例——存儲器間的數(shù)據(jù)傳輸353
8.4.1功能要求353
8.4.2硬件設(shè)計353
8.4.3軟件流程設(shè)計354
8.4.4軟件代碼實現(xiàn)355
8.4.5軟件代碼分析——const358
8.4.6下載硬件調(diào)試358
8.4.7開發(fā)經(jīng)驗小結(jié)——使用DMA365
8.5本章小結(jié)366
習(xí)題8366
第9章ADC367
9.1ADC概述367
9.1.1ADC的由來367
9.1.2ADC的基本原理368
9.1.3ADC的性能參數(shù)370
9.1.4ADC的主要類型371
9.2STM32F103的ADC工作原理372
9.2.1主要特性373
9.2.2內(nèi)部結(jié)構(gòu)373
9.2.3ADC通道及分組375
9.2.4ADC觸發(fā)轉(zhuǎn)換376
9.2.5ADC時鐘和轉(zhuǎn)換時間377
9.2.6ADC工作過程378
9.2.7ADC中斷和DMA請求378
9.2.8獨立模式和雙ADC模式380
9.2.9單次和連續(xù)轉(zhuǎn)換模式380
9.2.10掃描模式381
9.2.11間斷模式383
9.2.12校準(zhǔn)384
9.3STM32F10x的ADC相關(guān)庫函數(shù)384
9.3.1ADC_DeInit386
9.3.2ADC_Init386
9.3.3ADC_RegularChannelConfig388
9.3.4ADC_InjectedChannelConfig390
9.3.5ADC_InjectedSequencerLengthConfig390
9.3.6ADC_SetInjectedOffset391
9.3.7ADC_TampSensorVrefintCmd391
9.3.8ADC_Cmd392
9.3.9ADC_ResetCalibration392
9.3.10ADC_GetResetCalibrationStatus392
9.3.11ADC_StartCalibration393
9.3.12ADC_GetCalibrationStatus393
9.3.13ADC_SoftwareStartConvCmd394
9.3.14ADC_ExternalTrigConvCmd394
9.3.15ADC_SoftwareStartInjectedConvCmd395
9.3.16ADC_ExternalTrigInjectedConvCmd395
9.3.17ADC_ExternalTrigInjectedConvConfig396
9.3.18ADC_AutoInjectedConvCmd397
9.3.19ADC_DiscModeCmd397
9.3.20ADC_DiscModeChannelCountConfig398
9.3.21ADC_InjectedDiscModeCmd398
9.3.22ADC_GetConversionValue398
9.3.23ADC_GetInjectedConversionValue399
9.3.24ADC_GetFlagStatus399
9.3.25ADC_ClearFlag400
9.3.26ADC_ITConfig400
9.3.27ADC_GetITStatus401
9.3.28ADC_ClearITPendingBit401
9.3.29ADC_DMACmd402
9.4STM32F103的ADC開發(fā)實例——讀取GPIO引腳電壓402
9.4.1功能要求402
9.4.2硬件設(shè)計402
9.4.3軟件流程設(shè)計403
9.4.4軟件代碼實現(xiàn)406
9.4.5軟件模擬仿真409
9.4.6下載到硬件調(diào)試413
9.4.7開發(fā)經(jīng)驗小結(jié)——使用軟件濾波降低噪聲414
9.5STM32F103的ADC開發(fā)實例——讀取芯片溫度414
9.5.1功能要求414
9.5.2硬件設(shè)計414
9.5.3軟件流程設(shè)計415
9.5.4軟件代碼實現(xiàn)418
9.5.5下載到硬件調(diào)試421
9.5.6開發(fā)經(jīng)驗小結(jié)——輪詢、中斷和DMA422
9.6本章小結(jié)423
習(xí)題9423
第10章UART425
10.1數(shù)據(jù)通信的基本概念426
10.1.1并行和串行426
10.1.2單工、半雙工和全雙工426
10.1.3同步和異步426
10.2UART通信原理427
10.2.1UART的物理層427
10.2.2UART的協(xié)議層430
10.3STM32F103的USART工作原理432
10.3.1主要特性432
10.3.2內(nèi)部結(jié)構(gòu)432
10.3.3USART中斷435
10.3.4使用DMA進行USART通信436
10.4STM32F10x的USART相關(guān)庫函數(shù)437
10.4.1USART_DeInit438
10.4.2USART_Init438
10.4.3USART_Cmd439
10.4.4USART_SendData440
10.4.5USART_ReceiveData440
10.4.6USART_GetFlagStatus441
10.4.7USART_ClearFlag441