现有一个路由,一个STM32开发板,一台PC。已实现将开发板分别或同时做为SERVER,CLIENT和PC通信,但IP地址都是通过预先配置好的。现在想在开发板做CLIENT时,使用路由做DHCP server给板子自动分配IP。分配不成功,不知道怎么回事,路由已经开启了DHCP功能。有人做过类似的能讲一下或分享一下么。void LwIP_Init( void )
{
struct netif enc28j60;
struct ip_addr ipaddr;
struct ip_addr netmask;
struct ip_addr gw;
int i,j,cnt;
/*调用LWIP初始化函数,
初始化网络接口结构体链表、内存池、pbuf结构体,启动协议栈管理进程*/
lwip_init();
#if LWIP_DHCP //若使用DHCP协议
ipaddr.addr = 0;
netmask.addr = 0;
gw.addr = 0;
for(i = 0; i < 5; i++)
{
dhcp_start(&enc28j60);
IP4_ADDR(&ipaddr,0,0,0,0);
for(cnt = 0; (cnt < 10) && (ipaddr.addr == 0); cnt ++)
{
ipaddr.addr = enc28j60.ip_addr.addr;
for(j = 0; j<100000; j++);
}
dhcp_stop(&enc28j60);
if(ipaddr.addr != 0)
{
break;
}
ipaddr.addr = enc28j60.ip_addr.addr;
netmask.addr = enc28j60.netmask.addr;
gw.addr = enc28j60.gw.addr;
}
#else //
IP4_ADDR(&ipaddr, 192, 168, 0, 16); //设置网络接口的ip地址
IP4_ADDR(&netmask, 255, 255, 255, 0); //子网掩码
IP4_ADDR(&gw, 192, 168, 0, 1); //网关
#endif
/*初始化enc28j60与LWIP的接口,参数为网络接口结构体、ip地址、
子网掩码、网关、网卡信息指针、初始化函数、输入函数*/
netif_add(&enc28j60, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
/*把enc28j60设置为默认网卡 .*/
netif_set_default(&enc28j60);
/* When the netif is fully configured this function must be called.*/
netif_set_up(&enc28j60); //使能enc28j60接口
}
|