21天学通ARM嵌入式开发


请输入要查询的词条内容:

21天学通ARM嵌入式开发




图书信息


作者:薛园园 (作者)

出版社: 电子工业出版社; 第1版 (2011年9月1日)

丛书名: 21天学编程系列

其他: 420页

ISBN: 9787121141621

条形码: 9787121141621

产品尺寸及重量: 25.6 x 18.6 x 3 cm ; 739 g

内容简介


本书系统地介绍了ARM嵌入式系统的基本结构、开发和ARM处理器的编程,并结合流行的嵌入式系统介绍了如何移植。本书言简意赅、通俗易懂,知识点覆盖全面,详细讲述了最新的ARM Cortex-M3内核及STM32处理器编程,使读者能够更好地掌握ARM处理器及相应的嵌入式系统设计。

本书分为四篇,共23章,全面详细地讲述了ARM处理器的原理、程序设计方法、ARM处理器编程指南及嵌入式系统移植。首先介绍了ARM处理器的构架及如何搭建一个ARM嵌入式开发平台,接着介绍了ARM Cortex-M3的指令集,基于Cortex-M3的STM32系列芯片及一些典型的嵌入式操作系统。然后结合STM32的各个功能部件详细讲解了ARM处理器的硬件编程方法。最后本书还介绍了基于ARM Cortex-M3的STM32芯片如何移植流行的嵌入式操作系统。

本书附赠DVD光盘1张,内容包括超大容量手把手教学视频、电子教案(PPT)、编程参考宝典电子书、源代码及各章习题答案。

目录


目 录

第一篇 走进嵌入式系统开发

第1章 嵌入式系统开发概述

( 教学视频:44分钟) 25

1.1 何为嵌入式系统 25

1.1.1 嵌入式系统的概念 25

1.1.2 嵌入式系统的基本结构 26

1.1.3 嵌入式处理器 26

1.2 嵌入式系统的特点及发展趋势 27

1.3 嵌入式系统的开发过程 28

1.3.1 芯片选择 28

1.3.2 配置硬件平台 28

1.3.3 BootLoader移植 28

1.3.4 操作系统裁减 29

1.3.5 系统移植 29

1.3.6 应用程序开发 29

1.4 如何成为嵌入式开发人员 29

1.5 小结 30

1.6 习题 30

第2章 嵌入式操作系统简介

( 教学视频:37分钟) 31

2.1 嵌入式操作系统概述 31

2.1.1 嵌入式操作系统的发展历史 31

2.1.2 嵌入式操作系统的分类 31

2.1.3 嵌入式操作系统的特点 32

2.2 主流嵌入式操作系统简介 32

2.2.1 VxWorks 32

2.2.2 pSOS 33

2.2.3 Palm OS 33

2.2.4 QNX 34

2.2.5 OS-9 34

2.2.6 LynxOS 34

2.2.7 Windows CE 34

2.2.8 μC/OS-II 35

2.2.9 嵌入式Linux 36

2.2.10 FreeRTOS 36

2.3 小结 36

2.4 习题 36

第3章 ARM处理器构架

( 教学视频:53分钟) 38

3.1 ARM体系结构概述 38

3.1.1 ARM简介 38

3.1.2 CISC的体系结构 39

3.1.3 RISC的体系结构 39

3.1.4 ARM微处理器的应用领域 39

3.1.5 ARM体系结构的特点 40

3.2 ARM处理器系列 40

3.2.1 ARM7微处理器 40

3.2.2 ARM9微处理器 41

3.2.3 ARM9E微处理器 41

3.2.4 ARM10E微处理器 42

3.2.5 ARM11微处理器 42

3.2.6 SecurCore微处理器 42

3.2.7 StrongARM微处理器 42

3.2.8 Xscale微处理器 43

3.2.9 Cortex-M3微处理器 43

3.2.10 基于ARM核的芯片选择 43

3.3 ARM处理器结构 44

3.3.1 ARM的系统构架 44

3.3.2 ARM的流水线结构 44

3.3.3 ARM的存储器结构 45

3.4 ARM编程模型 45

3.4.1 工作模式和工作状态 46

3.4.2 特权访问和用户访问 46

3.4.3 数据类型 46

3.4.4 存储器格式 46

3.5 ARM开发调试工具综述 47

3.6 小结 47

3.7 习题 47

第4章 搭建嵌入式开发平台

( 教学视频:39分钟) 49

4.1 基于ARM的RealView MDK开发

环境 49

4.1.1 RealView MDK简介 49

4.1.2 RealView MDK系统安装需求 49

4.1.3 RealView MDK的安装 50

4.1.4 RealView MDK集成开发

环境总览 51

4.1.5 RealView MDK的菜单栏 51

4.1.6 RealView MDK的工具栏 55

4.1.7 RealView MDK的快捷键 58

4.2 基于ARM Cortex-M3的STM32选型表 58

4.3 基于ARM Cortex-M3的STM32

最小开发系统 59

4.4 程序下载方式 60

4.5 小结 61

4.6 习题 61

第二篇 ARM嵌入式系统开发基础

第5章 ARM CORTEX-M3指令集

( 教学视频:30分钟) 62

5.1 数据传送指令 62

5.1.1 寄存器间数据传送指令 62

5.1.2 存储器数据传送指令 62

5.1.3 索引数据传送指令 63

5.2 数据处理指令 64

5.2.1 算术四则运算指令 64

5.2.2 逻辑及移位操作指令 65

5.2.3 数据序转及位操作指令 66

5.3 子程序呼叫及转移指令 66

5.4 隔离指令 67

5.5 不支持的指令 67

5.6 小结 68

5.7 习题 68

第6章 基于ARM CORTEX-M3的

STM32在应用编程

( 教学视频:31分钟) 70

6.1 在应用编程简介 70

6.2 STM32的启动配置 70

6.3 STM32的在应用编程 71

6.3.1 电路原理图 71

6.3.2 BootLoader固件下载步骤 72

6.4 小结 74

6.5 习题 75

第7章 嵌入式实时操作系统FREERTOS

( 教学视频:42分钟) 76

7.1 嵌入式实时操作系统FreeRTOS简介 76

7.2 嵌入式操作系统基本概念 76

7.2.1 多任务 77

7.2.2 调度 77

7.2.3 上下文切换 78

7.2.4 实时应用和调度 78

7.3 FreeRTOS的API模块 78

7.3.1 定制 78

7.3.2 任务创建和删除 80

7.3.3 任务控制 81

7.3.4 内核控制 82

7.4 小结 83

7.5 习题 83

第8章 嵌入式系统UC/OS-Ⅱ

( 教学视频:39分钟) 85

8.1 UC/OS-Ⅱ嵌入式系统简介 85

8.2 UC/OS-Ⅱ任务管理 85

8.2.1 建立任务OSTaskCreate 86

8.2.2 建立任务OSTaskCreate Ext 86

8.2.3 任务堆栈 88

8.2.4 堆栈检验OSTaskStkChk 88

