1、简介
Light weight IP(LWIP)轻量化的 TCP/IP 协议,LwIP 的设计初衷是用少量的资源消耗(RAM)实现一个较为完整的 TCP/IP 协议栈, 在保持 TCP 协议主要功能的基础上减少对 RAM 的占用。LwIP既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行。它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。
2、准备工具
准备一块带以太网RJ45网口的ST开发板,这里以NUCLEO-F429ZI为例;
家用路由器一个;
网线一根。
3、cubemx工程设置
勾选ETH外设,接口选择RMII,其他选项保持默认

NUCLEO-F429ZI的ETH外设没有集成物理层的数据转换芯片,这里使用的外部PHY模块为LAN8742,需要在Lwip平台设置中指明PHY型号。

Lwip的设置参数有很多,以下只需进行少量的参数配置完成简易驱动即可
使能DHCP模块,用于分配动态IP地址。使能ICMP模块,为后面电脑与开发板Ping通信使用,还有是设置UDP、TCP的客户端连接数量,连接数量越多则占用的资源也相应增加。

以生成MDK工程为例,同时注意调大堆栈大小

4、软件测试
lwip库自动生成了一系列变量,ipv4地址缓存、子网掩码、网关等

主要测试代码放置在main.c文件,在main文件需要声明必要变量以及导入外部变量

/* USER CODE BEGIN PV */ extern struct netif gnetif; struct dhcp *dhcp; /* USER CODE END PV */
cubemx已完成Lwip初始化

/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
MX_LWIP_Process();
dhcp = netif_dhcp_data(&gnetif);
printf("DHCP IPV4 Address: %s\n", ip4addr_ntoa(&dhcp->offered_ip_addr));
printf("DHCP SubnetMask: %s\n", ip4addr_ntoa(&dhcp->offered_sn_mask));
printf("DHCP Gateway: %s\n", ip4addr_ntoa(&dhcp->offered_gw_addr));
HAL_Delay(1200);
}实物连接图

串口输出开发板获取的IP信息
![1741530098903339.png LM]34ZY4GL$XDFFH(Z8XDN3.png](http://uphotos.eepw.com.cn/1709346044/pics/1741530098903339.png)
局域网Ping测试

我要赚赏金
