图书目录

目录

第1章ARM CortexM3嵌入式系统1

1.1嵌入式系统概述1

1.1.1嵌入式系统的定义和特点1

1.1.2嵌入式系统的应用领域1

1.2ARM与STM32概述2

1.2.1ARM简介2

1.2.2STM323

1.2.3微控制器软件接口标准6

1.3嵌入式系统的软件6

1.3.1不使用操作系统的嵌入式软件6

1.3.2使用操作系统的嵌入式软件7

1.4学习STM32的方法8

练习题10

第2章使用寄存器模式开发11

2.1STM32F1系统架构11

2.2STM32F1存储器系统12

2.2.1存储器组织12

2.2.2存储器映射13

2.3通用输入/输出14

2.3.1STM32F1通用输入/输出简介14

2.3.2GPIO的位结构16

2.3.3GPIO的工作模式17

2.3.4GPIO的寄存器20

2.4复位和时钟控制23

2.4.1RCC框图24

2.4.2RCC的主要作用25

2.4.3RCC_APB2ENR寄存器26

2.5寄存器编程模式点亮LED灯示例27

2.5.1硬件设计27

2.5.2工程文件分析27

2.5.3用户文件31

2.5.4配置下载调试工具33

2.5.5编译下载33

练习题34

第3章使用HAL库开发GPIO35

3.1STM32CubeMX概述35

3.2STM32 HAL库35

3.2.1HAL固件库简介35

3.2.2HAL库文件36

3.3GPIO的HAL库用法39

3.3.1GPIO寄存器结构体GPIO_TypeDef39

3.3.2GPIO初始化结构体GPIO_InitTypeDef40

3.3.3GPIO相关HAL库函数41

3.4STM32CubeMX应用示例44

3.4.1硬件设计44

3.4.2STM32CubeMX工程配置44

3.4.3main文件解析50

3.4.4编译下载53

练习题54

第4章STM32中断系统55

4.1中断的基本概念55

4.2STM32F103的中断系统56

4.2.1中断和异常向量56

4.2.2嵌套向量中断控制器59

4.2.3中断优先级59

4.2.4中断服务处理61

4.2.5NVIC相关HAL库函数63

4.3外部中断/事件控制器65

4.3.1外部中断/事件控制器简介65

4.3.2外部中断/事件线66

4.4外部中断控制示例67

4.4.1STM32CubeMX工程配置67

4.4.2中断配置与中断服务函数68

4.4.3用户代码70

4.4.4下载验证71

练习题71

第5章定时器与蜂鸣器72

5.1STM32F103定时器概述72

5.2基本定时器原理72

5.3定时器的HAL库用法75

5.3.1定时器寄存器结构体TIM_TypeDef75

5.3.2定时器句柄结构体TIM_HandleTypeDef76

5.3.3TIM相关HAL库函数77

5.4基本定时器应用示例78

5.4.1STM32CubeMX工程配置78

5.4.2定时器配置与中断服务函数79

5.4.3用户代码81

5.4.4下载验证82

5.5蜂鸣器发出不同频率声音应用示例82

5.5.1蜂鸣器简介82

5.5.2动态调整定时器输出频率83

5.6定时器PWM输出86

5.6.1PWM简介86

5.6.2简单音乐播放示例87

5.7系统嘀嗒定时器91

5.7.1系统嘀嗒定时器简介91

5.7.2延时函数HAL_Delay的实现原理93

练习题94

第6章串口通信与DMA95

6.1数据通信的基本概念95

6.1.1数据通信方式95

6.1.2串行通信简介95

6.2STM32F1的USART 96

6.2.1USART介绍96

6.2.2USART的工作原理97

6.2.3USART中断控制99

6.3串口的HAL库用法101

6.3.1串口寄存器结构体USART_TypeDef101

6.3.2串口句柄结构体UART_HandleTypeDef101

6.3.3USART相关HAL库函数102

6.4USART1接收不定长数据及回显示例104