8.2.5 删除任务OSTaskDel 89

8.2.6 请求删除任务OSTaskDelReq 90

8.2.7 改变任务的优先级OSTask

ChangePrio 91

8.2.8 挂起任务OSTaskSuspend 92

8.2.9 恢复任务OSTaskResume 93

8.2.10 获得有关任务的信息OSTaskQuery 94

8.3 任务之间的通信与同步 95

8.3.1 信号量 95

8.3.2 邮箱 95

8.3.3 消息队列 95

8.4 小结 96

8.5 习题 96

第三篇 深入ARM嵌入式控制器

第9章 通用I/O接口

( 教学视频:48分钟) 98

9.1 通用I/O接口的结构 98

9.1.1 GPIO的基本结构 98

9.1.2 GPIO的功能 99

9.1.3 GPIO的功能配置 100

9.1.4 复用功能与重映射 101

9.2 通用I/O接口的编程方法 104

9.2.1 GPIO寄存器结构 105

9.2.2 GPIO寄存器复位函数

GPIO_DeInit 105

9.2.3 复用功能寄存器复位函数

GPIO_AFIODeInit 106

9.2.4 参数初始化函数GPIO_Init 106

9.2.5 复位GPIO_InitStruct函数

GPIO_StructInit 108

9.2.6 读输入引脚函数

GPIO_ReadInputDataBit 108

9.2.7 读输入端口函数

GPIO_ReadInputData 108

9.2.8 读输出引脚函数

GPIO_ReadOutputDataBit 109

9.2.9 读输出端口函数

GPIO_ReadOutputData 109

9.2.10 置位引脚函数GPIO_SetBits 109

9.2.11 清除引脚位函数GPIO_ResetBits 109

9.2.12 置位或清除引脚函数

GPIO_WriteBit 110

9.2.13 写端口函数GPIO_Write 110

9.2.14 引脚配置锁定函数

GPIO_PinLockConfig 110

9.2.15 选择事件输出引脚函数

GPIO_EventOutputConfig 111

9.2.16 使能事件输出函数

GPIO_EventOutputCmd 111

9.2.17 改变引脚映射函数

GPIO_PinRemapConfig 111

9.2.18 选择EXTI线函数

GPIO_EXTILineConfig 112

9.3 综合练习 113

9.4 小结 113

9.5 习题 114

第10章 FLASH

( 教学视频:24分钟) 115

10.1 Flash闪存的结构 115

10.2 Flash闪存的基本特性 116

10.2.1 Flash闪存读取 116

10.2.2 Flash闪存编程和擦除 116

10.3 Flash的编程方法 116

10.3.1 Flash寄存器结构 117

10.3.2 设置代码延时值函数

Flash_SetLatency 118

10.3.3 使能或禁用半周期访问函数

Flash_HalfCycleAccessCmd 118

10.3.4 使能或禁用预取缓冲区函数

Flash_PrefetchBufferCmd 118

10.3.5 解锁擦除控制器函数Flash_Unlock 118

10.3.6 锁定擦除控制器函数Flash_Lock 119

10.3.7 擦除页函数Flash_ErasePage 119

10.3.8 擦除全部页函数

Flash_EraseAllPages 119

10.3.9 擦除选项字节函数

Flash_EraseOptionBytes 120

10.3.10 字写入函数Flash_ProgramWord 120

10.3.11 半字写入函数

Flash_ProgramHalfWord 121

10.3.12 写选项字节函数Flash_

ProgramOptionByteData 121

10.3.13 页写保护函数Flash_

EnableWriteProtection 122

10.3.14 使能或禁用读保护函数

Flash_ReadOutProtection 123

10.3.15 写选项字节函数Flash_

UserOptionByteConfig 124

10.3.16 获取选项字节函数Flash_

GetUserOptionByte 125

10.3.17 获取写保护选项字节函数Flash_

GetWriteProtectionOptionByte 125

10.3.18 获取读保护状态函数Flash_Get

ReadOutProtectionStatus 125

10.3.19 获取预取缓冲区状态函数

Flash_GetPrefectchBufferStatus 125

10.3.20 使能或禁用中断函数

Flash_ITConfig 126

10.3.21 获取标志位状态函数

Flash_GetFlagStatus 126

10.3.22 清除挂起标志函数

Flash_ClearFlag 127

10.3.23 获取Flash状态函数

Flash_GetStatus 127

10.3.24 等待操作结束函数Flash_

WaitForLastOperation 127

10.4 综合练习 128

10.5 小结 130

10.6 习题 130

第11章 ADC系统

( 教学视频:52分钟) 132

11.1 ADC系统概述 132

11.2 ADC系统功能特性 133

11.2.1 ADC开关控制 133

11.2.2 ADC时钟 133

11.2.3 ADC通道选择 133

11.2.4 ADC的转换模式 133

11.2.5 中断 134

11.2.6 模拟看门狗 134

11.2.7 ADC的扫描模式 134

11.2.8 ADC的注入通道管理 134

11.2.9 间断模式 135

11.2.10 ADC的校准模式 135

11.2.11 ADC的数据对齐 136

11.2.12 可编程的通道采样时间 136

11.2.13 外部触发转换 136

11.2.14 DMA请求 137

11.2.15 双ADC模式 137

11.2.16 温度传感器 138

11.3 ADC系统的编程方法 139

11.3.1 ADC寄存器结构 140

11.3.2 ADC寄存器复位函数ADC_

DeInit 141

11.3.3 参数初始化函数ADC_Init 141

11.3.4 复位ADC_InitStruct函数

ADC_StructInit 143

11.3.5 使能或禁用ADC模块函数

ADC_Cmd 143

11.3.6 使能或禁用DMA请求函数

ADC_DMACmd 143

11.3.7 使能或禁用ADC中断函数

ADC_ITConfig 144

11.3.8 复位ADC校准寄存器函数

ADC_ResetCalibration 144

11.3.9 获取复位校准寄存器状态函数ADC_ GetResetCalibrationStatus 144

11.3.10 开始ADC校准函数

ADC_StartCalibration 145

11.3.11 获取ADC校准状态

ADC_GetCalibrationStatus 145

11.3.12 使能或禁用软件转换函数ADC_

SoftwareStartConvCmd 145

11.3.13 获取软件开始转换状态函数ADC_

GetSoftwareStartConvStatus 146

11.3.14 配置常规组非连续模式函数ADC_

DiscModeChannelCountConfig 146

11.3.15 使能或禁用常规组非连续模式

函数ADC_DiscModeCmd 146

11.3.16 配置ADC常规信道函数ADC_

RegularChannelConfig 147

11.3.17 使能或禁用外部触发函数

ADC_ExternalTrigConvCmd 148

11.3.18 获取转换结果函数ADC_

GetConversionValue 148

11.3.19 获取双重转换结果函数ADC_ GetDualModeConversionValue 148

11.3.20 使能或禁用自动注入组转换函数ADC_AutoInjectedConvCmd 149

11.3.21 使能或禁用非连续模式函数

