没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:本文档是一份详细的嵌入式开发教程,重点介绍了基于野火STM32的LwIP协议栈的开发和应用。内容覆盖了TCP/IP协议的分层模型、LwIP的基本特性及其文件结构、ETH外设配置和使用方法。通过对实际案例和代码示例的分析,帮助开发者理解和掌握LwIP在嵌入式系统中的应用。 适合人群:适用于具备基本嵌入式开发经验和STM32使用经验的研发人员。 使用场景及目标:①帮助嵌入式工程师了解TCP/IP协议栈的基本原理和LwIP的特点;②提供具体的实例和开发技巧,提升开发者在物联网领域的应用能力。 其他说明:文档中包含了大量代码示例和实战项目,推荐在学习过程中结合实践操作。此外,文中还提供了丰富的参考资料和扩展资源,方便进一步深入研究。
资源推荐
资源详情
资源评论
[野火]LwIP 应用开发实战指南
—基于野火 STM32
EmbedFire
野火电子
2021 年 01 月 22 日
[野火]LwIP 应用开发实战指南
Contents
关于本项目. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
关于野火 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
开源共享,共同进步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
联系方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
TODO 和悬赏任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
第 1 章 网络协议简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 常用网络协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 网络协议的分层模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 协议层报文间的封装与拆封 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
第 2 章 LwIP 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 LwIP 的优缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 LwIP 的文件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 如何获取 LwIP 源码文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.2 LwIP 文件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 查看 LwIP 的说明文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4 使用 vscode 查看源码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1 查看文件中的符号列表(函数列表) . . . . . . . . . . . . . . . . . . . . . 26
2.4.2 函数定义跳转 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5 LwIP 源码里的 example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6 LwIP 的三种编程接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.1 RAW/Callback API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.2 NETCONN API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.3 SOCKET API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
第 3 章 开发平台介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 以太网简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.1 PHY 层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.2 MAC 子层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
论坛:https://www.firebbs.cn i 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
3.2 STM32 的 ETH 外设 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3 MII 和 RMII 接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4 PHY:LAN8720A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5 硬件设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.6 软件设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.1 获取 STM32 的裸机工程模板 . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.2 添加 bsp_eth.c 与 bsp_eth.h . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.3 修改 stm32f4xx_hal_conf.h 文件 . . . . . . . . . . . . . . . . . . . . . . . . 58
第 4 章 LwIP 的网络接口管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.1 netif 结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2 netif 使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.3 与 netif 相关的底层函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4 ethernetif.c 文件内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.4.1 ethernetif 数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.4.2 ethernetif_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.4.3 low_level_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
第 5 章 LwIP 的内存管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1 几种内存分配策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1.1 固定大小的内存块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1.2 可变长度分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.2 动态内存池(POOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.2.1 内存池的预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.2.2 内存池的初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.2.3
内存分配
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.2.4 内存释放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.3 动态内存堆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.3.1 内存堆的组织结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.3.2 内存堆初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.3.3 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.3.4 内存释放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.4 使用 C 库的 malloc 和 free 来管理内存 . . . . . . . . . . . . . . . . . . . . . . . . . 115
论坛:https://www.firebbs.cn ii 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
5.5 LwIP 中的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
第 6 章 网络数据包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.1 TCP/IP 协议的分层思想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.2 LwIP 的线程模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.3 pbuf 结构体说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.4 pbuf 的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.4.1 PBUF_RAM 类型的 pbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.4.2 PBUF_POOL 类型的 pbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.4.3 PBUF_ROM 和 PBUF_REF 类型 pbuf . . . . . . . . . . . . . . . . . . . . . 128
6.5 pbuf_alloc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.6 pbuf_free() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.7 其它 pbuf 操作函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.7.1 pbuf_realloc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.7.2 pbuf_header() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.7.3 pbuf_take() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.8 网卡中使用的 pbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.8.1 low_level_output() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.8.2 low_level_input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.8.3 ethernetif_input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
第 7 章 无操作系统移植 LwIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.1 将 LwIP 添加到裸机工程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.2 移植头文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.3 移植网卡驱动 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
7.4 LwIP
时基
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
7.5 协议栈初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.6 获取数据包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
7.6.1 查询方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
7.6.2 ping 命令详解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
7.6.3 中断方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
第 8 章 有操作系统移植 LwIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.1 LwIP 中添加操作系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
论坛:https://www.firebbs.cn iii 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
8.1.1 拷贝 FreeRTOS 源码到工程文件夹 . . . . . . . . . . . . . . . . . . . . . . . 194
8.1.2 添加 FreeRTOS 源码到工程组文件夹 . . . . . . . . . . . . . . . . . . . . . 195
8.1.3 指定 FreeRTOS 头文件的路径 . . . . . . . . . . . . . . . . . . . . . . . . . 197
8.1.4 修改 stm32f4xx_it.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
8.2 lwipopts.h 文件需要加入的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.3 sys_arch.c/h 文件的编写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
8.4 网卡底层的编写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.5 协议栈初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8.6 移植后使用 ping 测试基本响应 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
第 9 章 LwIP 一探究竟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
9.1 网卡接收数据的流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
9.2 内核超时处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
9.2.1 sys_timeo 结构体与超时链表 . . . . . . . . . . . . . . . . . . . . . . . . . . 236
9.2.2 注册超时事件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
9.2.3 超时检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
9.3 tcpip_thread 线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
9.4 LwIP 中的消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.4.1 消息结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.4.2 数据包消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.4.3 API 消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
9.5 揭开 LwIP 神秘的面纱 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
第 10 章 ARP 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.1 链路层概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.2 MAC
地址的基本概念
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.3 初识 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
10.4 以太网帧结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
10.5 IP 地址映射为物理地址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
10.6 ARP 缓存表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
10.7 ARP 缓存表的超时处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
10.8 ARP 报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
10.9 发送 ARP 请求包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
论坛:https://www.firebbs.cn iv 天猫:https://yehuosm.tmall.com
剩余730页未读,继续阅读
资源评论
黄金右肾
- 粉丝: 72
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功