本书以STM32F103系列微控制器为硬件平台,以Proteus仿真软件为开发环境,系统介绍嵌入式系统原理、接口技术及物联网操作系统应用。主要内容包括:嵌入式系统基本概念、ARM Cortex-M3体系结构、硬件最小系统、C语言编程与STM32固件库(STD库、HAL库、LL库)以及基于MDK和VSCode的开发环境搭建。本书详细阐述核心外设原理与应用,涵盖GPIO、中断、串行通信(USART、SPI、I2C、RS-485)、定时器、ADC、DMA、CAN及USB等常用外设。嵌入式操作系统以FreeRTOS为核心,剖析其实时内核的任务管理、同步与通信机制(互斥量、信号量、事件标志组、队列)、中断处理及内存管理,并引入CMSIS-RTOS V2标准接口。最后通过温湿度自动检测与报警系统综合实例,完整展示嵌入式项目开发流程。本书内容由浅入深,理论与实践结合,各章均配有基于Proteus的仿真实例和基于HAL库的代码示例,读者可通过仿真环境直观理解硬件原理,快速上手嵌入式项目开发。本书可作为高等院校电子信息工程、自动化、计算机科学与技术及电气工程等专业的教材或参考书,也可供相关工程技术人员参考。
毕盛,华南理工大学计算机科学与工程学院副教授、硕士生导师,华南理工大学大数据与智能机器人教育部重点实验室机器人智能工程与技术研究室骨干,研究方向为智能机器人、智能系统、嵌入式系统和边缘计算等。
第1章 嵌入式系统与微控制器1
1.1 嵌入式系统相关概念1
1.1.1 什么是嵌入式系统1
1.1.2 嵌入式系统的特点1
1.1.3 嵌入式系统主要硬件组成1
1.1.4 嵌入式芯片类型3
1.2 微控制器4
1.2.1 微控制器的特点4
1.2.2 微控制器芯片型号及发展历史4
1.2.3 ARM微控制器介绍6
1.2.4 STM32系列微控制器8
1.3 嵌入式系统开发8
1.3.1 方案设计及芯片选型8
1.3.2 嵌入式系统硬件设计9
1.3.3 嵌入式系统软件开发10
1.3.4 嵌入式代码编译11
1.3.5 嵌入式代码下载及调试12
1.4 微控制器芯片的发展趋势12
习题113
第2章 微控制器体系结构及汇编语言15
2.1 Cortex-M3体系架构15
2.1.1 Cortex-M3总体架构15
2.1.2 Cortex-M3总线16
2.1.3 Cortex-M3寄存器17
2.1.4 Cortex-M3操作模式19
2.1.5 Cortex-M3存储器映射19
2.1.6 流水线20
2.1.7 异常和中断20
2.1.8 存储器保护单元(MPU)21
2.2 汇编指令寻址方式21
2.3 ARM指令集22
2.3.1 指令基本形式22
2.3.2 ARM指令集条件码23
2.3.3 ARM指令种类24
2.4 Thumb指令集29
习题230
第3章 微控制器硬件系统32
3.1 微控制器概述32
3.1.1 STM32F103内部结构32
3.1.2 STM32F103常用接口35
3.1.3 STM32F103系列芯片简介36
3.2 微控制器基本电路37
3.2.1 电源电路37
3.2.2 复位电路38
3.2.3 时钟源39
3.2.4 时钟管理单元40
3.2.5 下载电路42
3.2.6 启动配置电路43
3.3 微控制器低功耗模式44
习题346
第4章 微控制器软件开发48
4.1 微控制器开发语言48
4.1.1 开发语言介绍48
4.1.2 嵌入式C语言49
4.2 微控制器开发库函数54
4.2.1 STM32开发库函数介绍54
4.2.2 STM32 STD库56
4.2.3 STM32 HAL库和LL库57
4.3 微控制器开发环境59
4.3.1 MDK开发环境59
4.3.2 STM32CubeMX软件60
4.3.3 基于Visual Studio Code(VSCode)的开发环境61
4.4 微控制器虚拟仿真环境63
4.5 微控制器程序调试和下载64
4.6 STM32微控制器启动程序66
习题467
第5章 GPIO68
5.1 GPIO结构及特点68
5.1.1 GPIO功能模式68
5.1.2 GPIO特点及操作69
5.1.3 GPIO开发实例70
5.2 GPIO寄存器开发方式71
5.2.1 GPIO寄存器说明71
5.2.2 GPIO寄存器实现应用实例71
5.3 GPIO STD库开发方式73
5.3.1 GPIO STD库函数说明73
5.3.2 GPIO STD库应用实例75
5.4 GPIO HAL库开发方式77
5.4.1 GPIO HAL库函数说明77
5.4.2 GPIO HAL库应用实例79
5.5 GPIO LL库开发方式82
5.5.1 GPIO LL库函数说明82
5.5.2 GPIO LL库应用实例85
5.6 GPIO应用开发实例86
5.6.1 数码管显示实例86
5.6.2 行列式键盘扫描实例89
习题592
第6章 中断93
6.1 STM32中断简介93
6.2 嵌套向量中断控制器95
6.2.1 NVIC寄存器95
6.2.2 系统控制寄存器(SCB)95
6.2.3 中断和异常处理96
6.2.4 STM32中断优先级97
6.3 EXTI外部中断98
6.3.1 EXTI硬件结构98
6.3.2 EXTI中断操作99
6.4 EXTI中断应用实例100
习题6103
第7章 串行通信105
7.1 串行通信简介105
7.1.1 串行通信基础知识105
7.1.2 微控制器常见的串行通信方式106
7.2 STM32 USART接口107
7.2.1 USART硬件引脚107
7.2.2 USART主要寄存器及中断请求108
7.2.3 USART异步通信108
7.2.4 USART其他功能模式109
7.3 USART串行通信实现111
7.3.1 串行数据发送和接收111
7.3.2 USART数据发送和接收应用实例112
7.3.3 RS-232接口116
7.3.4 printf串口终端实现118
7.3.5 RS-485接口118
7.4 基于串口的无线通信122
7.4.1 移动通信122
7.4.2 蓝牙串口通信122
7.4.3 串口无线网络(Wi-Fi)123
7.4.4 ZigBee通信123
7.4.5 星闪通信123
7.5 SPI通信124
7.5.1 STM32 SPI接口124
7.5.2 SPI接口应用实例126
习题7128
第8章 定时器130
8.1 定时器概述130
8.1.1 通用定时器131
8.1.2 高级定时器131
8.1.3 高级/通用定时器接口131
8.1.4 定时器引脚和寄存器134
8.1.5 定时器时钟源135
8.1.6 定时器计数模式135
8.2 定时器操作136
8.2.1 定时功能及实例136
8.2.2 计数功能及实例139
8.2.3 捕获功能及实例141
8.2.4 输出PWM模式及实例143
8.2.5 其他功能模式146
8.3 系统滴答定时器(SysTick)147
8.3.1 SysTick工作分析及配置148
8.3.2 SysTick功能实现148
8.4 看门狗定时器(WDT)150
8.4.1 独立看门狗150
8.4.2 窗口看门狗151
8.4.3 独立看门狗与窗口看门狗的区别153
8.5 实时时钟(RTC)153
习题8157
第9章 ADC159
9.1 ADC概述159
9.1.1 STM32的ADC功能159
9.1.2 STM32的ADC结构159
9.1.3 STM32的ADC引脚161
9.1.4 STM32的ADC操作162
9.1.5 STM32的ADC主要寄存器166
9.2 ADC应用实例167
9.2.1 实例主要库函数说明167
9.2.2 ADC查询和中断实例168
习题9170
第10章 DMA171
10.1 DMA概述171
10.1.1 STM32的DMA特性171
10.1.2 STM32的DMA主要寄存器173
10.2 DMA应用实例173
10.2.1 ADC数据采集DMA方式173
10.2.2 串口发送DMA方式175
习题10176
第11章 其他接口177
11.1 I2C总线177
11.1.1 I2C总线介绍177
11.1.2 STM32的I2C总线178
11.1.3 I2C总线应用实例180
11.2 CAN总线184
11.2.1 CAN总线介绍184
11.2.2 STM32的CAN总线185
11.3 USB186
11.3.1 USB简介186
11.3.2 STM32的USB接口186
习题11187
第12章 嵌入式操作系统188
12.1 嵌入式操作系统概述188
12.1.1 嵌入式操作系统的分类与发展现状188
12.1.2 传统小型嵌入式操作系统189
12.1.3 嵌入式小型物联网操作系统190
12.1.4 嵌入式操作系统实时性特点191
12.2 嵌入式操作系统FreeRTOS193
12.2.1 FreeRTOS特性193
12.2.2 结合STM32CubeMX的FreeRTOS开发194
12.2.3 FreeRTOS的启动过程196
12.3 FreeRTOS移植思路196
12.4 FreeRTOS内核架构200
12.4.1 FreeRTOS的任务状态200
12.4.2 FreeRTOS的任务控制块201
12.4.3 FreeRTOS的任务调度机制202
12.4.4 FreeRTOS的任务切换203
12.4.5 FreeRTOS的中断处理机制203
12.5 FreeRTOS任务和时间管理204
12.5.1 FreeRTOS任务管理204
12.5.2 FreeRTOS时间管理210
12.6 FreeRTOS互斥量212
12.6.1 FreeRTOS互斥量概述212
12.6.2 FreeRTOS互斥量实例213
12.7 FreeRTOS信号量215
12.7.1 FreeRTOS信号量概述215
12.7.2 FreeRTOS信号量任务同步216
12.7.3 FreeRTOS信号量共享资源管理218
12.7.4 FreeRTOS计数信号量219
12.7.5 FreeRTOS中断服务程序与任务同步222
12.8 FreeRTOS事件标志组224
12.8.1 FreeRTOS事件标志组概述224
12.8.2 FreeRTOS事件标志组实例226
12.9 FreeRTOS队列228
12.9.1 FreeRTOS队列概述228
12.9.2 FreeRTOS队列实例229
12.10 FreeRTOS内存管理231
12.10.1 FreeRTOS内存管理概述231
12.10.2 FreeRTOS内存管理实例232
习题12234
第13章 综合设计实例235
13.1 嵌入式系统开发流程235
13.2 嵌入式系统开发实例――温湿度自动检测与报警系统236
13.2.1 需求分析237
13.2.2 方案设计238
13.2.3 具体开发239
13.2.4 系统测试252
习题13254
参考文献255