ADC_InjectedDiscModeCmd 149

11.3.22 配置外部触发器函数ADC_

ExternalTrigInjectedConvConfig 149

11.3.23 使能或禁用注入信道转换

函数 ADC_ExternalTrig

InjectedConvCmd 150

11.3.24 使能或禁用开始注入信道

转换函数 ADC_Software

StartInjectedConvCmd 150

11.3.25 获取启动转换注入状态

函数 ADC_GetSoftware

StartInjectedConvStatus 151

11.3.26 配置ADC注入信道函数

ADC_InjectedChannelConfig 151

11.3.27 配置注入信道音序器长度

函数ADC_Injected

SequencerLengthConfig 152

11.3.28 设置注入信道转换值位移函数

ADC_SetInjectedOffset 152

11.3.29 获取注入信道转换结果

函数ADC_GetInjected

ConversionValue 153

11.3.30 使能或禁用模拟看门狗函数

ADC_AnalogWatchdogCmd 153

11.3.31 配置模拟看门狗域值函数 ADC_AnalogWatchdog

ThresholdsConfig 154

11.3.32 配置模拟看门狗保护函数 ADC_AnalogWatchdog

SingleChannelConfig 154

11.3.33 使能或禁用温度传感函数

ADC_TempSensorVrefintCmd 154

11.3.34 获取ADC标志函数

ADC_GetFlagStatus 155

11.3.35 清除挂起标志函数

ADC_ClearFlag 155

11.3.36 获取中断函数ADC_GetITStatus 155

11.3.37 清除中断挂起位函数

ADC_ClearITPendingBit 156

11.4 综合练习 156

11.5 小结 157

11.6 习题 157

第12章 中断系统

( 教学视频:32分钟) 159

12.1 嵌套向量中断控制器(NVIC) 159

12.2 NVIC的编程方法 161

12.2.1 NVIC寄存器结构 162

12.2.2 复位NVIC外设函数

NVIC_DeInit 163

12.2.3 复位SCB外设函数NVIC_

SCBDeInit 163

12.2.4 配置优先级组函数NVIC_ PriorityGroupConfig 163

12.2.5 初始化NVIC外设函数

NVIC_Init 163

12.2.6 复位NVIC_InitStruct函数

NVIC_StructInit 164

12.2.7 使能PRIMASK优先级函数

NVIC_SETPRIMASK 165

12.2.8 用PRIASK优先级函数

NVIC_RESETPRIMASK 165

12.2.9 使能FAULTMASK优先级函数

NVIC_SETFA- ULTMASK 165

12.2.10 禁用FAULTMASK优先级函数

NVIC_RESET- FAULTMASK 165

12.2.11 配置执行优先级函数NVIC_

BASEPRICONFIG 165

12.2.12 获取BASEPRI掩码值函数

NVIC_GetBASEPRI 166

12.2.13 获取挂起服务的IRQ通道

标识符函数NVIC_GetCurrent

PendingIRQChannel 166

12.2.14 获取IRQ通道挂起位函数 NVIC_

GetIRQChannelPendingBitStatus 166

12.2.15 设置中断挂起位函数NVIC_

GetIRQChannelPendingBit 166

12.2.16 清除中断挂起位函数NVIC_

ClearIRQChannelPendingBit 167

12.2.17 返回活动句柄函数NVIC_

GetCurrentActiveHandle 167

12.2.18 获取IRQ通道活动位函数 NVIC_

GetIRQChannelActiveBitStatus 167

12.2.19 获取ID号函数

NVIC_GetCPUID 167

12.2.20 设置向量表和偏移量函数

NVIC_SetVectorTable 168

12.2.21 系统复位函数NVIC_

GenerateSystemReset 168

12.2.22 核复位函数

NVIC_GenerateCoreReset 168

12.2.23 低功耗模式条件函数

NVIC_SystemLPConfig 168

12.2.24 使能或禁用系统句柄函数

NVIC_SystemHandlerConfig 169

12.2.25 配置系统句柄优先级函数NVIC_

SystemHandlerPriorityConfig 169

12.2.26 获取系统句柄挂起位函数

NVIC_GetSystemHandler

PendingBitStatus 170

12.2.27 设置系统句柄挂起位函数NVIC_ S

etSystemHandlerPendingBit 170

12.2.28 清除系统句柄挂起位函数NVIC_

ClearSystemHandlerPendingBit 171

12.2.29 获取系统句柄活动位函数

NVIC_GetSystemHandler

ActiveBitStatus 171

12.2.30 获取系统故障句柄源函数NVIC_

GetFaultHandlerSources 172

12.2.31 获取故障句柄位置函数

NVIC_GetFaultAddress 172

12.3 外部中断/事件控制器(EXTI) 173

12.3.1 EXTI主要特性 173

12.3.2 EXTI功能说明 173

12.4 EXTI的编程方法 174

12.4.1 EXTI寄存器结构 174

12.4.2 复位EXTI外设函数

EXTI_DeInit 175

12.4.3 初始化EXTI外设函数

EXTI_Init 175

12.4.4 复位EXTI_InitStruct函数

EXTI_StructInit 176

12.4.5 软中断函数

EXTI_GenerateSWInterrupt 176

12.4.6 获取标志状态函数

EXTI_GetFlagStatus 176

12.4.7 清除挂起标志函数

EXTI_ClearFlag 176

12.4.8 获取EXTI置位函数

EXTI_GetITStatus 177

12.4.9 清除挂起位函数

EXTI_ClearITPendingBit 177

12.5 综合练习 177

12.6 小结 181

12.7 习题 181

第13章 异步串行通信接口

( 教学视频:59分钟) 184

13.1 USART结构 184

13.1.1 USART特征描述 184

13.1.2 USART发送器 184

13.1.3 USART接收器 185

13.1.4 LIN模式 185

13.1.5 USART同步模式 186

13.1.6 USART单线半双工通信 186

13.1.7 USART的智能卡功能 186

13.1.8 USART的IrDA模式 186

13.1.9 USART的DMA通信 187

13.1.10 USART的硬件流控制 188

13.1.11 USART的中断请求 188

13.2 USART编程方法 188

13.2.1 USART寄存器结构 189

13.2.2 USART寄存器复位函数

USART_DeInit 190

13.2.3 参数初始化函数

USART_Init 190

13.2.4 复位USART_InitStruct

函数USART_StrucInit 192

13.2.5 使能或禁用USART函数

USART_Cmd 192

13.2.6 使能或禁用中断函数

USART_ITConfig 193

13.2.7 使能或禁用DMA函数

USART_DMACmd 193

13.2.8 设置节点地址函数

USART_SetAddress 194

13.2.9 选择唤醒方式函数

USART_WakeUpConfig 194

13.2.10 USART模式函数USART_

ReceiverWakeUpCmd 194

13.2.11 LIN间隔检波长度函数USART_

LINBreakDetectionConfig 195

13.2.12 使能或者禁用LIN模式

函数USART_LINCmd 195

13.2.13 发送数据函数USART_

SendData 195

