现有一个路由,一个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接口
-
- }
|