[套装书]LwIP应用开发实战指南:基于STM32+STM32库开发实战指南:基于STM32F4(2册)

作者
刘火良 杨森
丛书名
电子与嵌入式系统设计丛书
出版社
机械工业出版社
ISBN
9781909181419
简要
简介
内容简介书籍计算机书籍 ---------------------------LwIP应用开发实战指南:基于STM32--------------------------- 本书以LwIP源码为核心,讲解TCP/IP协议栈的实现,讲解常见的网络协议,讲解LwIP各层之间的数据传递,最终辅以实战案例,教你如何连接各大云平台,配套野火STM32 M4/M7系列开发板,提供完整源代码,极具操作性。 ---------------------------STM32库开发实战指南:基于STM32F4--------------------------- 本书的主要内容将着重介绍STM32的库函数,以及如何使用库的方式进行开发。使初学者能够快速入门能够在此基础上迅速入门,掌握STM32的开发方法。本书内容基于ARM-CortexM3内核的STM32F429芯片,紧紧围绕“库”展开,系统地讲述了STM32固件库的原理、使用方法。
目录



---------------------------LwIP应用开发实战指南:基于STM32---------------------------


前 言
第1章 网络协议概述 1
1.1 常用网络协议 1
1.2 网络协议的分层模型 2
1.3 协议层报文间的封装与拆封 3
第2章 LwIP概述 5
2.1 LwIP的优缺点 5
2.2 LwIP的文件说明 6
2.2.1 获取LwIP源码文件 6
2.2.2 LwIP文件说明 8
2.3 LwIP的说明文档 11
2.4 使用vs code查看源码 14
2.4.1 查看文件中的符号列表和函数列表 14
2.4.2 函数定义跳转 15
2.5 LwIP源码里的示例 16
2.6 LwIP的3种编程接口 17
2.6.1 RAW/Callback API 17
2.6.2 Netconn API 18
2.6.3 Socket API 19
第3章 开发平台 20
3.1 以太网概述 20
3.1.1 PHY层 20
3.1.2 MAC子层 21
3.2 STM32的ETH外设 23
3.3 MII和RMII接口 24
3.4 PHY:LAN8720A 25
3.5 硬件设计 27
3.6 软件设计 29
3.6.1 获取STM32的裸机工程模板 29
3.6.2 添加bsp_eth.c与bsp_eth.h 29
3.6.3 修改stm32f4xx_hal_conf.h文件 35
第4章 LwIP的网络接口管理 37
4.1 netif结构体 37
4.2 netif的使用 41
4.3 与netif相关的底层函数 45
4.4 ethernetif.c文件内容 46
4.4.1 ethernetif数据结构 46
4.4.2 ethernetif_init() 47
4.4.3 low_level_init() 48
第5章 LwIP的内存管理 50
5.1 几种内存分配策略 50
5.1.1 固定大小的内存块 50
5.1.2 可变长度分配 51
5.2 动态内存池 52
5.2.1 内存池的预处理 52
5.2.2 内存池的初始化 57
5.2.3 内存分配 58
5.2.4 内存释放 59
5.3 动态内存堆 61
5.3.1 内存堆的组织结构 61
5.3.2 内存堆初始化 62
5.3.3 内存分配 64
5.3.4 内存释放 67
5.4 使用C库的malloc和free函数来管理内存 71
5.5 LwIP中的配置 72
第6章 网络数据包 74
6.1 TCP/IP的分层思想 74
6.2 LwIP的线程模型 75
6.3 pbuf结构体说明 76
6.4 pbuf的类型 77
6.4.1 PBUF_RAM类型的pbuf 78
6.4.2 PBUF_POOL类型的pbuf 78
6.4.3 PBUF_ROM和PBUF_REF类型的pbuf 80
6.5 pbuf_alloc() 81
6.6 pbuf_free() 84
6.7 其他pbuf操作函数 88
6.7.1 pbuf_realloc() 88
6.7.2 pbuf_header() 88
6.7.3 pbuf_take()、pbuf_copy()、pbuf_chain()和pbuf_ref() 88
6.8 网卡中使用的pbuf 88
6.8.1 low_level_output() 88
6.8.2 low_level_input() 91
6.8.3 ethernetif_input() 93
第7章 无操作系统移植LwIP 94
7.1 将LwIP添加到裸机工程 94
7.2 移植头文件 97
7.3 移植网卡驱动 103
7.4 LwIP时基 111
7.5 协议栈初始化 112
7.6 获取数据包 114
7.6.1 查询方式 114
7.6.2 ping命令详解 115
7.6.3 中断方式 116
第8章 有操作系统移植LwIP 119
8.1 向LwIP中添加操作系统 119
8.1.1 复制FreeRTOS源码到工程文件夹 119
8.1.2 添加FreeRTOS源码到工程组文件夹 120
8.1.3 指定FreeRTOS头文件的路径 120
8.1.4 修改stm32f10x_it.c 121
8.2 lwipopts.h文件需要加入的配置 122
8.3 sys_arch.c/h文件的编写 126
8.4 网卡底层的编写 136
8.5 协议栈初始化 138
8.6 移植后使用ping命令测试基本响应 141
第9章 LwIP一探究竟 142
9.1 网卡数据传入LwIP内核的流程 142
9.2 内核超时处理 142
9.2.1 sys_timeo结构体与超时链表 144
9.2.2 注册超时事件 144
9.2.3 超时检查 147
9.3 tcpip_thread线程 149
9.4 LwIP中的消息 151
9.4.1 消息结构 151
9.4.2 数据包消息 153
9.4.3 API消息 154
9.5 揭开LwIP的神秘面纱 158
第10章 ARP 159
10.1 数据链路层概述 159
10.2 MAC地址的基本概念 159
10.3 初识ARP 160
10.4 以太网帧结构 160
10.5 IP地址映射为物理地址 161
10.6 ARP缓存表 162
10.7 ARP缓存表的超时处理 165
10.8 ARP报文 167
10.9 发送ARP请求包 170
10.10 数据包接收流程 172
10.10.1 以太网中数据包的接收 172
10.10.2 ARP数据包处理 176
10.10.3 更新ARP缓存表 178
10.11 数据包发送流程 182
10.11.1 etharp_output() 182
10.11.2 etharp_output_to_arp_index() 185
10.11.3 etharp_query() 186
第11章 IP 193
11.1 IP地址 193
11.1.1 概述 193
11.1.2 IP地址编址 193
11.1.3 特殊IP地址 195
11.2 局域网和广域网的概念 196
11.2.1 局域网 196
11.2.2 广域网 196
11.3 网络地址转换 197
11.4 IP数据报 198
11.5 IP数据报的数据结构 202
11.6 IP数据报分片 204
11.7 IP数据报发送 208
11.8 IP数据报接收 214
第12章 ICMP 222
12.1 ICMP功能简介 222
12.2 ICMP报文结构 223
12.3 ICMP报文类型 224
12.3.1 ICMP差错报告报文 224
12.3.2 ICMP查询报文 226
12.4 LwIP中的ICMP实现 227
12.4.1 ICMP报文数据结构 227
12.4.2 发送ICMP差错报文 229
12.4.3 处理ICMP报文 231
第13章 TCP 235
13.1 TCP服务概述 235
13.2 TCP的特性 235
13.2.1 连接机制 235
13.2.2 确认与重传 235
13.2.3 缓冲机制 236
13.2.4 全双工通信 236
13.2.5 流量控制 236
13.2.6 差错控制 237
13.2.7 拥塞控制 237
13.3 端口号的概念 237
13.4 TCP报文段结构 239
13.4.1 TCP报文段的封装 239
13.4.2 TCP报文段格式 239
13.5 TCP连接 243
13.5.1 “三次握手”建立连接 243
13.5.2 “四次挥手”终止连接 246
13.6 TCP状态 247
13.6.1 LwIP中定义的TCP状态 247
13.6.2 TCP状态转移 248
13.7 TCP中的数据结构 250
13.8 窗口的概念 253
13.8.1 接收窗口 254
13.8.2 发送窗口 254
13.9 TCP报文段处理 255
13.9.1 报文段缓冲队列 255
13.9.2 TCP报文段发送 256
13.9.3 TCP报文段接收 260
第14章 UDP 265
14.1 UDP概述 265
14.2 UDP常用端口号 266
14.3 UDP报文 266
14.4 UDP报文的数据结构 267
14.4.1 UDP报文首部结构体 267
14.4.2 UDP控制块 267
14.5 UDP报文发送 270
14.6 UDP报文接收 272
第15章 使用Netconn接口编程 277
15.1 netbuf结构体 277
15.2 netbuf相关函数说明 279
15.2.1 netbuf_new() 279
15.2.2 netbuf_delete() 279
15.2.3 netbuf_alloc() 280
15.2.4 netbuf_free() 280
15.2.5 netbuf_ref() 281
15.2.6 netbuf_chain() 282
15.2.7 netbuf_data() 282
15.2.8 netbuf_next()与netbuf_first() 282
15.2.9 netbuf_copy() 283
15.2.10 netbuf_take() 284
15.2.11 其他操作netbuf的宏定义 285
15.3 netconn结构体 285
15.4 netconn函数接口说明 287
15.4.1 netconn_new() 287
15.4.2 netconn_delete() 288
15.4.3 netconn_getaddr() 290
15.4.4 netconn_bind() 290
15.4.5 netconn_connect() 291
15.4.6 netconn_disconnect() 292
15.4.7 netconn_listen() 293
15.4.8 netconn_accept() 293
15.4.9 netconn_recv() 295
15.4.10 netconn_send() 296
15.4.11 netconn_sendto() 297
15.4.12 netconn_write() 298
15.4.13 netconn_close() 301
15.5 实验 302
15.5.1 TCP Client实验 302
15.5.2 TCP Client实验现象 307
15.5.3 TCP Server实验 308
15.5.4 TCP Server实验现象 314
15.5.5 UDP实验 315
15.5.6 UDP实验现象 319
第16章 使用Socket接口编程 321
16.1 什么是Socket 321
16.2 LwIP中的Socket 321
16.3 Socket API 322
16.3.1 socket() 322
16.3.2 bind() 323
16.3.3 connect() 324
16.3.4 listen() 325
16.3.5 accept() 325
16.3.6 read()、recv()、recvfrom() 325
16.3.7 sendto() 326
16.3.8 send() 327
16.3.9 write() 327
16.3.10 close() 327
16.3.11 ioctl()、ioctlsocket() 327
16.3.12 setsockopt() 328
16.3.13 getsockopt() 329
16.4 实验 329
16.4.1 TCP Client实验 329
16.4.2 TCP Server实验 331
16.4.3 UDP实验 333
第17章 使用RAW API接口编程 335
17.1 RAW API的UDP编程 335
17.1.1 新建控制块:udp_new() 335
17.1.2 绑定控制块:udp_bind() 336
17.1.3 建立会话:udp_connect() 337
17.1.4 断开会话:udp_disconnect() 338
17.1.5 接收数据:udp_recv() 339
17.1.6 发送数据:udp_send()与udp_sendto() 339
17.1.7 删除UDP控制块:udp_remove() 341
17.2 RAW API的TCP编程 341
17.2.1 新建控制块:tcp_new() 341
17.2.2 绑定控制块:tcp_bind() 342
17.2.3 控制块监听:tcp_listen() 343
17.2.4 处理连接:tcp_accept() 345
17.2.5 建立连接:tcp_connect() 346
17.2.6 终止连接:tcp_close() 348
17.2.7 接收数据:tcp_recv() 350
17.2.8 发送数据:tcp_sent() 350
17.2.9 异常处理:tcp_err() 351
17.2.10 周期性回调:tcp_poll() 351
17.2.11 构建报文段:tcp_write() 352
17.2.12 更新接收窗口:tcp_recved() 352
17.3 实验 353
17.3.1 TCP Client实验 353
17.3.2 TCP Server实验 358
17.3.3 UDP实验 360
第18章 使用JPerf工具测试网速 362
18.1 iPerf与JPerf 362
18.2 测试网络速度 362
18.2.1 获取JPerf网络测速工具 362
18.2.2 测试开发板接收速度(Netconn API) 363
18.2.3 测试开发板接收速度(Socket API) 366
18.2.4 测试开发板发送速度(Netconn API) 369
18.2.5 测试开发板发送速度(Socket API) 372
18.3 提高LwIP网络传输的速度 375
第19章 HTTP 377
19.1 什么是HTTP 377
19.2 URL与资源 378
19.3 HTTP报文 379
19.4 使用Postman获取论坛数据 380
19.5 使用开发板获取论坛数据 382
第20章 HTTP服务器 386
20.1 Hello World网页demo 386
20.2 提供网页控制LED开关的功能 389
第21章 MQTT协议 394
21.1 MQTT协议概述 394
21.2 MQTT通信模型 394
21.3 消息主题与服务质量 395
21.4 MQTT控制报文 396
21.4.1 固定报头 396
21.4.2 可变报头 397
21.4.3 有效载荷 400
21.5 移植MQTT协议 401
21.6 cJSON移植 407
第22章 连接到百度天工物接入 411
22.1 物接入概述 411
22.2 使用IoT Hub 411
22.2.1 创建计费套餐 411
22.2.2 创建项目 411
22.2.3 创建策略 413
22.2.4 创建身份与创建用户 413
22.2.5 MQTT软件测试连接 415
22.3 开发板连接IoT Hub 417
22.4 IoT Hub的规则引擎 422
22.4.1 什么是规则引擎 422
22.4.2 使用规则引擎 422
22.5 数据可视化 424
22.5.1 IoT Hub的时序数据库 424
22.5.2 IoT Hub的物可视 426
第23章 连接到阿里云物联 429
23.1 使用阿里云物联 429
23.2 MQTT软件测试连接 431
23.3 开发板连接阿里云物联 434
23.4 阿里云物联的规则引擎 435
第24章 连接到OneNET 437
24.1 使用OneNET 437
24.2 测试连接 438
24.3 开发板连接OneNET 439
24.4 添加数据流 441
24.5 系统主题的发布格式 442
24.6 使用开发板发布数据点 443
24.7 数据可视化 446