13.2.14 接收数据函数USART_

ReceiveData 196

13.2.15 传输间断字符函数

USART_SendBreak 196

13.2.16 设置预警时间函数

USART_SetGuardTime 196

13.2.17 设置时钟预分频器函数

USART_SetPrescaler 196

13.2.18 使能或者禁用智能卡模式函数

USART_SmartCardCmd 197

13.2.19 使能或禁用NACK函数

USART_SmartCardNackCmd 197

13.2.20 使能或者禁用半双工模式函数

USART_HalfDuplexCmd 197

13.2.21 配置IrDA模式函数USART_ IrDAConfig 198

13.2.22 使能或者禁用IrDA模式

函数USART_IrDACmd 198

13.2.23 获取标志是否置位函数

USART_GetFlagStatus 198

13.2.24 清除未决标志函数

USART_ClearFlag 199

13.2.25 获取中断状态函数

USART_GetITStatus 199

13.2.26 清除中断未决位函数USART_

ClearITPendingBit 200

13.3 CAN结构 200

13.3.1 初始化模式 201

13.3.2 正常模式 201

13.3.3 睡眠模式 201

13.3.4 测试模式 202

13.3.5 静默模式 202

13.3.6 环回模式 202

13.3.7 环回静默模式 202

13.4 CAN编程方法 202

13.4.1 CAN寄存器结构 203

13.4.2 CAN寄存器复位函数

CAN_DeInit 204

13.4.3 参数初始化函数CAN_Init 204

13.4.4 过滤参数初始化函数

CAN_FilterInit 207

13.4.5 复位CAN_InitStruct函数

CAN_StructInit 208

13.4.6 使能或禁用CAN中断函数

CAN_ITConfig 209

13.4.7 初始化报文发送函数

CAN_Transmit 209

13.4.8 检查报文发送函数

CAN_TransmitStatus 211

13.4.9 取消发送函数CAN_

CancelTransmit 211

13.4.10 释放FIFO函数CAN_

FIFORelease 212

13.4.11 获取挂起报文数量函数

CAN_MessagePending 212

13.4.12 报文接收函数CAN_Receive 212

13.4.13 低功耗模式函数CAN_Sleep 213

13.4.14 唤醒CAN模块函数

CAN_WakeUp 214

13.4.15 获取CAN标志函数

CAN_GetFlagStatus 214

13.4.16 清除挂起标志CAN_ClearFlag 214

13.4.17 获取中断状态函数

CAN_GetITStatus 215

13.4.18 清除中断挂起位函数

CAN_ClearITPendingBit 216

13.5 综合练习 217

13.6 小结 218

13.7 习题 219

第14章 同步串行通信接口

( 教学视频:52分钟) 221

14.1 SPI结构 221

14.1.1 SPI从模式工作原理 222

14.1.2 SPI主模式工作原理 222

14.1.3 SPI通信的CRC 223

14.1.4 SPI的DMA通信 223

14.1.5 SPI的中断请求 223

14.2 SPI编程方法 224

14.2.1 SPI寄存器结构 224

14.2.2 复位SPI外设寄存器函数

SPI_DeInit 225

14.2.3 初始化外设SPIx寄存器

函数SPI_Init 225

14.2.4 设置SPI_InitStruct结构

成员函数SPI_StructInit 226

14.2.5 使能或者禁用SPI外设

函数SPI_Cmd 226

14.2.6 使能或者禁用SPI中断函数

SPI_ITConfig 226

14.2.7 使能或者禁用SPI的DMA

请求函数SPI_DMACmd 227

14.2.8 发送数据函数SPI_SendData 227

14.2.9 接收数据函数SPI_Receive

Data 227

14.2.10 配置NSS引脚函数SPI_

NSSInternalSoftwareConfig 227

14.2.11 使能或者禁用SPI SS输出

函数SPI_SSOutputCmd 228

14.2.12 设置SPI数据大小函数

SPI_DataSizeConfig 228

14.2.13 发送CRC值函数

SPI_TransmitCRC 228

14.2.14 使能或者禁用CRC值计算

函数SPI_CalculateCRC 228

14.2.15 获取CRC寄存器值函数

SPI_GetCRC 229

14.2.16 获取CRC多项式寄存器值函数

SPI_GetCRCPolynomial 229

14.2.17 双向模式下数据方向函数SPI_

BiDirectionalLineConfig 229

14.2.18 获取SPI标志位函数

SPI_GetFlagStatus 230

14.2.19 清除挂起标志位函数

SPI_ClearFlag 230

14.2.20 获取SPI中断函数

SPI_GetITStatus 230

14.2.21 清除中断挂起位函数

SPI_ClearITPendingBit 231

14.3 I2C结构 231

14.3.1 I2C从模式工作原理 232

14.3.2 I2C主模式工作原理 233

14.3.3 SMBus功能 233

14.3.4 I2C的DMA功能 233

14.3.5 I2C的中断请求 234

14.4 I2C编程方法 235

14.4.1 I2C寄存器结构 236

14.4.2 复位I2C外设寄存器函数

I2C_DeInit 236

14.4.3 初始化I2C外设函数I2C_Init 237

14.4.4 复位I2C_InitStruct结构

函数I2C_StructInit 238

14.4.5 使能或者禁用I2C外设

函数I2C_Cmd 238

14.4.6 使能或者禁用DMA请求

函数I2C_DMACmd 238

14.4.7 标示最后DMA传输函数

I2C_DMALastTransferCmd 239

14.4.8 产生起始信号函数

I2C_GenerateSTART 239

14.4.9 产生停止信号函数

I2C_GenerateSTOP 239

14.4.10 使能或者禁用应答函数

I2C_AcknowledgeConfig 240

14.4.11 配置I2C首地址2函数

I2C_OwnAddress2Config 240

14.4.12 使能或者禁用双重地址模式

函数I2C_DualAddressCmd 240

14.4.13 使能或者禁用通用调用特性

函数I2C_GeneralCallCmd 241

14.4.14 使能或者禁用I2C中断

函数I2C_ITConfig 241

14.4.15 发送数据函数I2C_SendData 241

14.4.16 接收数据函数

I2C_ReceiveData 242

14.4.17 发送地址字节函数

I2C_Send7bitAddress 242

14.4.18 读取I2C寄存器函数

I2C_ReadRegister 242

14.4.19 使能或禁用软件复位函数

I2C_SoftwareResetCmd 242

14.4.20 配置驱动SMBAlert引脚函数

I2C_SMBusAlertConfig 243

14.4.21 使能或者禁用PEC传输

函数I2C_TransmitPEC 243

14.4.22 选择PEC位置函数

I2C_PECPositionConfig 243

14.4.23 使能或禁用PEC计算值

函数I2C_CalculatePEC 244

14.4.24 获取PEC值函数

I2C_GetPEC 244

14.4.25 使能或者禁用I2C ARP

函数I2C_ARPCmd 244

14.4.26 使能或禁用I2C时钟伸展函数

I2C_StretchClockCmd 245

