嵌入式系統原理及應用——基於ARM Cortex-M3內核的STM32F103系列微控制

王益涵、孫憲坤、史志才

  • 出版商: 清華大學
  • 出版日期: 2016-10-01
  • 定價: $708
  • 售價: 7.5$531
  • 語言: 簡體中文
  • ISBN: 7302441359
  • ISBN-13: 9787302441359
  • 相關分類: ARM嵌入式系統STM32
  • 立即出貨 (庫存 < 4)

  • 嵌入式系統原理及應用——基於ARM Cortex-M3內核的STM32F103系列微控制-preview-1
  • 嵌入式系統原理及應用——基於ARM Cortex-M3內核的STM32F103系列微控制-preview-2
  • 嵌入式系統原理及應用——基於ARM Cortex-M3內核的STM32F103系列微控制-preview-3
嵌入式系統原理及應用——基於ARM Cortex-M3內核的STM32F103系列微控制-preview-1

商品描述

本書通過與常見的桌面通用系統比較,引入嵌入式系統的基本概念,主要介紹目前**的ARM CortexM3內核以及意法半導體公司推出的基於ARM CortexM3內核的STM32F103微控制器。 全書共分3篇 第1篇(第1、2章)為系統篇,介紹嵌入式系統及其開發的基本概念;第2篇(第3、4章)為內核篇,分析ARM CortexM3內核以及基於ARM CortexM3內核的STM32F103微控制器的體系結構、工作原理、編程模型和開發方法等;第3篇(第5~12章)為片內外設篇,基於STM32F103微控制器講述常用的片上外設∕接口,包括GPIO、定時器、EXTI、DMA、ADC、USART、SPI和I2C等,並分別給出在KEIL MDK下採用庫函數方式使用這些片上外設∕接口進行應用開發的典型案例。 本書適合作為高等院校電腦、自動化、電子信息等電氣信息類專業高年級本科生、研究生嵌入式相關課程的教材,同時可供從事嵌入式開發的技術和研究人員參考。

目錄大綱

目錄Contents

第1篇系統篇

第1章嵌入式系統概述3

1.1嵌入式系統的定義和特點3

1.1.1嵌入式系統的定義3

1.1.2嵌入式系統和通用電腦比較4

1.1.3嵌入式系統的特點5

1.2嵌入式系統的硬件6

1.2.1嵌入式處理器7

1.2.2嵌入式存儲器15

1.2.3嵌入式I/O設備18

1.2.4嵌入式I/O接口18

1.3嵌入式系統的軟件21

1.3.1無操作系統的嵌入式軟件22

1.3.2帶操作系統的嵌入式軟件24

1.4嵌入式系統的分類27

1.4.1按硬件(嵌入式處理器)劃分27

1.4.2按軟件復雜度劃分27

1.4.3按實時性劃分28

1.4.4按使用對象劃分28

1.5嵌入式系統的應用28

1.5.1國防軍事28

1.5.2工業控制29

1.5.3消費電子30

1.5.4辦公自動化產品30

1.5.5網絡和通信設備30

1.5.6汽車電子31◆嵌入式系統原理及應用目錄1.5.7金融商業31

1.5.8生物醫學32

1.5.9信息家電32

1.6本章小結34

習題134

第2章嵌入式系統開發35

2.1嵌入式系統的開發環境、開發工具和調試方式35

2.1.1嵌入式系統的開發環境35

2.1.2嵌入式系統的開發工具37

2.1.3嵌入式系統的調試方式43

2.2嵌入式系統的開發語言50

2.2.1嵌入式硬件開發語言50

2.2.2嵌入式軟件開發語言51

2.3嵌入式系統的開發過程53

2.3.1需求分析54

2.3.2系統設計55

2.3.3系統實現61

2.3.4系統測試70

2.3.5系統發布73

2.4嵌入式開發工程師之路74

2.4.1嵌入式行業和人才的現狀分析74

2.4.2嵌入式開發工程師的能力要求74

2.4.3嵌入式開發工程師的進階之路75

2.5本章小結77

習題278

第2篇內核篇

第3章ARM CortexM3處理器81

3.1ARM CortexM3組成結構81

3.1.1CortexM3內核82

3.1.2調試系統84

3.2ARM CortexM3總線接口86

3.2.1CortexM3總線接口類型87

3.2.2CortexM3總線連接方案88

3.3ARM CortexM3編程模型89

3.3.1工作狀態89

3.3.2數據類型89

3.3.3寄存器89

3.3.4指令系統93

3.3.5操作模式和特權分級96

3.3.6異常和中斷98

3.3.7雙堆棧機制105