---------------------------STM32库开发实战指南:基于STM32F4---------------------------


前言
第1章 如何安装KEIL5 1
1.1 温馨提示 1
1.2 获取KEIL5安装包 1
1.3 开始安装KEIL5 1
1.4 安装STM32芯片包 3
第2章 如何用DAP仿真器下载程序 6
2.1 仿真器简介 6
2.2 硬件连接 6
2.3 仿真器配置 6
2.4 选择目标板 9
2.5 下载程序 9
第3章 初识STM32 10
3.1 什么是STM32 10
3.2 STM32能做什么 10
3.2.1 智能手环 11
3.2.2 微型四轴飞行器 12
3.2.3 淘宝众筹 12
3.3 STM32选型 13
3.3.1 STM32分类 13
3.3.2 STM32命名方法 14
3.3.3 选择合适的MCU 14
第4章 寄存器 17
4.1 寄存器简介 17
4.2 STM32的外观 17
4.3 芯片里面有什么 18
4.4 存储器映射 21
4.5 寄存器映射 23
4.5.1 STM32的外设地址映射 23
4.5.2 C语言对寄存器的封装 26
第5章 新建工程——寄存器版 31
5.1 新建本地工程文件夹工程 31
5.1.1 新建本地工程文件夹 31
5.1.2 新建工程 32
5.2 下载程序 38
第6章 使用寄存器点亮LED 39
6.1 GPIO简介 39
6.2 GPIO框图剖析 39
6.2.1 基本结构分析 39
6.2.2 GPIO工作模式 42
6.3 实验:使用寄存器点亮LED 43
6.3.1 硬件连接 44
6.3.2 启动文件 44
6.3.3 stm32f4xx.h文件 46
6.3.4 main文件 47
6.3.5 下载验证 51
第7章 自己写库——构建库函数雏形 52
7.1 STM32函数库简介 52
7.2 采用库来开发及学习的原因 53
7.3 实验:构建库函数雏形 53
7.3.1 修改寄存器地址封装 54
7.3.2 定义访问外设的结构体指针 55
7.3.3 定义初始化结构体 59
7.3.4 定义引脚模式的枚举类型 60
7.3.5 定义GPIO初始化函数 62
7.3.6 使用函数点亮LED 64
7.3.7 下载验证 66
7.3.8 总结 66
第8章 初识STM32标准库 67
8.1 CMSIS标准及库层次关系 67
8.1.1 库、文件简介 68
8.1.2 各库文件间的关系 74
8.2 使用帮助文档 75
8.2.1 常用官方资料 75
8.2.2 初识库函数 76
第9章 新建工程——库函数版 78
9.1 新建本地工程文件夹 78
9.2 新建工程 79
9.3 配置魔术棒选项卡 82
9.4 下载器配置 85
9.5 选择Flash大小 86
第10章 GPIO输出——使用固件库点亮LED 88
10.1 硬件设计 88
10.2 软件设计 88
10.2.1 编程要点 89
10.2.2 代码分析 89
10.2.3 下载验证 94
10.3 STM32标准库补充知识 94
第11章 GPIO输入——按键检测 98
11.1 硬件设计 98
11.2 软件设计 99
11.2.1 编程要点 99
11.2.2 代码分析 99
11.2.3 下载验证 102
第12章 GPIO——位带操作 103
12.1 位带简介 103
12.1.1 外设位带区 103
12.1.2 SRAM位带区 104
12.1.3 位带区和位带别名区地址转换 104
12.2 GPIO位带操作 105
第13章 启动文件 108
13.1 启动文件简介 108
13.2 查找ARM汇编指令 108
13.3 启动文件代码讲解 109
第14章 RCC——使用HSE/HSI配置时钟 116
14.1 RCC主要作用——时钟部分 116
14.2 RCC框图剖析——时钟树 116
14.2.1 系统时钟 116
14.2.2 其他时钟 121
14.3 配置系统时钟实验 122
14.3.1 使用HSE 122
14.3.2 使用HSI 122
14.3.3 硬件设计 123
14.3.4 软件设计 123
14.3.5 下载验证 129
第15章 STM32中断应用概览 130
15.1 异常类型 130
15.2 NVIC简介 131
15.2.1 NVIC寄存器简介 131
15.2.2 NVIC中断配置固件库 132
15.3 优先级的定义 132
15.3.1 优先级定义 132
15.3.2 优先级分组 133
15.4 中断编程 134
第16章 EXTI——外部中断/事件控制器 136
16.1 EXTI简介 136
16.2 EXTI功能框图 136
16.3 中断/事件线 138
16.4 EXTI初始化结构体详解 139
16.5 外部中断控制实验 139
16.5.1 硬件设计 140
16.5.2 软件设计 140
16.5.3 下载验证 144
第17章 SysTick——系统定时器 145
17.1 SysTick简介 145
17.2 SysTick寄存器介绍 145
17.3 SysTick定时实验 146
17.3.1 硬件设计 146
17.3.2 软件设计 146
第18章 通信的基本概念 152
18.1 串行通信与并行通信 152
18.2 全双工、半双工及单工通信 153
18.3 同步通信与异步通信 153
18.4 通信速率 154
第19章 USART——串口通信 155
19.1 串口通信协议简介 155
19.1.1 物理层 155
19.1.2 协议层 158
19.2 STM32的USART简介 159
19.3 USART功能框图 160
19.4 USART初始化结构体详解 166
19.5 USART1接发通信实验 167
19.5.1 硬件设计 168
19.5.2 软件设计 168
19.5.3 下载验证 173
19.6 USART1指令控制RGB彩灯实验 174
19.6.1 硬件设计 174
19.6.2 软件设计 174
19.6.3 下载验证 179
第20章 DMA 180
20.1 DMA简介 180
20.2 DMA功能框图 180
20.3 DMA数据配置 184
20.4 DMA初始化结构体详解 188
20.5 DMA存储器到存储器模式实验 190
20.5.1 硬件设计 190
20.5.2 软件设计 190
20.5.3 下载验证 195
20.6 DMA存储器到外设模式实验 195
20.6.1 硬件设计 195
20.6.2 软件设计 195
20.6.3 下载验证 199
第21章 常用存储器介绍 200
21.1 存储器种类 200
21.2 RAM存储器 200
21.2.1 DRAM 201
21.2.2 SRAM 202
21.2.3 DRAM与SRAM的应用场合 202
21.3 非易失性存储器 202
21.3.1 ROM存储器 202
21.3.2 Flash存储器 203
第22章 I2C——读写EEPROM 205
22.1 I2C协议简介 205
22.1.1 I2C物理层 205
22.1.2 协议层 206
22.2 STM32的I2C特性及架构 209
22.2.1 STM32的I2C外设简介 209
22.2.2 STM32的I2C架构剖析 210
22.2.3 通信过程 212
22.3 I2C初始化结构体详解 213
22.4 I2C——读写EEPROM实验 215
22.4.1 硬件设计 215
22.4.2 软件设计 216
22.4.3 下载验证 234
第23章 SPI——读写串行Flash 235
23.1 SPI协议简介 235
23.1.1 SPI物理层 235
23.1.2 协议层 236
23.2 STM32的SPI特性及架构 238
23.2.1 STM32的SPI外设简介 238
23.2.2 STM32的SPI架构剖析 239
23.2.3 通信过程 241
23.3 SPI初始化结构体详解 242
23.4 SPI——读写串行Flash实验 243
23.4.1 硬件设计 243
23.4.2 软件设计 244
23.4.3 下载验证 264
第24章 串行Flash文件系统FatFs 265
24.1 文件系统 265
24.2 FatFs文件系统简介 266
24.2.1 FatFs的结构 266
24.2.2 FatFs帮助文档 266
24.2.3 FatFs源码 267
24.3 FatFs文件系统移植实验 268
24.3.1 FatFs程序结构图 268
24.3.2 硬件设计 269
24.3.3 FatFs移植步骤 269
24.3.4 FatFs底层设备驱动函数 271
24.3.5 FatFs功能配置 276
24.3.6 FatFs功能测试 277
24.3.7 下载验证 280
24.4 FatFs功能使用实验 281
24.4.1 硬件设计 281
24.4.2 软件设计 281
24.4.3 下载验证 286
第25章 FMC——扩展外部SDRAM 287
25.1 SDRAM控制原理 287
25.1.1 SDRAM信号线 288
25.1.2 控制逻辑 289
25.1.3 地址控制 289
25.1.4 SDRAM的存储阵列 289
25.1.5 数据输入输出 289
25.1.6 SDRAM的命令 290
25.1.7 SDRAM的初始化流程 295
25.1.8 SDRAM的读写流程 296
25.2 FMC简介 297
25.3 FMC框图剖析 298
25.4 FMC的地址映射 300
25.5 SDRAM时序结构体 302
25.6 SDRAM初始化结构体 303
25.7 SDRAM命令结构体 304
25.8 FMC——扩展外部SDRAM实验 305
25.8.1 硬件设计 305
25.8.2 软件设计 305
25.8.3 下载验证 316
第26章 LTDC/DMA2D——液晶显示 317
26.1 显示器简介 317
26.1.1 液晶显示器 317
26.1.2 LED和OLED显示器 318
26.1.3 显示器的基本参数 319
26.2 液晶屏控制原理 319
26.2.1 液晶面板的控制信号 320
26.2.2 液晶数据传输时序 321
26.2.3 显存 323
26.3 LTDC液晶控制器简介 323
26.3.1 图像数据混合 323
26.3.2 LTDC结构框图剖析 324
26.4 DMA2D图形加速器简介 327
26.5 LTDC初始化结构体 329
26.6 LTDC层级初始化结构体 331
26.7 DMA2D初始化结构体 334
26.8 LTDC/DMA2D——液晶显示实验 336
26.8.1 硬件设计 336
26.8.2 软件设计 338
26.8.3 下载验证 358
第27章 LTDC——液晶显示中英文 359
27.1 字符编码 359
27.1.1 ASCII编码 359
27.1.2 中文编码 362
27.1.3 Unicode字符集和编码 365
27.1.4 UTF-32 365
27.1.5 UTF-16 365
27.1.6 UTF-8 366
27.1.7 BOM 367
27.2 字模简介 367
27.2.1 字模的构成 368
27.2.2 字模显示原理 368
27.2.3 如何制作字模 370
27.2.4 字模寻址公式 371
27.2.5 存储字模文件 372
27.3 LTDC——各种模式的液晶显示字符实验 372
27.3.1 硬件设计 373
27.3.2 显示ASCII编码的字符 373
27.3.3 显示GB2312编码的字符 382
27.3.4 显示任意大小的字符 391
27.3.5 下载验证 398
第28章 电容触摸屏——触摸画板 399
28.1 触摸屏简介 399
28.1.1 电阻触摸屏检测原理 399
28.1.2 电容触摸屏检测原理 401
28.2 电容触摸屏控制芯片 402
28.2.1 GT9157芯片的引脚 403
28.2.2 上电时序与I2C设备地址 404
28.2.3 寄存器配置 404
28.2.4 读取坐标信息 406
28.3 电容触摸屏——触摸画板实验 408
28.3.1 硬件设计 408
28.3.2 软件设计 409
28.3.3 下载验证 430
第29章 ADC——电压采集 431
29.1 ADC简介 431
29.2 ADC功能框图剖析 431
29.2.1 ADC功能 431
29.2.2 电压转换 437
29.3 ADC初始化结构体详解 437
29.4 独立模式单通道采集实验 438
29.4.1 硬件设计 439
29.4.2 软件设计 439
29.4.3 下载验证 443
29.5 独立模式多通道采集实验 443
29.5.1 硬件设计 443
29.5.2 软件设计 443
29.5.3 下载验证 449
29.6 三重ADC交替模式采集实验 449
29.6.1 硬件设计 449
29.6.2 软件设计 450
29.6.3 下载验证 455
第30章 TIM——基本定时器 456
30.1 TIM简介 456
30.2 基本定时器 456
30.3 基本定时器功能框图 458
30.4 定时器初始化结构体详解 460
30.5 基本定时器定时实验 461
30.5.1 硬件设计 461
30.5.2 软件设计 461
30.5.3 下载验证 464
第31章 TIM——高级定时器 465
31.1 高级控制定时器 465
31.2 高级控制定时器功能框图 466
31.3 输入捕获应用 476
31.3.1 测量脉宽或者频率 476
31.3.2 PWM输入模式 477
31.4 输出比较应用 478
31.5 定时器初始化结构体详解 480
31.6 PWM互补输出实验 483
31.6.1 硬件设计 484
31.6.2 软件设计 484
31.6.3 下载验证 488
31.7 PWM输入捕获实验 489
31.7.1 硬件设计 489
31.7.2 软件设计 489
31.7.3 下载验证 494
第32章 TIM——电容按键检测 495
32.1 电容按键原理 495
32.2 电容按键检测实验 496
32.2.1 硬件设计 497
32.2.2 软件设计 497
32.2.3 下载验证 504
第33章 SDIO——SD卡读写测试 505
33.1 SDIO简介 505
33.2 SD卡物理结构 506
33.3 SDIO总线 507
33.3.1 总线拓扑 507
33.3.2 总线协议 508
33.3.3 命令 510
33.3.4 响应 512
33.4 SD卡的操作模式及切换 514
33.4.1 SD卡的操作模式 514
33.4.2 卡识别模式 514
33.4.3 数据传输模式 516
33.5 STM32的SDIO功能框图 516
33.6 SDIO初始化结构体 521
33.7 SDIO命令初始化结构体 522
33.8 SDIO数据初始化结构体 523
33.9 SD卡读写测试实验 523
33.9.1 硬件设计 524
33.9.2 软件设计 524
33.9.3 下载验证 549
第34章 基于SD卡的FatFs文件系统 550
34.1 FatFs移植步骤 550
34.2 FatFs接口函数 552
34.3 FatFs功能测试 557
第35章 I2S——音频播放与录音输入 561
35.1 I2S简介 561
35.1.1 数字音频技术 561
35.1.2 I2S总线接口 562
35.1.3 音频数据传输协议标准 562
35.2 I2S功能框图 565
35.3 WM8978音频编译码器 567
35.4 WAV格式文件 569
35.4.1 RIFF文件规范 570
35.4.2 WAV文件 570
35.4.3 WAV文件实例分析 571
35.5 I2S初始化结构体详解 571
35.6 录音与回放实验 572
35.6.1 硬件设计 573
35.6.2 软件设计 573
35.6.3 下载验证 601
35.7 MP3播放器 601
35.7.1 MP3文件结构 602
35.7.2 MP3解码库 605
35.7.3 Helix解码库移植 606
35.7.4 MP3播放器功能实现 606
35.7.5 下载验证 614
第36章 ETH——LwIP以太网通信 615
36.1 互联网模型 615
36.2 以太网 616
36.2.1 PHY层 616
36.2.2 MAC子层 617
36.3 TCP/IP协议栈 618
36.3.1 需要协议栈的原因 619
36.3.2 各网络层的功能 619
36.4 以太网外设 620
36.4.1 SMI接口 621
36.4.2 MII和RMII接口 623
36.4.3 MAC数据包发送和接收 624
36.4.4 MAC过滤 626
36.5 PHY:LAN8720A 626
36.6 LwIP:轻型TCP/IP协议栈 629
36.7 ETH初始化结构体详解 629
36.8 以太网通信实验:无操作系统LwIP移植 635
36.8.1 硬件设计 635
36.8.2 移植步骤 635
36.8.3 下载验证 661
36.9 基于μCOS-III移植LwIP实验 663
第37章 CAN——通信实验 680
37.1 CAN协议简介 680
37.1.1 CAN物理层 680
37.1.2 协议层 684
37.2 STM32的CAN外设简介 690
37.3 CAN初始化结构体 698
37.4 CAN发送及接收结构体 700
37.5 CAN筛选器结构体 701
37.6 CAN——双机通信实验 703
37.6.1 硬件设计 703
37.6.2 软件设计 704
37.6.3 下载验证 713
第38章 RS-485通信实验 714
38.1 RS-485通信协议简介 714
38.2 RS-485——双机通信实验 715
38.2.1 硬件设计 715
38.2.2 软件设计 716
38.2.3 下载验证 723
第39章 电源管理——实现低功耗 724
39.1 STM32的电源管理简介 724
39.1.1 电源监控器 724
39.1.2 STM32的电源系统 726
39.1.3 STM32的功耗模式 727
39.2 电源管理相关的库函数及命令 729
39.2.1 配置PVD监控功能 729
39.2.2 WFI与WFE命令 729
39.2.3 进入停止模式 730
39.2.4 进入待机模式 731
39.3 PWR——睡眠模式实验 732
39.3.1 硬件设计 732
39.3.2 软件设计 732
39.3.3 下载验证 735
39.4 PWR——停止模式实验 735
39.4.1 硬件设计 735
39.4.2 软件设计 735
39.4.3 下载验证 739
39.5 PWR——待机模式实验 739
39.5.1 硬件设计 740
39.5.2 软件设计 740
39.5.3 下载验证 743
39.6 PWR——PVD电源监控实验 743
39.6.1 硬件设计 743
39.6.2 软件设计 745
39.6.3 下载验证 747
第40章 RTC——实时时钟 748
40.1 RTC简介 748
40.2 RTC功能框图解析 748
40.3 RTC初始化结构体讲解 751
40.4 RTC时间结构体讲解 752
40.5 RTC日期结构体讲解 753
40.6 RTC闹钟结构体讲解 753
40.7 RTC—日历实验 754
40.7.1 硬件设计 754
40.7.2 软件设计 754
40.7.3 下载验证 760
40.8 RTC—闹钟实验 760
40.8.1 硬件设计 760
40.8.2 软件设计 760
40.8.3 下载验证 765
第41章 DCMI——OV5640摄像头 766
41.1 摄像头简介 766
41.1.1 数字摄像头与模拟摄像头的区别 766
41.1.2 CCD与CMOS的区别 767
41.2 OV5640摄像头 767
41.2.1 OV5640传感器简介 769
41.2.2 OV5640引脚及功能框图 769
41.2.3 SCCB时序 771
41.2.4 OV5640的寄存器 772
41.2.5 像素数据输出时序 773
41.3 STM32的DCMI接口简介 773
41.3.1 DCMI整体框图 774
41.3.2 DCMI接口内部结构 775
41.3.3 同步方式 775
41.3.4 捕获模式及捕获率 776
41.4 DCMI初始化结构体 776
41.5 DCMI——OV5640摄像头实验 777
41.5.1 硬件设计 777
41.5.2 软件设计 779
41.5.3 下载验证 797
第42章 MDK的编译过程及文件类型全解 798
42.1 编译过程 798
42.1.1 编译过程简介 798
42.1.2 具体工程中的编译过程 799
42.2 程序的组成、存储与运行 800
42.2.1 CODE、RO、RW、ZI Data域及堆栈空间 800
42.2.2 程序的存储与运行 801
42.3 编译工具链 802
42.3.1 设置环境变量 803
42.3.2 armcc、armasm及armlink 804
42.3.3 armar、fromelf及用户指令 807
42.4 MDK工程的文件类型 808
42.4.1 uvprojx、uvoptx、uvguix及ini工程文件 809
42.4.2 源文件 811
42.4.3 Output下生成的文件 811
42.4.4 Listing下的文件 831
42.4.5 sct分散加载文件的格式与应用 837
42.5 实验:自动分配变量到外部SDRAM空间 846
42.5.1 硬件设计 846
42.5.2 软件设计 847
42.5.3 下载验证 853
42.6 实验:优先使用内部SRAM并把堆区分配到SDRAM空间 853
42.6.1 硬件设计 854
42.6.2 软件设计 854
42.6.3 下载验证 864
第43章 在SRAM中调试代码 865
43.1 在RAM中调试代码 865
43.2 STM32的启动方式 865
43.3 内部Flash的启动过程 867
43.4 实验:在内部SRAM中调试代码 869
43.4.1 硬件设计 869
43.4.2 软件设计 870
43.4.3 下载验证 877
第44章 读写内部Flash 878
44.1 STM32的内部Flash简介 878
44.2 对内部Flash的写入过程 881
44.3 查看工程的空间分布 882
44.4 操作内部Flash的库函数 884
44.5 实验:读写内部Flash 887
44.5.1 硬件设计 887
44.5.2 软件设计 887
44.5.3 下载验证 893
第45章 设置Flash的读写保护及解除 894
45.1 选项字节与读写保护 894
45.1.1 选项字节的内容 894
45.1.2 RDP读保护级别 896
45.1.3 PCROP代码读出保护 898
45.2 修改选项字节的过程 898
45.3 操作选项字节的库函数 899
45.4 实验:设置读写保护及解除 901
45.4.1 硬件设计 902
45.4.2 软件设计 902
45.4.3 下载验证 908



有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4