14.4.27 配置占空比函数I2C_FastMode

DutyCycleConfig 245

14.4.28 获取最近的I2C事件

函数I2C_GetLastEvent 245

14.4.29 检查I2C事件函数

I2C_CheckEvent 246

14.4.30 获取I2C标志位函数

I2C_GetFlagStatus 246

14.4.31 清除挂起标志函数

I2C_ClearFlag 246

14.4.32 获取I2C中断函数

I2C_GetITStatus 247

14.4.33 清除中断挂起位函数

I2C_ClearITPendingBit 247

14.5 综合练习 248

14.6 小结 250

14.7 习题 251

第15章 通用定时器系统

( 教学视频:39分钟) 253

15.1 系统计时器(SysTick)及其

编程方法 253

15.1.1 SysTick寄存器结构 253

15.1.2 配置SysTick时钟源函数

SysTick_CLKSourceConfig 253

15.1.3 设置SysTick重载值函数

SysTick_Setreload 254

15.1.4 使能或禁用SysTick计数器

函数SysTick_CounterCmd 254

15.1.5 使能或者取消SysTick中断

函数SysTick_ITConfig 254

15.1.6 获取SysTick计数器值函数

SysTick_GetCounter 255

15.1.7 获取SysTick标志位函数

SysTick_GetFlagStatus 255

15.2 通用定时器(TIM)结构 255

15.2.1 时基单元 256

15.2.2 计数器的模式 256

15.2.3 通用定时器的特殊工作

模式 257

15.3 通用定时器(TIM)的编程方法 258

15.3.1 TIM寄存器结构 260

15.3.2 复位TIM外设寄存器函数

TIM_DeInit 261

15.3.3 初始化TIMx时间基单元

函数TIM_TimeBaseInit 261

15.3.4 初始化TIMx外设函数

TIM_OCInit函数 261

15.3.5 初始化TIMx外设函数

TIM_ICInit 263

15.3.6 初始化TIM_TimeBaseInitStruct

结构函数 TIM_Time

BaseStructInit 263

15.3.7 初始化TIM_OCInitStruct结构

函数TIM_OCStructInit 264

15.3.8 初始化TIM_ICInitStruct结构

函数TIM_ICStructInit 264

15.3.9 使能或者禁用TIM外设函数

TIM_Cmd 264

15.3.10 使能或者禁用TIM中断

函数TIM_ITConfig 265

15.3.11 配置DMA接口函数

TIM_DMAConfig 265

15.3.12 使能或者禁用DMA请求

函数TIM_DMACmd 265

15.3.13 配置TIMx内部时钟函数

TIM_InternalClockConfig 266

15.3.14 配置TIMx内部触发器为

外部时钟函数 TIM_ITRx

ExternalClockConfig 266

15.3.15 配置TIMx触发器为外部

时钟函数TIM_TixExternal

Config 266

15.3.16 配置TIMx外部时钟模型1函数

TIM_ETRClockMode1Config 266

15.3.17 配置TIMx外部时钟模型2函数

TIM_ETRClockMode2Config 267

15.3.18 配置TIMx外部触发函数TIM_ETRConfig 267

15.3.19 选择TIMx输入触发源函数

TIM_SelectInputTrigger 267

15.3.20 设置TIMx预分频函数

TIM_PrescalerConfig 268

15.3.21 设置TIMx计数器模式函数

TIM_CounterModeConfig 268

15.3.22 设置TIMx输出1函数

TIM_ForcedOC1Config 268

15.3.23 设置TIMx输出2函数

TIM_ForcedOC2Config 269

15.3.24 设置TIMx输出3函数

TIM_ForcedOC3Config 269

15.3.25 设置TIMx输出4函数

TIM_ForcedOC4Config 269

15.3.26 使能或禁用ARR上的

预装载寄存器函数

TIM_ARRPreloadConfig 270

15.3.27 选择外设捕获比较DMA

源函数TIM_SelectCCDMA 270

15.3.28 使能或禁用CCR1上的

预装载寄存器函数

TIM_OC1PreloadConfig 270

15.3.29 使能或禁用CCR2上的

预装载寄存器函数

TIM_OC2PreloadConfig 271

15.3.30 使能或禁用CCR3上的

预装载寄存器函数

TIM_OC3PreloadConfig 271

15.3.31 使能或禁用CCR4上的

预装载寄存器函数

TIM_OC4PreloadConfig 271

15.3.32 设置捕获比较1快速特征

函数TIM_OC1FastConfig 272

15.3.33 设置捕获比较2快速特征

函数TIM_OC2FastConfig 272

15.3.34 设置捕获比较3快速特征

函数TIM_OC3FastConfig 272

15.3.35 设置捕获比较4快速特征

函数TIM_OC4FastConfig 273

15.3.36 清除或者保持OCREF1信号

函数TIM_ClearOC1Ref 273

15.3.37 清除或者保持OCREF2信号

函数TIM_ClearOC2Ref 273

15.3.38 清除或者保持OCREF3信号

函数TIM_ClearOC3Ref 274

15.3.39 清除或者保持OCREF4信号

函数TIM_ClearOC4Ref 274

15.3.40 使能或禁用更新事件函数

TIM_UpdateDisableConfig 274

15.3.41 设置TIMx编码界面函数TIM_

EncoderInterfaceConfig 275

15.3.42 设置事件由软件产生函数

TIM_GenerateEvent 275

15.3.43 设置TIMx通道1极性函数

TIM_OC1PolarityConfig 275

15.3.44 设置TIMx通道2极性函数

TIM_OC2PolarityConfig 276

15.3.45 设置TIMx通道3极性函数

TIM_OC3PolarityConfig 276

15.3.46 设置TIMx通道4极性函数

TIM_OC4PolarityConfig 276

15.3.47 设置TIMx更新请求源函数

TIM_UpdateRequestConfig 276

15.3.48 使能或禁用霍尔传感器接口

函数TIM_SelectHallSensor 277

15.3.49 设置TIM单脉冲模式函数

TIM_SelectOnePulseMode 277

15.3.50 选择触发输出模式函数

TIM_SelectOutputTrigger 277

15.3.51 选择TIMx从模式函数

TIM_SelectSlaveMode 278

15.3.52 设置或者重置主/从模式

函数TIM_SelectMaster

SlaveMode 278

15.3.53 设置TIM计数器寄存器

值函数TIM_SetCounter 278

15.3.54 设置TIM自动重装载寄存

器值函数TIM_SetAutoreload 279

15.3.55 设置捕获比较1寄存器值

函数TIM_SetCompare1 279

15.3.56 设置捕获比较2寄存器值

函数TIM_SetCompare2 279

15.3.57 设置捕获比较3寄存器值

函数TIM_SetCompare3 279

15.3.58 设置捕获比较4寄存器值

函数TIM_SetCompare4 279

15.3.59 设置TIMx输入捕获1

预分频函数TIM_SetIC1

Prescaler 280

15.3.60 设置TIMx输入捕获2

预分频函数TIM_SetIC2