6.4.1STM32CubeMX工程配置104

6.4.2串口配置及中断服务函数106

6.4.3重定义printf函数109

6.4.4用户代码109

6.4.5下载验证111

6.5直接存储器存取111

6.5.1直接存储器存取简介111

6.5.2STM32F103的DMA112

6.5.3DMA寄存器结构体DMA_Channel_TypeDef114

6.5.4DMA句柄结构体DMA_HandleTypeDef115

6.6串口DMA控制116

6.6.1串口DMA发送116

6.6.2串口DMA接收117

6.6.3USART DMA相关HAL库函数117

6.7USART1的DMA通信示例118

6.7.1STM32CubeMX工程配置118

6.7.2串口配置代码119

6.7.3用户代码121

6.7.4下载验证122

练习题123

第7章模数转换与数模转换124

7.1ADC简介124

7.2STM32F103的ADC125

7.2.1ADC模块结构125

7.2.2ADC的分组及数据对齐126

7.2.3ADC触发与启动127

7.2.4ADC时钟与转换时间127

7.2.5ADC的转换模式128

7.2.6ADC中断和DMA请求129

7.2.7ADC校准130

7.3ADC的HAL库用法130

7.3.1ADC寄存器结构体ADC_TypeDef130

7.3.2ADC句柄结构体ADC_HandleTypeDef130

7.3.3ADC相关HAL库函数131

7.4ADC应用示例133

7.4.1硬件设计133

7.4.2STM32CubeMX工程配置133

7.4.3ADC1配置代码134

7.4.4用户代码137

7.4.5下载验证138

7.5DAC简介138

7.6STM32F103的DAC工作原理139

7.6.1DAC模块结构139

7.6.2DAC数据格式与转换启动140

7.6.3DAC的触发选择141

7.6.4DAC的输出电压141

7.6.5DAC的DMA请求141

7.7DAC的HAL库用法141

7.7.1DAC寄存器结构体DAC_TypeDef141

7.7.2DAC规则通道结构体定义DAC_ChannelConfTypeDef142

7.7.3DAC相关HAL库函数143

7.8简易波形发生器示例144

7.8.1STM32CubeMX工程配置144

7.8.2DAC配置代码145

7.8.3用户代码148

7.8.4下载验证150

练习题151

第8章实时时钟与电源控制152

8.1实时时钟(RTC)152

8.1.1RTC简介152

8.1.2BCD码简介152

8.1.3STM32F1的RTC153

8.2备份寄存器154

8.3RTC的HAL库用法155

8.3.1RTC寄存器结构体RTC_TypeDef155

8.3.2RTC句柄结构体RTC_HandleTypeDef155

8.3.3RTC相关的结构体156

8.3.4RTC相关HAL库函数157

8.4实时时钟应用示例159

8.4.1硬件设计160

8.4.2STM32CubeMX工程配置160

8.4.3RTC配置代码162

8.4.4用户代码164

8.4.5下载验证165

8.5STM32F103电源控制166

8.5.1STM32F103的电源系统166

8.5.2低功耗模式167

8.6PWR的HAL库用法168

8.6.1PWR寄存器结构体PWR_TypeDef168

8.6.2WFI和WFE命令168

8.6.3进入低功耗模式库函数169

8.7电源控制应用示例170

8.7.1硬件设计170

8.7.2STM32CubeMX工程配置170

8.7.3用户代码171

8.7.4下载验证175

练习题176

第9章HAL库开发实例——电子钟系统177

9.1电子钟系统设计概况177

9.2LED数码管动态显示驱动程序设计178

9.2.1LED数码管及动态显示原理178

9.2.2数码管输出接口设计180

9.3通用按键驱动程序设计183

9.3.1按键基本介绍183

9.3.2按键输入接口设计184

9.4RTC驱动程序设计189

9.5简单的多任务时间片轮询框架191

9.6电子钟应用系统示例193

9.6.1STM32CubeMX工程配置193

