作者按照正点原子的网络通信的例程对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,ðernetif_init,ðernet_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
问题解决