Prescaler 280

15.3.61 设置TIMx输入捕获3

预分频函数TIM_SetIC3

Prescaler 280

15.3.62 设置TIMx输入捕获4

预分频函数TIM_SetIC4

Prescaler 280

15.3.63 设置TIMx时钟分割值函数TIM_SetClockDivision 281

15.3.64 获取TIMx输入捕获1值

函数TIM_GetCapture1 281

15.3.65 获取TIMx输入捕获2值

函数TIM_GetCapture2 281

15.3.66 获取TIMx输入捕获3值

函数TIM_GetCapture3 281

15.3.67 获取TIMx输入捕获4值

函数TIM_GetCapture4 282

15.3.68 获取TIMx计数器值函数TIM_GetCounter 282

15.3.69 获取TIMx预分频值函数TIM_GetPrescaler 282

15.3.70 获取TIM标志位函数TIM_GetFlagStatus 282

15.3.71 清除挂起标志位函数TIM_ClearFlag 283

15.3.72 获取TIM中断函数TIM_GetITStatus 283

15.3.73 清除中断挂起标志位函数TIM_ClearITPendingBit 283

15.4 综合练习 283

15.5 小结 286

15.6 习题 286

第16章 高级控制定时器系统

( 教学视频:46分钟) 288

16.1 高级控制定时器(TIM1)结构 288

16.1.1 时基单元 288

16.1.2 计数器模式 289

16.1.3 重复向下计数器 290

16.1.4 高级控制定时器的特殊

工作模式 290

16.1.5 与霍尔元件的接口 291

16.2 高级控制定时器(TIM1)的

编程方法 291

16.2.1 TIM1寄存器结构 293

16.2.2 复位TIM1外设函数TIM1_DeInit 294

16.2.3 初始化TIM1时间基数单位

函数TIM1_TIM1BaseInit 295

16.2.4 初始化TIM1通道1函数TIM1_OC1Init 295

16.2.5 初始化TIM1通道2函数TIM1_OC2Init 295

16.2.6 初始化TIM1通道3函数TIM1_OC3Init 296

16.2.7 初始化TIM1通道4函数

TIM1_OC4Init 296

16.2.8 设置刹车特性函数

TIM1_BDTRConfig 297

16.2.9 初始化外设TIM1函数

TIM1_ICInit 297

16.2.10 设置PWM输入模式函数TIM1_PWMIConfig 298

16.2.11 复位TIM1_TIM1BaseInit

Struct结构成员函数TIM1_

TIM1BaseStructInit 299

16.2.12 复位TIM1_OCInitStruct

结构成员函数TIM1_OC

StructInit 299

16.2.13 复位TIM1_ICInitStruct

结构成员函数TIM1_IC

StructInit 299

16.2.14 复位TIM1_BDTRInitStruct

结构成员函数 TIM1_BDTRStructInit 300

16.2.15 使能或者禁用TIM1外设

函数TIM1_Cmd 300

16.2.16 使能或禁用TIM1主输出

函数TIM1_CtrlPWM

Outputs 300

16.2.17 使能或禁用TIM1中断TIM1_ITConfig函数 300

16.2.18 设置DMA接口函数TIM1_DMAConfig 301

16.2.19 使能或禁用DMA请求

函数TIM1_DMACmd 301

16.2.20 设置DMA内部时钟函数TIM1_InternalClockConfig 302

16.2.21 配置外部时钟模式1函数

TIM1_ETRClockMode1

Config 302

16.2.22 配置外部时钟模式2函数TIM1_ETRClockMode2Config 302

16.2.23 配置TIM1外部触发函数TIM1_ETRConfig 302

16.2.24 设置内部触发为外部时钟模式

函数 TIM1_ITRxExternal

ClockConfig 303

16.2.25 设置TIM1触发为外部时

钟函数TIM1_TixExternal

ClockConfig 303

16.2.26 选择TIM1输入触发源函数TIM1_SelectInputTrigger 303

16.2.27 使能或禁用更新事件函数TIM1_UpdateDisable

Config 304

16.2.28 设置更新请求源函数

TIM1_UpdateRequest

Config 304

16.2.29 使能或禁用霍尔传感器

接口函数TIM1_Select

HallSensor 304

16.2.30 设置TIM1单脉冲模式

函数TIM1_SelectOne

PulseMode 304

16.2.31 选择触发输出模式函数

TIM1_SelectOutput

Trigger 304

16.2.32 选择TIM1从模式函数

TIM1_SelectSlaveMode 305

16.2.33 选择TIM1主/从模式

函数TIM1_SelectMaster

SlaveMode 305

16.2.34 设置TIM1编码界面函数

TIM1_EncoderInterface

Config 305

16.2.35 设置TIM1预分频器函数TIM1_PrescalerConfig 306

16.2.36 设置TIM1计数器模式

函数TIM1_CounterMode

Config 306

16.2.37 设置TIM1输出1电平函数TIM1_ForcedOC1Config 306

16.2.38 设置TIM1输出2电平函数TIM1_ForcedOC2Config 306

16.2.39 设置TIM1输出3电平函数TIM1_ForcedOC3Config 307

16.2.40 设置TIM1输出4电平函数TIM1_ForcedOC4Config 307

16.2.41 使能或禁用预装载寄存器

TIM1_ARRPreloadConfig

函数 307

16.2.42 选择TIM1外设的通信

事件函数TIM1_SelectCOM 307

16.2.43 选择捕获比较DMA源函数

TIM1_SelectCCDMA 308

16.2.44 设置或重置捕获比较

控制位函数TIM1_CC

PreloadControl 308

16.2.45 使能或禁用CCR1上的

预装载寄存器函数 TIM1_OC1PreloadConfig 308

16.2.46 使能或禁用CCR2上的

预装载寄存器函数

TIM1_OC2PreloadConfig 308

16.2.47 使能或禁用CCR3上的

预装载寄存器函数

TIM1_OC3PreloadConfig 309

16.2.48 使能或禁用CCR4上的

预装载寄存器函数

TIM1_OC4PreloadConfig 309

16.2.49 设置捕获比较1快速特征

函数TIM1_OC1FastConfig 309

16.2.50 设置捕获比较2快速特征

函数TIM1_OC2FastConfig 309

16.2.51 设置捕获比较3快速特征

函数TIM1_OC3FastConfig 309

16.2.52 设置捕获比较4快速特征

函数TIM1_OC4FastConfig 310

16.2.53 清除或保持OCREF1信号

函数TIM1_ClearOC1Ref 310

16.2.54 清除或保持OCREF2信号

函数TIM1_ClearOC2Ref 310

16.2.55 清除或保持OCREF3信号

函数TIM1_ClearOC3Ref 310

16.2.56 清除或保持OCREF4信号

函数TIM1_ClearOC4Ref 311

16.2.57 设置事件由软件产生函数TIM1_GenerateEvent 311

16.2.58 设置通道1极性函数TIM1_OC1PolarityConfig 311

16.2.59 设置通道1N极性函数TIM1_OC1NpolarityConfig 311

