打印

LwIP DHCP 功能实现

[复制链接]
3473|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
can123dao|  楼主 | 2013-7-27 09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有一个路由,一个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, &ethernetif_init, &ethernet_input);
  
  /*把enc28j60设置为默认网卡 .*/
  netif_set_default(&enc28j60);

  /*  When the netif is fully configured this function must be called.*/
  netif_set_up(&enc28j60); //使能enc28j60接口

}
沙发
can123dao|  楼主 | 2013-7-28 10:49 | 只看该作者
自己顶啊 ,来人救命啊

使用特权

评论回复
板凳
duxinlng| | 2015-11-11 17:33 | 只看该作者
还没搞定吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

114

帖子

2

粉丝