嵌入式系统原理及应用——基于ARM Cortex-M3内核的STM32F103系列微控制器 / 高等院校信息技术规划教材
¥89.00定价
作者: 王益涵、孙宪坤等
出版时间:2016年9月
出版社:清华大学出版社
- 清华大学出版社
- 9787302441359
- 1-1
- 64501
- 16开
- 2016年9月
- 工学
- 计算机科学与技术
- TP360.21
- 计算机
- 本专科、高职高专
内容简介
本书通过与常见的桌面通用系统比较,引入嵌入式系统的基本概念,主要介绍目前*的ARM CortexM3内核以及意法半导体公司推出的基于ARM CortexM3内核的STM32F103微控制器。全书共分3篇 第1篇(第1、2章)为系统篇,介绍嵌入式系统及其开发的基本概念;第2篇(第3、4章)为内核篇,分析ARM CortexM3内核以及基于ARM CortexM3内核的STM32F103微控制器的体系结构、工作原理、编程模型和开发方法等;第3篇(第5~12章)为片内外设篇,基于STM32F103微控制器讲述常用的片上外设?M接口,包括GPIO、定时器、EXTI、DMA、ADC、USART、SPI和I2C等,并分别给出在KEIL MDK下采用库函数方式使用这些片上外设?M接口进行应用开发的典型案例。本书适合作为高等院校计算机、自动化、电子信息等电气信息类专业高年级本科生、研究生嵌入式相关课程的教材,同时可供从事嵌入式开发的技术和研究人员参考。
目录
第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 CortexM3处理器81
3.1ARM CortexM3组成结构81
3.1.1CortexM3内核82
3.1.2调试系统84
3.2ARM CortexM3总线接口86
3.2.1CortexM3总线接口类型87
3.2.2CortexM3总线连接方案88
3.3ARM CortexM3编程模型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 CortexM3存储器系统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命名规则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