16.2.60 设置通道2极性函数

TIM1_OC2PolarityConfig 311

16.2.61 设置通道2N极性函数

TIM1_OC2NpolarityConfig 312

16.2.62 设置通道3极性函数

TIM1_OC3PolarityConfig 312

16.2.63 设置通道3N极性函数

TIM1_OC3NpolarityConfig 312

16.2.64 设置通道4极性函数

TIM1_OC4PolarityConfig 312

16.2.65 设置计数器寄存器值函数

TIM1_SetCounter 312

16.2.66 使能或禁用捕获比较通道

x函数TIM1_CCxCmd 313

16.2.67 使能或禁用捕获比较通道

xN函数TIM1_CCxNCmd 313

16.2.68 选择TIM1输出比较模式

函数TIM1_SelectOCxM 313

16.2.69 设置自动重装载寄存器值

函数TIM1_SetAutoreload 314

16.2.70 设置捕获比较1寄存器值

函数TIM1_SetCompare1 314

16.2.71 设置捕获比较2寄存器值

函数TIM1_SetCompare2 314

16.2.72 设置捕获比较3寄存器值

函数TIM1_SetCompare3 315

16.2.73 设置捕获比较4寄存器值

函数TIM1_SetCompare4 315

16.2.74 设置输入捕获1预分频值函

数TIM1_SetIC1Prescaler 315

16.2.75 设置输入捕获2预分频值函

数TIM1_SetIC2Prescaler 315

16.2.76 设置输入捕获3预分频值函

数TIM1_SetIC3Prescaler 315

16.2.77 设置输入捕获4预分频值函

数TIM1_SetIC4Prescaler 316

16.2.78 设置时钟分割值函数

TIM1_SetClockDivision 316

16.2.79 获取输入捕获1的值函数

TIM1_GetCapture1 316

16.2.80 获取输入捕获2的值函数

TIM1_GetCapture2 316

16.2.81 获取输入捕获3的值函数

TIM1_GetCapture3 317

16.2.82 获取输入捕获4的值函数

TIM1_GetCapture4 317

16.2.83 获取TIM1计数器的值函数

TIM1_GetCounter 317

16.2.84 获取TIM1预分频值函数

TIM1_GetPrescaler 317

16.2.85 获取TIM1标志位函数

TIM1_GetFlagStatus 317

16.2.86 清除TIM1挂起标志位函数

TIM1_ClearFlag 317

16.2.87 获取TIM1中断函数

TIM1_GetITStatus 318

16.2.88 清除TIM1中断挂起

标志位函数TIM1_

ClearITPendingBit 318

16.3 综合练习 318

16.4 小结 320

16.5 习题 320

第17章 时钟控制系统

( 教学视频:43分钟) 322

17.1 复位和时钟控制(RCC) 322

17.1.1 复位的类型 322

17.1.2 时钟的类型 323

17.2 复位和时钟控制(RCC)的

编程方法 325

17.2.1 RCC寄存器结构 326

17.2.2 RCC外围设备复位函数

RCC_DeInit 326

17.2.3 配置高速振荡器HSE函数

RCC_HSEConfig 327

17.2.4 等待HSE完成启动函数

RCC_WaitForHSEStartUp 327

17.2.5 校正HIS函数RCC_

AdjustHSICalibrationValue 328

17.2.6 使能或禁用HIS函数

RCC_HSICmd 328

17.2.7 配置PLL函数RCC_

PLLConfig 328

17.2.8 使能或者禁用PLL函数

RCC_PLLCmd 328

17.2.9 配置系统时钟函数

RCC_SYSCLKConfig 329

17.2.10 获取系统时钟源函数

RCC_GetSYSCLKSource 329

17.2.11 配置AHB时钟函数

RCC_HCLKConfig 329

17.2.12 配置低速APB时钟函数

RCC_PCLK1Config 330

17.2.13 配置高速APB时钟函数

RCC_PCLK2Config 330

17.2.14 使能或者禁用RCC

中断函数RCC_ITConfig 330

17.2.15 配置USB时钟函数

RCC_USBCLKConfig 331

17.2.16 配置ADC时钟函数

RCC_ADCCLKConfig 331

17.2.17 配置LSE函数

RCC_LSEConfig 331

17.2.18 使能或者禁用LSI函数

RCC_LSICmd 332

17.2.19 配置RTC时钟函数RCC_RTCCLKConfig 332

17.2.20 使能或者禁用RTC时钟

函数RCC_RTCCLKCmd 332

17.2.21 获取时钟频率函数

RCC_GetClocksFreq 333

17.2.22 使能或禁用AHB外围

设备时钟函数RCC_AHB

PeriphClockCmd 334

17.2.23 使能或者禁用高速APB2

外围设备时钟函数RCC_

APB2PeriphClockCmd 334

17.2.24 使能或者禁用低速APB1

外围设备时钟函数RCC_

APB1PeriphClockCmd 334

17.2.25 高速APB2外围设备复位

函数RCC_APB2Periph

ResetCmd 335

17.2.26 低速APB1外围设备复位函数

RCC_APB1PeriphResetCmd 335

17.2.27 备份域复位函数

RCC_BackupResetCmd 335

17.2.28 使能或者禁用时钟安全

系统函数RCC_Clock

SecuritySystemCmd 336

17.2.29 选择输出时钟源函数

RCC_MCOConfig 336

17.2.30 获取RCC标志函数

RCC_GetFlagStatus 336

17.2.31 清除RCC复位标志函数

RCC_ClearFlag 337

17.2.32 获取RCC中断函数

RCC_GetITStatus 337

17.2.33 清除RCC中断挂起位函数

RCC_ClearITPendingBit 338

17.3 实时时钟(RTC) 338

17.3.1 RTC的复位 338

17.3.2 读RTC寄存器 338

17.3.3 配置RTC寄存器 339

17.3.4 RTC标志的设置 339

17.4 实时时钟(RTC)的编程方法 339

17.4.1 RTC寄存器结构 340

17.4.2 使能或者禁用RTC中断

函数RTC_ITConfig 340

17.4.3 进入RTC配置模式函数

RTC_EnterConfigMode 341

17.4.4 跳出RTC配置模式函数

RTC_ExitConfigMode 341

17.4.5 获取RTC计数值函数

RTC_GetCounter 341

17.4.6 设置RTC计数值函数

RTC_SetCounter 341

17.4.7 获取RTC预分频数值函数

TC_GetPrescaler 342

17.4.8 设置RTC预分频数值函数

RTC_SetPrescaler 342

17.4.9 设置RTC警报值函数

RTC_SetAlarm 342

17.4.10 获取RTC分割值函数

RTC_GetDivider 342

17.4.11 等待RTC寄存器写完成函数

RTC_WaitForLastTask 342

17.4.12 等待同步函数

RTC_WaitForSynchro 343

17.4.13 获取RTC标志位函数

RTC_GetFlagStatus 343

17.4.14 清除RTC挂起标志位函数

