理论篇 2
第1章 概述 2
本章目标 2
学习导航 2
任务描述 2
1.1 ARM体系概述 2
1.1.1 ARM简介 3
1.1.2 ARM架构的发展 3
1.2 Cortex内核 5
1.2.1 Cortex内核分类 5
1.2.2 CM3内核特点 6
1.3 CM3指令集 6
1.3.1 Thumb指令集 6
1.3.2 Thumb-2指令集 7
1.4 STM32系列MCU 7
1.4.1 STM32系列MCU分类 8
1.4.2 STM32F107资源 9
1.5 STM32固件库 11
1.5.1 CMSIS含义 11
1.5.2 STM32固件库简介 12
1.5.3 STM32固件库结构 12
1.5.4固件库命名规则 13
1.5.5基于固件库的STM32F107程序设计 14
1.6开发工具 17
1.6.1 STM32F107开发工具介绍 17
1.6.2流水灯示例 18
小结 23
练习 23
第2章 STM32F107内核架构 24
本章目标 24
学习导航 24
任务描述 24
2.1内核架构 25
2.1.1 CM3内核架构 25
2.1.2 STM32F107架构 26
2.2存储器组织 27
2.3存储器映像 29
2.3.1位带操作 31
2.3.2位带计算方法 31
2.4寄存器组 33
2.4.1通用寄存器 33
2.4.2特殊功能寄存器 34
2.5堆栈 34
2.5.1 CM3的堆栈 34
2.5.2双堆栈机制 35
2.6电源管理 35
2.6.1电源 35
2.6.2备份区域 37
2.6.3电源管理器 39
2.6.4低功耗模式 41
2.7复位和启动配置 41
2.7.1 CM3的复位机制 42
2.7.2 RCC 43
2.7.3 STM32F107的启动配置 46
2.8时钟 47
2.8.1时钟概述 47
2.8.2系统时钟 49
2.8.3时钟安全系统 49
2.8.4 RTC时钟 49
2.8.5时钟输出 49
小结 50
练习 50
第3章 GPIO和AFIO 52
本章目标 52
学习导航 52
任务描述 52
3.1通用IO和复用功能 53
3.1.1 GPIO概述 53
3.1.2输入功能 54
3.1.3输出功能 55
3.1.4复用功能 56
3.1.5模拟输入功能 56
3.2复用功能IO重映射 57
3.3 GPIO编程实例 58
3.3.1 GPIO配置 59
3.3.2 GPIO实例 61
3.4 GPIO库函数 62
小结 63
练习 64
第4章 NVIC和EXTI 65
本章目标 65
学习导航 65
任务描述 65
4.1 CM3异常和中断系统 66
4.1.1嵌套向量中断控制器 66
4.1.2中断优先级 66
4.1.3抢占优先级与从优先级 67
4.1.4中断输入与悬起 67
4.1.5中断响应序列 68
4.1.6中断返回 69
4.1.7中断嵌套 69
4.1.8 CM3特殊中断机制 69
4.1.9 SysTick定时器 69
4.2中断向量 70
4.2.1(异常)向量表 70
4.2.2 stm32f10x_ it.c文件 78
4.3 NVIC库函数配置 80
4.3.1 NVIC配置 80
4.3.2 NVIC库函数 84
4.4外部中断/事件控制器 85
4.4.1功能说明 85
4.4.2外部中断/事件线路映像 86
4.5 EXTI库函数配置 88
4.5.1 EXTI配置 88
4.5.2 EXTI库函数 90
4.6中断应用实例 91
4.6.1 main函数 91
4.6.2中断服务函数 93
4.6.3程序验证 94
小结 94
练习 94
第5章 定时器(TIM) 96
本章目标 96
学习导航 96
任务描述 96
5.1 STM32F107定时器概述 97
5.2高级和通用定时器 97
5.2.1主要特性 98
5.2.2时钟源 98
5.2.3时基单元 99
5.3计数模式 100
5.3.1计数模式工作方式 101
5.3.2计数模式时序 101
5.3.3计数模式配置 102
5.3.4库函数TIM_TimeBaseInit() 103
5.4捕获/比较通道 104
5.5输出模式 105
5.5.1 PWM模式 105
5.5.2 PWM模式配置 106
5.5.3输出比较模式 110
5.5.4单脉冲模式 111
5.6输入模式 111
5.6.1输入捕获模式 111
5.6.2 PWM输入模式 114
5.6.3定时器输入异或功能 115
5.6.4 TIMx定时器和外部触发的同步 115
5.6.5定时器同步 115
5.7电机控制 116
5.7.1互补输出和死区插入 116
5.7.2使用刹车功能 116
5.7.3产生六步PWM输出 116
5.7.4与霍尔传感器的接口 116
5.8基本定时器TIM6和TIM7 117
5.8.1主要特性 117
5.8.2时钟源 117
5.8.3时基单元 117
5.8.4预分频器 118
5.8.5计数模式 118
5.9定时器库函数 118
小结 122
练习 123
第6章 看门狗(WDG) 124
本章目标 124
学习导航 124
任务描述 124
6.1看门狗概述 125
6.2独立看门狗 125
6.2.1 IWDG的功能描述 125
6.2.2 IWDG的配置 127
6.2.3 IWDG库函数 128
6.3窗口看门狗 128
6.3.1 WWDG的功能描述 128
6.3.2 WWDG的配置 130
6.3.3 WWDG库函数 131
小结 131
练习 132
第7章 通用同步/异步收发器(USART) 133
本章目标 133
学习导航 133
任务描述 133
7.1 USART的功能描述 134
7.1.1 USART的主要特性 134
7.1.2 STM32F107的USART 134
7.2 USART异步模式 136
7.2.1分数波特率 136
7.2.2数据位和校验位 138
7.2.3发送器 138
7.2.4接收器 139
7.2.5 DMA传输 139
7.2.6中断请求 139
7.2.7异步模式配置 140
7.3 USART同步模式 142
7.4 LIN模式 144
7.5 USART编程实例 145
7.5.1 USART2管脚配置 145
7.5.2 USART2配置 146
7.5.3 USART实例 147
7.6 USART库函数 148
小结 150
练习 150
第8章 直接存储器访问(DMA) 151
本章目标 151
学习导航 151
任务描述 151
8.1 DMA的功能描述 152
8.1.1 DMA的结构及特性 152
8.1.2 DMA通道 153
8.1.3 DMA传送 154
8.1.4仲裁器和优先级 154
8.1.5循环模式 154
8.1.6存储器到存储器模式 155
8.1.7 DMA中断 155
8.1.8指针增量 155
8.2 DMA编程实例 155
8.2.1 DMA配置步骤 155
8.2.2 DMA配置 156
8.2.3 DMA实例 159
8.3 DMA库函数 164
小结 164
练习 165
第9章 控制器局域网络(CAN) 166
本章目标 166
学习导航 166
任务描述 166
9.1 CAN总线 167
9.1.1 CAN总线简介 167
9.1.2 CAN总线技术规范 168
9.1.3 CAN帧 169
9.1.4总线仲裁 171
9.2 STM32F107的bxCAN 172
9.2.1 bxCAN的工作模式 172
9.2.2 bxCAN的调试模式 173
9.2.3出错管理 174
9.2.4离线恢复 175
9.2.5位时间特性 175
9.2.6波特率的计算 176
9.2.7 bxCAN配置 176
9.3发送处理 179
9.3.1发送优先级 179
9.3.2中止 179
9.3.3禁止自动重传模式 179
9.3.4发送配置 180
9.4接收管理 181
9.4.1有效报文 181
9.4.2 FIFO管理 181
9.4.3溢出 182
9.4.4接收相关的中断 182
9.4.5接收配置 182
9.5 bxCAN标识符过滤 183
9.5.1 bxCAN过滤器组 183
9.5.2过滤器组的配置 185
9.6 bxCAN中断 187
9.7 bxCAN编程实例 188
9.7.1主函数 188
9.7.2中断服务函数 191
9.7.3运行结果 191
9.8 bxCAN库函数 193
小结 194
练习 194
第10章 ADC和DAC 195
本章目标 195
学习导航 195
任务描述 195
10.1模拟/数字转换器(ADC) 196
10.1.1 ADC功能简介 196
10.1.2 ADC管脚分布和输入源 197
10.1.3通道选择 199
10.1.4 ADC中断 199
10.1.5 DMA请求 199
10.1.6模拟看门狗 200
10.2 ADC的工作模式 200
10.2.1转换模式 201
10.2.2扫描模式 201
10.2.3间断模式 201
10.2.4注入通道管理 201
10.2.5数据对齐 202
10.2.6通道采样时间 202
10.2.7外部触发转换 203
10.3 ADC编程实例 203
10.3.1 ADC配置 203
10.3.2 ADC实例 207
10.4双ADC模式 208
10.4.1同步注入模式 209
10.4.2同步规则模式 209
10.4.3快速交叉模式 209
10.4.4慢速交叉模式 209
10.4.5交替触发模式 210
10.4.6同步注入模式+同步规则模式 210
10.4.7同步规则模式+交替触发模式 210
10.4.8同步注入模式+交叉模式 210
10.5数字/模拟转换器(DAC) 211
10.5.1 DAC功能简介 211
10.5.2 DAC转换 212
10.5.3 DAC输出电压 212
10.5.4 DAC数据格式 212
10.5.5选择DAC触发 213
10.5.6 DMA请求 213
10.6 DAC输出模式 214
10.6.1噪声生成 214
10.6.2三角波生成 214
10.7 DAC编程实例 214
10.7.1 DAC配置 214
10.7.2 DAC实例 217
小结 218
练习 219
第11章 串行外设接口(SPI) 220
本章目标 220
学习导航 220
任务描述 220
11.1 SPI简介 221
11.2 SPI的功能和特点 221
11.3 SPI管脚 222
11.4 SPI的数据发送与接收 222
11.4.1接收与发送缓冲器 223
11.4.2主模式下的数据传输 223
11.4.3从模式下的数据传输 223
11.4.4处理数据的发送与接收 224
11.5 SPI时钟信号的相位和极性 224
11.6 SPI的从设备选择 225
11.7 CRC计算 225
11.8 SPI的DMA 226
11.9 SPI中断 227
11.10 SPI编程实例 227
11.10.1 SPI配置 227
11.10.2 SPI实例 231
小结 237
练习 238
第12章 通用串行总线(USB) 239
本章目标 239
学习导航 239
任务描述 239
12.1 USB简介 240
12.1.1 USB版本 240
12.1.2 USB接口 241
12.1.3总线结构 241
12.1.4 USB接口HID设备 242
12.1.5 USB OTG 243
12.2 USB协议基础 243
12.2.1 USB逻辑组织 243
12.2.2包 244
12.2.3事务 246
12.2.4描述符 247
12.2.5枚举 249
12.3 STM32F107的USB OTG 249
12.3.1通用功能 250
12.3.2 OTG全速控制器 251
12.3.3全速OTG PHY(物理接口) 251
12.3.4 ID信号检测 252
12.3.5上电状态 252
12.3.6软件断开 252
12.3.7默认状态 253
12.3.8挂起状态 253
12.3.9设备端点 253
12.3.10端点配置 254
12.3.11端点传输 254
12.3.12端点状态/中断 254
12.3.13设备SOF 255
12.3.14供电选项 255
12.3.15 USB数据FIFO 256
12.3.16 OTG_FS中断 256
12.4 USB OTG固件库 256
12.4.1 ST USB固件库的文档结构 256
12.4.2 USB开发模板 258
12.5 HID类设备开发模板 260
12.5.1开发模板修改 260
12.5.2主要函数 261
小结 263
练习 264
第13章 以太网(ETH) 265
本章目标 265
学习导航 265
任务描述 265
13.1 ETH简介 266
13.1.1以太网物理层 266
13.1.2以太网的工作方式 267
13.1.3帧结构 267
13.1.4冲突/冲突域 268
13.1.5 IEEE 802.3 268
13.1.6 IEEE 1588 268
13.2 STM32F107的ETH 269
13.2.1 MAC控制器的功能 269
13.2.2 DMA功能 270
13.2.3 PTP功能 271
13.2.4以太网模块的管脚和内部信号 271
13.2.5以太网模块功能描述:RMII 272
13.2.6以太网模块功能描述:MAC 802.3 273
13.2.7 MAC中断 273
13.2.8精确时间协议(IEEE 1588 PTP) 274
13.2.9以太网功能描述:DMA控制器操作 274
13.3 LWIP协议栈 274
13.3.1 LWIP的特性 275
13.3.2 LWIP的结构 275
13.4建立ETH模板 275
13.4.1官方ETH固件库 276
13.4.2修改ETH固件库 276
小结 282
练习 282
第14章 嵌入式界面(μC/GUI) 283
本章目标 283
学习导航 283
任务描述 283
14.1 μC/GUI简介 284
14.1.1 μC/GUI特点 284
14.1.2 μC/GUI文件结构 285
14.1.3 μC/GUI层次结构 286
14.2 μC/GUI功能 286
14.2.1文本显示 287
14.2.2数值显示 288
14.2.3 2-D图形库 288
14.2.4字体 290
14.2.5颜色 290
14.2.6存储设备 292
14.2.7视窗管理器 292
14.2.8窗口对象 294
14.2.9对话框 303
14.3 μC/GUI移植 305
小结 308
练习 308
第15章 嵌入式操作系统(μC/OS-Ⅱ) 309
本章目标 309
学习导航 309
任务描述 309
15.1嵌入式系统程序设计 310
15.1.1嵌入式系统程序设计特点 310
15.1.2嵌入式系统程序结构 311
15.1.3模块化程序设计 312
15.1.4嵌入式操作系统 312
15.2 μC/OS-Ⅱ简介 313
15.3 μC/OS- Ⅱ的时钟和中断 314
15.3.1 μC/OS-Ⅱ的时钟 315
15.3.2 μC/OS-Ⅱ的时间管理 315
15.3.3临界段 316
15.3.4 μC/OS-Ⅱ的中断过程 316
15.4 μC/OS-Ⅱ的任务 317
15.4.1任务 317
15.4.2任务的优先级 318
15.4.3任务的状态 319
15.4.4任务堆栈 319
15.4.5任务控制块 320
15.4.6任务调度 320
15.4.7任务建立 320
15.5 μC/OS- Ⅱ任务的同步与通信 322
15.5.1任务间的同步 322
15.5.2事件 323
15.5.3信号量 323
15.5.4互斥型信号量 326
15.5.5消息邮箱 327
15.5.6消息队列 330
15.5.7信号量集 330
15.6 μC/OS- Ⅱ内存管理 331
15.7 μC/OS- Ⅱ的裁剪 331
小结 332
练习 333
第16章 物联网网关程序设计 334
本章目标 334
学习导航 334
任务描述 334
16.1物联网网关 335
16.1.1物联网 335
16.1.2网关 335
16.1.3物联网网关 335
16.1.4 Zigbee无线传感网 336
16.2网关功能设计 337
16.2.1 CC2530模块 337
16.2.2网关协议转换 337
16.2.3 Zigbee通信协议 337
16.2.4网关功能设计 338
16.3网关界面设计 338
16.3.1网关界面资源表 338
16.3.2回调函数 339
16.4网关任务设计 341
16.4.1网关任务 342
16.4.2任务间同步 346
16.5网关中断设计 347
16.6网关实例 349
16.6.1主函数编写 349
16.6.2网关软件界面 352
16.6.3网关串口输出 353
小结 353
练习 354
实践篇 356
实践1概述 356
实践指导 356
实践1.G. 1 356
实践1.G.2 359
实践1.G.3 360
实践1.G.4 362
知识拓展 368
实践2 STM32F107内核架构 372
实践指导 372
实践2.G. 1 372
实践2.G.2 373
实践2.G.3 375
实践2.G.4 381
知识拓展 384
实践3 通用GPIO和复用AFIO 388
实践指导 388
实践3.G. 1 388
知识拓展 391
实践4 NVIC和EXTI 393
实践指导 393
实践4.G.1 393
实践4.G.2 396
实践4.G.3 399
知识拓展 405
实践5 定时器(TIM) 407
实践指导 407
实践5.G. 1 407
实践5.G.2 410
实践5.G.3 414
实践6 看门狗(DWG) 418
实践指导 418
实践6.G. 1 418
实践6.G.2 420
实践7 通用同步/异步收发器(USART) 424
实践指导 424
实践7.G. 1 424
实践7.G.2 426
实践8 直接存储器访问(DMA) 429
实践指导 429
实践8.G.1 429
实践9 控制局域网络(CAN) 432
实践指导 432
实践9.G..1 432
实践9.G.2 433
实践10 ADC和DAC 442
实践指导 442
实践10.G. 1 442
实践10.G.2 443
实践11 串行外设接口(SPI) 449
实践指导 449
实践11.G.1 449
实践11.G. 2 450
实践12通用串行总线(USB) 453
实践指导 453
实践12.G.1 453
实践12.G.2 454
实践13以太网(ETH) 466
实践指导 466
实践13.G.1 466
实践13.G.2 468
实践14嵌入式界面(μC/GUI) 476
实践指导 476
实践14.G.1 476
实践14.G.2 477
实践14.G.3. 480
实践15嵌入式操作系统(μC/OS-Ⅱ) 484
实践指导 484
实践15.G.1 484
实践15.G.2 486
实践16物联网网关程序设计 489
实践指导 489
实践16.G.1 489
附录A STM32F107管脚定义 504
附录B STM32F107中断映射 509
附录C 复用功能的GPIO配置 512
附录D STM32F107重映射 515