3.4ARM CortexM3存儲器系統107

3.4.1存儲器映射107

3.4.2位帶操作110

3.4.3存儲格式112

3.5ARM CortexM3的低功耗模式113

3.6本章小結114

習題3115

第4章基於ARM CortexM3的STM32微控制器117

4.1從CortexM3到基於CortexM3的MCU117

4.2基於CortexM3的STM32系列微控制器概述118

4.2.1產品線118

4.2.2命名規則124

4.2.3生態系統125

4.2.4開發方法131

4.2.5學習之路134

4.3STM32F103微控制器基礎136

4.3.1概述136

4.3.2主系統結構137

4.3.3功能模塊139

4.3.4引腳定義140

4.3.5存儲器組織141

4.4STM32F103微控制器的最小系統145

4.4.1電源電路145

4.4.2時鐘電路148

4.4.3復位電路149

4.4.4調試和下載電路150

4.4.5其他151

4.5STM32F103微控制器的時鐘系統153

4.5.1輸入時鐘153

4.5.2系統時鐘155

4.5.3由系統時鐘分頻得到的其他時鐘155

4.5.4STM32F10x時鐘系統相關庫函數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時鐘安全系統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嵌入式開發工具的下載和安裝198

4.9.3配置STM32F103工程198

4.9.4編寫用戶程序源代碼206

4.9.5編譯和鏈接STM32F103工程207

4.9.6調試STM32F103工程208

4.9.7將可執行程序下載到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開發實例——LED閃爍235

5.4.1功能要求235

5.4.2硬件設計235

5.4.3軟件流程設計236

5.4.4軟件代碼實現236

5.4.5軟件模擬模擬238

5.4.6下載到硬件運行241

5.4.7開發經驗小結——STM32微控制器開發的一般步驟241

5.5STM32F103的GPIO開發實例——按鍵控制LED亮滅241

5.5.1功能要求241

5.5.2硬件設計241

5.5.3軟件流程設計242

5.5.4軟件代碼實現243

5.5.5軟件模擬模擬244

5.5.6下載到硬件運行246

5.5.7開發經驗小結——使用庫函數開發STM32F103的GPIO246

5.6本章小結247

習題5248

第6章定時器249

6.1定時器概述249

6.1.1延時的實現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定時器開發實例——精確定時的LED閃爍277

6.7.1功能要求277

6.7.2硬件設計277

6.7.3軟件流程設計278

6.7.4軟件代碼實現279

6.7.5軟件模擬模擬281

6.7.6下載到硬件運行283

6.7.7開發經驗小結——使用printf在調試窗口輸出284

6.8STM32F103定時器開發實例——PWM輸出285

6.8.1功能要求285

6.8.2硬件設計286

6.8.3軟件流程設計286

6.8.4軟件代碼實現288

6.8.5軟件模擬模擬289

6.8.6下載到硬件運行291

6.8.7開發經驗小結——基於無限循環的嵌入式軟件架構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中斷優先級296

7.1.5中斷嵌套297

7.1.6中斷的利與弊298

7.2STM32F103中斷系統298

7.2.1嵌套向量中斷控制器NVIC298

7.2.2STM32F103中斷優先級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的中斷開發實例——按鍵控制LED亮滅318

7.6.1功能要求318

7.6.2硬件設計318

7.6.3軟件流程設計319

7.6.4軟件代碼實現320

7.6.5下載到硬件運行323

7.6.6開發經驗小結——前/後台嵌入式軟件架構323

7.7STM32F103的中斷開發實例——精確延時的LED閃爍325

7.7.1功能要求325

7.7.2硬件設計325

7.7.3軟件流程設計326

7.7.4軟件代碼實現328

7.7.5軟件代碼分析——volatile331

7.7.6軟件模擬模擬332

7.7.7下載到硬件運行334

7.7.8開發經驗小結——改進的前/後台嵌入式軟件架構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觸發通道341

8.2.3優先級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開發實例——存儲器間的數據傳輸353

8.4.1功能要求353

8.4.2硬件設計353

8.4.3軟件流程設計354

8.4.4軟件代碼實現355

8.4.5軟件代碼分析——const358

8.4.6下載硬件調試358

8.4.7開發經驗小結——使用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觸發轉換376

9.2.5ADC時鐘和轉換時間377

9.2.6ADC工作過程378

9.2.7ADC中斷和DMA請求378

9.2.8獨立模式和雙ADC模式380

9.2.9單次和連續轉換模式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開發實例——讀取GPIO引腳電壓402

9.4.1功能要求402

9.4.2硬件設計402

9.4.3軟件流程設計403