RTC_ClearFlag 343

17.4.15 获取RTC中断函数

RTC_GetITStatus 343

17.4.16 清除RTC中断挂起位函数

RTC_ClearITPendingBit 344

17.5 综合练习 344

17.6 小结 348

17.7 习题 348

第18章 看门狗系统

( 教学视频:22分钟) 351

18.1 独立看门狗(IWDG)简介 351

18.2 独立看门狗(IWDG)的编程方法 352

18.2.1 IWDG寄存器结构 352

18.2.2 使能或禁用写寄存器函数

IWDG_WriteAccessCmd 352

18.2.3 设置IWDG预分频因子

函数IWDG_SetPrescaler 353

18.2.4 设置IWDG重载寄存器

函数IWDG_SetReload 353

18.2.5 重载IWDG计数器函数

IWDG_ReloadCounter 353

18.2.6 使能独立看门狗函数

IWDG_Enable 353

18.2.7 获取IWDG标志函数

IWDG_GetFlagStatus 354

18.3 窗口看门狗(WWDG)简介 354

18.3.1 窗口看门狗(WWDG)的

基本功能 355

18.3.2 编写窗口看门狗(WWDG)

超时程序 355

18.4 窗口看门狗(WWDG)的

编程方法 355

18.4.1 WWDG寄存器结构 356

18.4.2 复位WWDG外围设备寄存器

复位函数WWDG_DeInit 356

18.4.3 设置WWDG预分频因子

函数WWDG_SetPrescaler 356

18.4.4 设置窗口值函数

WWDG_SetWindowValue 357

18.4.5 使能EWI函数

WWDG_EnableIT 357

18.4.6 设置WWDG计数器函数

WWDG_SetCounter 357

18.4.7 使能WWDG函数

WWDG_Enable 357

18.4.8 获取中断标志位函数

WWDG_GetFlagStatus 357

18.4.9 清除中断标志位函数

WWDG_ClearFlag 358

18.5 综合练习 358

18.6 小结 362

18.7 习题 362

第19章 备份寄存器(BKP)

( 教学视频:18分钟) 364

19.1 备份寄存器(BKP)简介 364

19.1.1 侵入检测 364

19.1.2 RTC校准 364

19.2 备份寄存器(BKP)的编程方法 365

19.2.1 BKP寄存器结构 365

19.2.2 BKP寄存器复位函数

BKP_DeInit 366

19.2.3 配置侵入检测引脚有效

电平函数BKP_Tamper

PinLevelConfig 366

19.2.4 使能或禁用侵入检测引脚

函数BKP_TamperPinCmd 366

19.2.5 使能或禁用侵入检测引脚

中断函数BKP_ITConfig 366

19.2.6 使能或禁用校准时钟输出

函数 BKP_RTCCalibration

ClockOutputCmd 367

19.2.7 设置RTC时钟校准值函数

BKP_SetRTCCalibrationValue 367

19.2.8 写备份寄存器函数BKP_

WriteBackupRegister 367

19.2.9 读备份寄存器函数BKP_

ReadBackupRegister 367

19.2.10 获取侵入检测引脚事件标志

函数BKP_GetFlagStatus 367

19.2.11 清除事件挂起标志函数

BKP_ClearFlag 368

19.2.12 获取中断状态函数

BKP_GetITStatus 368

19.2.13 清除中断挂起位函数

BKP_ClearITPendingBit 368

19.3 综合练习 368

19.4 小结 370

19.5 习题 370

第20章 DMA控制器

( 教学视频:26分钟) 372

20.1 DMA控制器简介 372

20.1.1 DMA寄存器的基本特性 372

20.1.2 DMA寄存器的基本功能 373

20.2 DMA控制器的编程方法 375

20.2.1 DMA寄存器结构 375

20.2.2 DMA通道寄存器复位函数

DMA_DeInit 375

20.2.3 参数初始化函数DMA_Init 376

20.2.4 复位DMA_InitStruct函数

DMA_StructInit 378

20.2.5 使能或禁用DMA通道函数

DMA_Cmd 378

20.2.6 使能或禁用DMA通道

中断函数DMA_ITConfig 378

20.2.7 获取剩余数据单元函数

DMA_GetCurrDataCounter 379

20.2.8 获取DMA通道标志函数

DMA_GetFlagStatus 379

20.2.9 清除挂起标志函数DMA_

ClearFlag 380

20.2.10 获取中断状态函数

DMA_GetITStatus 380

20.2.11 清除挂起位函数DMA

ClearITPendingBit 381

20.3 综合练习 381

20.4 小结 383

20.5 习题 383

第21章 电源控制(PWR)

( 教学视频:34分钟) 386

21.1 电源控制的结构 386

21.2 电源管理器 387

21.2.1 上电复位(POR)和

掉电复位(PDR) 387

21.2.2 可编程电压监测器(PVD) 387

21.3 低功耗模式 387

21.3.1 降低系统时钟 388

21.3.2 外部时钟的控制 388

21.3.3 睡眠模式 388

21.3.4 停止模式 389

21.3.5 待机模式 390

21.3.6 低功耗模式下的自动唤醒

(AWU) 390

21.4 电源控制(PWR)的编程方法 390

21.4.1 GPIO寄存器结构 391

21.4.2 PWR外围寄存器复位函数

PWR_DeInit 391

21.4.3 使能或禁用备份寄存器函数

PWR_BackupAccessCmd 391

21.4.4 使能或禁用电源电压探测

器函数PWR_PVDCmd 391

21.4.5 配置电压门限值函数

PWR_PVDLevelConfig 392

21.4.6 使能或禁用唤醒引脚函数

PWR_WakeUpPinCmd 392

21.4.7 进入STOP模式函数

PWR_EnterSTOPMode 392

21.4.8 进入STANDBY模式函数

PWR_EnterSTANDBYMode 393

21.4.9 获取PWR标志位状态函数

PWR_GetFlagStatus 393

21.4.10 清除PWR挂起标志位

函数PWR_ClearFlag 393

21.5 综合练习 394

21.6 小结 397

21.7 习题 397

第四篇 嵌入式系统实战

第22章 嵌入式实时操作系统

FREERTOS的移植

( 教学视频:22分钟) 399

22.1 获取FreeRTOS内核 399

22.2 在STM32上移植FreeRTOS 399

22.2.1 宏定义部分 399

22.2.2 C接口部分 400

22.2.3 汇编处理部分 402

22.2.4 创建测试任务 403

22.3 小结 405

22.4 习题 405

第23章 嵌入式系统UC/OS-Ⅱ的移植

( 教学视频:23分钟) 407

23.1 获取UC/OS-Ⅱ嵌入式系统内核 407

23.2 在STM32上移植UC/OS-Ⅱ 407

23.2.1 移植要求 407

23.2.2 头文件OS_CPU.H 408

23.2.3 C文件OS_CPU_C.C 409

23.2.4 汇编文件OS_CPU_A.ASM 411

23.2.5 测试任务 413

23.3 小结 416

23.4 习题 416