目 录
项目1 开发环境的搭建 1
任务1.1 了解ARM微控制器STM32F407 2
1.1.1 ARM微控制器 2
1.1.2 STM32F407的功能 6
任务1.2 初识开发板硬件电路 10
1.2.1 核心板的电路原理图 10
1.2.2 扩展板的电路原理图 13
任务1.3 开发环境的搭建 15
1.3.1 KEIL开发环境搭建 16
1.3.2 安装调试工具 19
1.4 项目总结 22
1.5 动手实践 22
1.6 润物无声:中国芯片 22
1.7 知识巩固 23
项目2 标准固件库函数开发初探:从点亮LED开始 25
任务2.1 多文件编程 25
2.1.1 C程序的编译 26
2.1.2 模块化编程 26
任务2.2 标准固件库函数工程模板的建立 29
2.2.1 标准固件库文件 29
2.2.2 使用帮助文档 35
2.2.3 建立库函数工程模板 36
任务2.3 点亮LED 44
2.3.1 点亮LED的开发步骤 44
2.3.2 硬件电路设计 44
2.3.3 软件设计 45
2.4 项目总结 48
2.5 动手实践 49
2.6 项目拓展 49
2.7 润物无声:千里之行,始于足下 49
2.8 知识巩固 49
项目3 使用GPIO接口完成简单的开发任务 54
任务3.1 使用GPIO接口实现流水灯 54
3.1.1 GPIO接口的工作模式 54
3.1.2 STM32F407ZGT6的时钟系统 60
3.1.3 GPIO接口的结构体及库函数 65
3.1.4 流水灯的软硬件设计 69
任务3.2 使用GPIO接口控制按键 71
3.2.1 任务描述 71
3.2.2 硬件设计 72
3.2.3 软件设计 72
任务3.3 数码管的动态显示 76
3.3.1 任务描述 76
3.3.2 硬件设计 76
3.3.3 软件设计 77
3.4 项目总结 82
3.5 动手实践 82
3.6 润物无声:代码规范 83
3.7 知识巩固 84
项目4 使用定时器实现电子钟 89
任务4.1 熟悉STM32系列微控制器的中断系统 89
4.1.1 嵌套向量中断控制器 91
4.1.2 NVIC的结构体 93
4.1.3 NVIC的标准固件库函数 95
4.1.4 中断编程的要点 95
任务4.2 熟悉STM32F407微控制器的定时器特性 96
4.2.1 高级控制定时器 96
4.2.2 通用定时器 97
4.2.3 基本定时器 97
任务4.3 使用定时器实现电子钟的软件设计 97
4.3.1 基本定时器的主要功能 97
4.3.2 定时器的结构体及标准固件库函数 100
4.3.3 电子钟的软件设计 104
4.4 项目总结 109
4.5 动手实践 109
4.6 润物无声:诚信 109
4.7 知识巩固 109
项目5 利用外部中断为电子钟校准 113
任务5.1 熟悉中断/事件线的特性 113
任务5.2 学会使用EXTI的结构体及标准固件库函数 116
任务5.3 利用外部中断实现电子钟校准的软件设计 118
5.3.1 任务要求 118
5.3.2 编程要点 119
5.3.3 实例代码 120
5.3.3 下载验证 126
5.4 项目总结 126
5.5 动手实践 126
5.6 润物无声:知识产权 127
5.7 知识巩固 127
项目6 通过USART收发数据 130
任务6.1 理解串行通信协议 131
6.1.1 物理层 131
6.1.2 协议层 132
6.1.3 有效数据和数据校验 133
任务6.2 熟悉STM32系列微控制器的USART 133
6.2.1 USART的特性 134
6.2.2 USART的功能 134
任务6.3 学会使用USART的结构体及标准固件库函数 139
任务6.4 通过USART收发数据 143
6.4.1 任务要求 143
6.4.2 编程要点 143
6.4.3 硬件连接 144
6.4.4 软件编程 145
6.4.5 实例代码 146
6.4.6 下载验证 148
6.5 项目总结 151
6.6 动手实践 151
6.7 润物无声:华为5G通信 151
6.8 知识巩固 152
项目7 使用SPI总线操作外设 154
任务7.1 理解SPI协议 155
7.1.1 物理层 155
7.1.2 协议层 155
任务7.2 熟悉STM32系列微控制器的SPI 157
7.2.1 SPI的特性 158
7.2.2 SPI的功能 158
任务7.3 学会使用SPI的结构体及标准固件库函数 160
任务7.4 利用MAX7219实现8位数码管的显示功能 164
7.4.1 编程任务 164
7.4.2 硬件设计 164
7.4.3 软件设计 166
7.4.4 实例代码 169
7.4.5 下载验证 172
7.5 项目总结 173
7.6 动手实践 173
7.7 润物无声:6G争夺战已然打响 174
7.8 知识巩固 174
项目8 使用定时器生成PWM信号 176
任务8.1 理解使用定时器生成PWM信号的原理 176
任务8.2 熟悉STM32系列微控制器的定时器 179
8.2.1 TIM2~TIM5的主要特性 179
8.2.2 TIM9~TIM14的主要特性 180
8.2.3 通用定时器的功能 181
任务8.3 学会使用定时器的结构体和标准固件库函数 189
任务8.4 使用定时器生成PWM信号的软件设计 192
8.4.1 任务描述 192
8.4.2 编程要点 192
8.4.3 实例代码 196
8.4.4 下载验证 198
8.5 项目总结 199
8.6 项目拓展 199
8.7 动手实践 199
8.8 润物无声:精益求精 199
8.9 知识巩固 199
项目9 使用I2C总线驱动OLED 201
任务9.1 理解I2C总线协议 201
9.1.1 I2C总线的物理层 201
9.1.2 I2C总线的协议层 203
任务9.2 熟悉STM32系列微控制器的I2C总线 205
9.2.1 I2C总线接口的特性 205
9.2.2 I2C总线接口的功能 206
9.2.3 I2C总线的通信过程 208
任务9.3 学会使用I2C总线的结构体及标准固件库函数 209
任务9.4 使用I2C总线驱动OLED的软件设计 216
9.4.1 编程任务 216
9.4.2 编程要点 217
9.4.3 硬件设计 217
9.4.4 软件设计 217
9.4.5 实例代码 223
9.4.6 下载验证 236
9.5 项目总结 236
9.6 动手实践 236
9.7 润物无声:柔性OLED 237
9.8 知识巩固 237
项目10 通过ADC采集光敏传感器输出电压值 241
任务10.1 熟悉STM32系列微控制器的ADC 241
10.1.1 ADC的特性 243
10.1.2 ADC的功能 243
任务10.2 学会使用ADC的结构体及标准固件库函数 249
任务10.3 通过ADC单通道采集光敏传感器的输出电压 258
10.3.1 独立模式下ADC单通道数据采集的硬件连接 258
10.3.2 独立模式下ADC单通道数据采集的编程要点 259
10.3.3 实例代码 261
10.3.4 下载验证 263
10.4 项目总结 264
10.5 动手实践 264
10.6 润物无声:集成电路工程技术人员 264
10.7 知识巩固 265
项目11 嵌入式操作系统μC/OS-Ⅲ的移植 267
任务11.1 了解嵌入式操作系统 267
11.1.1 嵌入式系统的特点 267
11.1.2 常用的嵌入式操作系统 268
任务11.2 如何将μC/OS-Ⅲ移植到STM32F407开发板 270
11.2.1 裸机系统和多任务操作系统的区别 270
11.2.2 μCOS-Ⅲ的移植方法 272
任务11.3 如何在μC/OS-Ⅲ上实现单任务——LED闪烁 278
11.3.1 如何创建任务 279
11.3.2 启动任务 281
11.3.3 任务总结 281
11.4 项目总结 281
11.5 动手实践 281
11.6 润物无声:华为鸿蒙系统 282
11.7 知识巩固 282
参考文献 283