STM32H743建立UDP通信,断电之后需要再次插拔网线才能重新建立UDP连接的问题解决办法

作者按照正点原子的网络通信的例程对UDP的收发进行了更改,发现UDP通信可用,但是在下电重新上电之后,网口虽然闪烁,但是最终无法建立有效的UDP通信连接

最终通过研究发现应该是使用了DHCP的问题,在LWIP初始化的时候,关掉DHCP就可以了,亲测可用

打开lwip初始化函数

			while(lwip_comm_init())         //lwip初始化
			{
			delay_ms(500);
			}

打开lan_8720_init函数

u8 lwip_comm_init(void)
{
    u8 retry=0;
	struct netif *Netif_Init_Flag;		//µ÷ÓÃnetif_add()º¯ÊýʱµÄ·µ»ØÖµ,ÓÃÓÚÅжÏÍøÂç³õʼ»¯ÊÇ·ñ³É¹¦
	struct ip_addr ipaddr;  			//ipµØÖ·
	struct ip_addr netmask; 			//×ÓÍøÑÚÂë
	struct ip_addr gw;      			//ĬÈÏÍø¹Ø 

    lwip_comm_default_ip_set(&lwipdev);	//ÉèÖÃĬÈÏIPµÈÐÅ
    while(LAN8720_Init())		        //³õʼ»¯LAN8720,Èç¹ûʧ°ÜµÄ»°¾ÍÖØÊÔ5´Î
    {
        retry++;
        if(retry>10) {retry=0;return 3;} //LAN8720³õʼ»¯Ê§°Ü
    }
	lwip_init();						//³õʼ»¯LWIPÄÚºË

#if LWIP_DHCP		//ʹÓö¯Ì¬IP
	ipaddr.addr = 0;
	netmask.addr = 0;
	gw.addr = 0;
#else				//ʹÓþ²Ì¬IP
	IP4_ADDR(&ipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
	IP4_ADDR(&netmask,lwipdev.netmask[0],lwipdev.netmask[1] ,lwipdev.netmask[2],lwipdev.netmask[3]);
	IP4_ADDR(&gw,lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);
	printf("Íø¿¨enµÄMACµØÖ·Îª:................%d.%d.%d.%d.%d.%d\r\n",lwipdev.mac[0],lwipdev.mac[1],lwipdev.mac[2],lwipdev.mac[3],lwipdev.mac[4],lwipdev.mac[5]);
	printf("¾²Ì¬IPµØÖ·........................%d.%d.%d.%d\r\n",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
	printf("×ÓÍøÑÚÂë..........................%d.%d.%d.%d\r\n",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]);
	printf("ĬÈÏÍø¹Ø..........................%d.%d.%d.%d\r\n",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);
#endif
	Netif_Init_Flag=netif_add(&lwip_netif,&ipaddr,&netmask,&gw,NULL,&ethernetif_init,&ethernet_input);//ÏòÍø¿¨ÁбíÖÐÌí¼ÓÒ»¸öÍø¿Ú
	
#if LWIP_DHCP			//Èç¹ûʹÓÃDHCPµÄ»°
	lwipdev.dhcpstatus=0;	//DHCP±ê¼ÇΪ0
	dhcp_start(&lwip_netif);	//¿ªÆôDHCP·þÎñ
#endif
	
	if(Netif_Init_Flag==NULL)return 4;//Íø¿¨Ìí¼Óʧ°Ü 
	else//Íø¿ÚÌí¼Ó³É¹¦ºó,ÉèÖÃnetifΪĬÈÏÖµ,²¢ÇÒ´ò¿ªnetifÍø¿Ú
	{
		netif_set_default(&lwip_netif); //ÉèÖÃnetifΪĬÈÏÍø¿Ú
		netif_set_up(&lwip_netif);		//´ò¿ªnetifÍø¿Ú
	}
	return 0;//²Ù×÷OK.
}   

最终将LWIP_DHCP的默认值从1更改为0

问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值