9.4.4軟件代碼實現406

9.4.5軟件模擬模擬409

9.4.6下載到硬件調試413

9.4.7開發經驗小結——使用軟件濾波降低噪聲414

9.5STM32F103的ADC開發實例——讀取芯片溫度414

9.5.1功能要求414

9.5.2硬件設計414

9.5.3軟件流程設計415

9.5.4軟件代碼實現418

9.5.5下載到硬件調試421

9.5.6開發經驗小結——輪詢、中斷和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的協議層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

10.4.8USART_ITConfig442

10.4.9USART_GetITStatus443

10.4.10USART_ClearITPendingBit444

10.4.11USART_DMACmd444

10.5STM32F103的USART開發實例——重定向printf445

10.5.1功能要求445

10.5.2硬件設計445

10.5.3軟件流程設計446

10.5.4軟件代碼實現447

10.5.5下載到硬件運行449

10.5.6開發經驗小結——使用printf重定向到USART1451

10.6STM32F103的USART開發實例——PC串口通信452

10.6.1功能要求452

10.6.2硬件設計452

10.6.3軟件流程設計452

10.6.4軟件代碼實現452

10.6.5下載到硬件運行454

10.6.6開發經驗小結——庫函數開發STM32F103外設的一般原理455

10.7本章小結459

習題10459

第11章SPI461

11.1SPI通信原理461

11.1.1SPI的物理層462

11.1.2SPI的協議層464

11.2STM32F103的SPI工作原理469

11.2.1主要特性469

11.2.2內部結構470

11.2.3SPI主模式471

11.2.4SPI從模式472

11.2.5SPI狀態標志和中斷473

11.2.6SPI發送數據和接收數據474

11.2.7使用DMA進行SPI通信475

11.3STM32F10x的SPI相關庫函數476

11.3.1SPI_I2S_DeInit477

11.3.2SPI_Init477

11.3.3SPI_Cmd479

11.3.4SPI_I2S_SendData479

11.3.5SPI_I2S_ReceiveData480

11.3.6SPI_I2S_GetFlagStatus480

11.3.7SPI_I2S_ClearFlag481

11.3.8SPI_I2S_ITConfig481

11.3.9SPI_I2S_GetITStatus482

11.3.10SPI_I2S_ClearITPendingBit483

11.3.11SPI_I2S_DMACmd483

11.4STM32F103的SPI開發實例——讀寫SPI_FLASH484

11.4.1功能要求484

11.4.2硬件設計484

11.4.3軟件架構設計485

11.4.4軟件模塊分析486

11.4.5軟件代碼實現507

11.4.6下載硬件調試517

11.4.7下載到硬件運行522

11.4.8開發經驗小結——模塊化開發的嵌入式軟件設計523

11.5本章小結524

習題11524

第12章I2C526

12.1I2C通信原理526

12.1.1I2C的物理層527

12.1.2I2C的協議層529

12.2STM32F103的I2C工作原理533

12.2.1主要特性534

12.2.2內部結構534

12.2.3I2C從模式535

12.2.4I2C主模式537

12.2.5I2C中斷540

12.2.6使用DMA進行I2C通信540

12.3STM32F10x的I2C相關庫函數542

12.3.1I2C_DeInit543

12.3.2I2C_Init543

12.3.3I2C_Cmd545

12.3.4I2C_GenerateSTART545

12.3.5I2C_ReadRegister545

12.3.6I2C_Send7bitAddress546

12.3.7I2C_SendData546

12.3.8I2C_ReceiveData547

12.3.9I2C_CheckEvent547

12.3.10I2C_AcknowledgeConfig548

12.3.11I2C_GenerateSTOP548

12.3.12I2C_GetFlagStatus549

12.3.13I2C_ClearFlag550

12.3.14I2C_ITConfig551

12.3.15I2C_GetITStatus551

12.3.16I2C_ClearITPendingBit552

12.3.17I2C_DMACmd552

12.4STM32F103的I2C開發實例——讀寫I2C_EEPROM553

12.4.1功能要求553

12.4.2硬件設計553

12.4.3軟件架構設計554

12.4.4軟件模塊分析555

12.4.5軟件代碼實現566

12.4.6下載到硬件調試574

12.4.7下載到硬件運行577

12.4.8開發經驗小結——嵌入式驅動程序開發原理578

12.5本章小結579

習題12580

附錄AASCII碼表581

附錄BSTM32F103微控制器大容量產品系列引腳定義表583

附錄CSTM32F103微控制器中等容量產品系列引腳定義表589

附錄DSTM32F103微控制器小容量產品系列引腳定義表594