嵌入式系統(tǒng)原理及應用——基于ARM Cortex-M3內核的STM32F103系列微控制器(高等院校信息技術規(guī)劃教材)
定 價:89 元
- 作者:王益涵、孫憲坤、史志才
- 出版時間:2016/9/18
- ISBN:9787302441359
- 出 版 社:清華大學出版社
- 中圖法分類:TP368.1
- 頁碼:596
- 紙張:膠版紙
- 版次:1
- 開本:10開
本書通過與常見的桌面通用系統(tǒng)比較,引入嵌入式系統(tǒng)的基本概念,主要介紹ARM CortexM3內核以及意法半導體公司推出的基于ARM CortexM3內核的STM32F103微控制器。
全書共分3篇 第1篇(第1、2章)為系統(tǒng)篇,介紹嵌入式系統(tǒng)及其開發(fā)的基本概念;第2篇(第3、4章)為內核篇,分析ARM CortexM3內核以及基于ARM CortexM3內核的STM32F103微控制器的體系結構、工作原理、編程模型和開發(fā)方法等;第3篇(第5~12章)為片內外設篇,基于STM32F103微控制器講述常用的片上外設∕接口,包括GPIO、定時器、EXTI、DMA、ADC、USART、SPI和I2C等,并分別給出在KEIL MDK下采用庫函數方式使用這些片上外設∕接口進行應用開發(fā)的典型案例。
本書適合作為高等院校計算機、自動化、電子信息等電氣信息類專業(yè)高年級本科生、研究生嵌入式相關課程的教材,同時可供從事嵌入式開發(fā)的技術和研究人員參考。
本書首先通過與個人計算機(PC)的比較,引出嵌入式系統(tǒng)的基本概念,從零開始、由淺入深引導讀者進入嵌入式系統(tǒng)的世界,講解嵌入式系統(tǒng)的開發(fā)過程,然后以目前ARM Cortex-M3內核以及意法半導體公司推出的基于ARM Cortex-M3內核的STM32F103微控制器為目標硬件平臺,按照基本原理、內部結構、工作機制和相關庫函數的順序循序漸進、逐步展開,詳細介紹STM32F103微控制器各個常用片上外設∕接口(包括GPIO、定時器、EXTI、DMA、ADC、USART、SPI和I2C等),并給出在嵌入式軟件開發(fā)工具KEIL MDK下使用C語言采用庫函數方式開發(fā)STM32F103微控制器的典型案例。
為了降低讀者的學習成本和學習難度,本書不僅提供了書中所有程序的源碼,而且在STM32F103微控制器典型開發(fā)案例中回顧了嵌入式相關的硬件基礎知識、C語言編程技巧和方法。針對目前身邊暫時沒有STM32F103微控制器硬件的讀者,本書還介紹嵌入式系統(tǒng)的軟件仿真調試方法,指導讀者在嵌入式軟件開發(fā)工具KEIL MDK下調試自己編寫的基于STM32F103微控制器的應用程序,使讀者無需購買嵌入式硬件開發(fā)板也可以完成對自己編寫的嵌入式程序的調試和驗證。
本書適合作為高等院校計算機、自動化、電子信息等電氣信息類專業(yè)高年級本科生、研究生“嵌入式”相關課程的教材,同時可供從事嵌入式開發(fā)的技術和研究人員參考。尤其面向嵌入式初學者,本書在調研和分析當前嵌入式開發(fā)工程師的人才需求和能力要求的基礎上,提出了從嵌入式“菜鳥”到嵌入式工程師的進階之路。
第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設備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按軟件復雜度劃分27
1.4.3按實時性劃分28
1.4.4按使用對象劃分28
1.5嵌入式系統(tǒng)的應用28
1.5.1國防軍事28
1.5.2工業(yè)控制29
1.5.3消費電子30
1.5.4辦公自動化產品30
1.5.5網絡和通信設備30
1.5.6汽車電子31◆嵌入式系統(tǒng)原理及應用目錄1.5.7金融商業(yè)31
1.5.8生物醫(yī)學32
1.5.9信息家電32
1.6本章小結34
習題134
第2章嵌入式系統(tǒng)開發(fā)35
2.1嵌入式系統(tǒng)的開發(fā)環(huán)境、開發(fā)工具和調試方式35
2.1.1嵌入式系統(tǒng)的開發(fā)環(huán)境35
2.1.2嵌入式系統(tǒng)的開發(fā)工具37
2.1.3嵌入式系統(tǒng)的調試方式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)設計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本章小結77
習題278
第2篇內核篇
第3章ARM CortexM3處理器81
3.1ARM CortexM3組成結構81
3.1.1CortexM3內核82
3.1.2調試系統(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數據類型89
3.3.3寄存器89
3.3.4指令系統(tǒng)93
3.3.5操作模式和特權分級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本章小結114
習題3115
第4章基于ARM CortexM3的STM32微控制器117
4.1從CortexM3到基于CortexM3的MCU117
4.2基于CortexM3的STM32系列微控制器概述118
4.2.1產品線118
4.2.2命名規(guī)則124
4.2.3生態(tài)系統(tǒng)125
4.2.4開發(fā)方法131
4.2.5學習之路134
4.3STM32F103微控制器基礎136
4.3.1概述136
4.3.2主系統(tǒng)結構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復位電路149
4.4.4調試和下載電路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)相關庫函數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啟動代碼所需匯編語言基礎167
4.8.3STM32F103的啟動代碼分析171
4.8.4STM32F103的啟動過程分析182
4.9建立第一個STM32F103應用工程185
4.9.1STM32F10x標準外設庫的下載和認知185
4.9.2嵌入式開發(fā)工具的下載和安裝198
4.9.3配置STM32F103工程198
4.9.4編寫用戶程序源代碼206
4.9.5編譯和鏈接STM32F103工程207
4.9.6調試STM32F103工程208
4.9.7將可執(zhí)行程序下載到STM32F103運行215
4.10本章小結217
習題4217
第3篇片內外設篇
第5章GPIO221
5.1GPIO概述221
5.2STM32F103的GPIO工作原理221
5.2.1內部結構222
5.2.2工作模式224
5.2.3輸出速度224
5.2.4復用功能重映射225
5.2.5外部中斷映射和事件輸出228
5.2.6主要特性228
5.3STM32F10x的GPIO相關庫函數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硬件設計235
5.4.3軟件流程設計236
5.4.4軟件代碼實現(xiàn)236
5.4.5軟件模擬仿真238
5.4.6下載到硬件運行241
5.4.7開發(fā)經驗小結——STM32微控制器開發(fā)的一般步驟241
5.5STM32F103的GPIO開發(fā)實例——按鍵控制LED亮滅241
5.5.1功能要求241
5.5.2硬件設計241
5.5.3軟件流程設計242
5.5.4軟件代碼實現(xiàn)243
5.5.5軟件模擬仿真244
5.5.6下載到硬件運行246
5.5.7開發(fā)經驗小結——使用庫函數開發(fā)STM32F103的GPIO246
5.6本章小結247
習題5248
第6章定時器249
6.1定時器概述249
6.1.1延時的實現(xiàn)249
6.1.2可編程定時/計數器功能概述251
6.2STM32F103的定時器概述252
6.3STM32F103的基本定時器TIM6和TIM7252
6.3.1內部結構253
6.3.2時鐘源253
6.3.3計數模式254
6.3.4主要特性254
6.4STM32F103的通用定時器TIM2—TIM5254
6.4.1內部結構254
6.4.2時鐘源256
6.4.3計數模式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內部結構264
6.5.2時鐘源264
6.5.3功能描述266
6.5.4主要特性266
6.6STM32F10x定時器相關庫函數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硬件設計277
6.7.3軟件流程設計278
6.7.4軟件代碼實現(xiàn)279
6.7.5軟件模擬仿真281
6.7.6下載到硬件運行283
6.7.7開發(fā)經驗小結——使用printf在調試窗口輸出284
6.8STM32F103定時器開發(fā)實例——PWM輸出285
6.8.1功能要求285
6.8.2硬件設計286
6.8.3軟件流程設計286
6.8.4軟件代碼實現(xiàn)288
6.8.5軟件模擬仿真289
6.8.6下載到硬件運行291
6.8.7開發(fā)經驗小結——基于無限循環(huán)的嵌入式軟件架構291
6.9本章小結292
習題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中斷服務函數303
7.2.5STM32F103中斷設置過程304
7.3STM32F103外部中斷/事件控制器EXTI306
7.3.1內部結構307
7.3.2工作原理308
7.3.3主要特性309
7.4STM32F10x的NVIC相關庫函數309
7.4.1NVIC_PriorityGroupConfig310
7.4.2NVIC_Init310
7.4.3NVIC_DeInit313
7.5STM32F10x的EXTI相關庫函數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硬件設計318
7.6.3軟件流程設計319
7.6.4軟件代碼實現(xiàn)320
7.6.5下載到硬件運行323
7.6.6開發(fā)經驗小結——前/后臺嵌入式軟件架構323
7.7STM32F103的中斷開發(fā)實例——精確延時的LED閃爍325
7.7.1功能要求325
7.7.2硬件設計325
7.7.3軟件流程設計326
7.7.4軟件代碼實現(xiàn)328
7.7.5軟件代碼分析——volatile331
7.7.6軟件模擬仿真332
7.7.7下載到硬件運行334
7.7.8開發(fā)經驗小結——改進的前/后臺嵌入式軟件架構334
7.8本章小結336
習題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的特點與應用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相關庫函數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ā)實例——存儲器間的數據傳輸353
8.4.1功能要求353
8.4.2硬件設計353
8.4.3軟件流程設計354
8.4.4軟件代碼實現(xiàn)355
8.4.5軟件代碼分析——const358
8.4.6下載硬件調試358
8.4.7開發(fā)經驗小結——使用DMA365
8.5本章小結366
習題8366
第9章ADC367
9.1ADC概述367
9.1.1ADC的由來367
9.1.2ADC的基本原理368
9.1.3ADC的性能參數370
9.1.4ADC的主要類型371
9.2STM32F103的ADC工作原理372
9.2.1主要特性373
9.2.2內部結構373
9.2.3ADC通道及分組375
9.2.4ADC觸發(fā)轉換376
9.2.5ADC時鐘和轉換時間377
9.2.6ADC工作過程378
9.2.7ADC中斷和DMA請求378
9.2.8獨立模式和雙ADC模式380
9.2.9單次和連續(xù)轉換模式380
9.2.10掃描模式381
9.2.11間斷模式383
9.2.12校準384
9.3STM32F10x的ADC相關庫函數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硬件設計402
9.4.3軟件流程設計403
9.4.4軟件代碼實現(xiàn)406
9.4.5軟件模擬仿真409
9.4.6下載到硬件調試413
9.4.7開發(fā)經驗小結——使用軟件濾波降低噪聲414
9.5STM32F103的ADC開發(fā)實例——讀取芯片溫度414
9.5.1功能要求414
9.5.2硬件設計414
9.5.3軟件流程設計415
9.5.4軟件代碼實現(xiàn)418
9.5.5下載到硬件調試421
9.5.6開發(fā)經驗小結——輪詢、中斷和DMA422
9.6本章小結423
習題9423
第10章UART425
10.1數據通信的基本概念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內部結構432
10.3.3USART中斷435
10.3.4使用DMA進行USART通信436
10.4STM32F10x的USART相關庫函數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