9.6.2工程添加板级支持包193

9.6.3用户代码195

9.6.4下载验证198

练习题199

第10章嵌入式操作系统RTThread Nano200

10.1RTThread Nano简介200

10.2在MDK中移植RTThread Nano201

10.2.1移植RTThread Nano的步骤201

10.2.2编写第一个RTThread Nano应用205

10.2.3RTThread程序的运行方法206

10.3RTThread的启动流程210

10.3.1扩展main210

10.3.2进入main211

10.4RTThread的线程管理212

10.4.1线程与线程管理212

10.4.2组成线程的三要素212

10.4.3线程的重要属性214

10.4.4默认启动的线程216

10.4.5线程管理API函数217

10.4.6线程管理示例219

10.4.7线程管理应用小结222

10.5RTThread的时钟管理222

10.5.1RTThread的时钟节拍222

10.5.2RTThread的软件定时器223

10.5.3软件定时器管理API函数224

10.5.4软件定时器应用示例227

10.6RTThread内存管理229

10.6.1内存管理概述229

10.6.2内存堆管理之小内存管理230

10.6.3内存堆管理API函数232

10.6.4内存池管理233

10.6.5内存池管理API函数235

10.6.6内存堆与内存池管理应用示例237

10.7RTThread中断管理241

10.7.1RTThread中断工作机制241

10.7.2中断处理示例243

10.7.3全局中断开关243

10.7.4全局中断开关示例244

练习题245

第11章RTThread线程间同步与通信246

11.1线程间同步与通信简介246

11.2信号量247

11.2.1信号量的概念及工作机制247

11.2.2RTThread信号量控制块248

11.2.3信号量管理API函数249

11.2.4信号量应用场合252

11.2.5信号量应用示例253

11.3互斥量256

11.3.1互斥量的概念及工作机制256

11.3.2线程优先级反转与继承257

11.3.3死锁259

11.3.4RTThread互斥量控制块259

11.3.5互斥量管理API函数260

11.3.6互斥量应用场合262

11.3.7互斥量应用示例263

11.4事件集266

11.4.1事件集的概念及工作机制266

11.4.2RTThread事件集控制块267

11.4.3事件集管理API函数267

11.4.4事件集应用示例270

11.5邮箱273

11.5.1邮箱的概念及工作机制273

11.5.2RTThread邮箱控制块274

11.5.3邮箱管理API函数275

11.5.4邮箱的典型用法278

11.5.5邮箱应用示例279

11.6消息队列283

11.6.1消息队列的概念及工作机制283

11.6.2RTThread消息队列控制块284

11.6.3消息队列管理API函数284

11.6.4消息队列应用示例289

练习题292

第12章RTThread应用实践——步进电机控制294

12.1步进电机控制系统设计目标294

12.2步进电机28BYJ48294

12.2.1步进电机简介294

12.2.2步进电机驱动电路295

12.2.3步进电机的控制原理295

12.3步进电机28BYJ48控制软件设计296

12.3.1步进电机驱动设计296

12.3.2按键控制电机设计301

12.3.3数码管显示电机信息设计303

12.3.4串口输出电机信息设计305

12.3.5蜂鸣器鸣响设计306

12.3.6电机控制系统主函数307

12.4步进电机控制示例结果308

练习题309

第13章嵌入式物联网基础实战311

13.1TCP/IP协议简介311

13.2简单的TCP/IP协议栈312

13.3ENC28J60网卡移植313

13.3.1初始化ENC28J60314

13.3.2实现ENC28J60的操作函数317

13.3.3接收网络数据包318

13.3.4网卡移植测试321

13.4TCP/IP协议栈分层实验324

13.4.1ARP协议实验324

13.4.2IP&ICMP协议实验330

13.4.3UDP协议实验336

13.4.4TCP协议实验339

13.5嵌入式Web服务器344

13.5.1HTTP协议简介344

13.5.2Web服务器实验345

练习题347