新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2018-11-6
- 在线时间
- 1 小时
|
1金钱
如题:STM32F107VCT6+DP83848+LWIP+TCP+UDP+DHCP自动获取IP,交换机能分配到固定的一个IP,一旦某个电脑设置成这个IP之后,单片机上电之后就再也获取不到IP了,是什么问题?求解!!!
void LwIP_Init(void)
{
struct ip_addr ipaddr;
struct ip_addr netmask;
struct ip_addr gw;
uint8_t macaddress[6]={0,0,0,0,0,1}; //DP83848的PHYAD0内部有弱上拉电阻,PHYAD1~PHYAD4悬空,所以MAC地址为1
mem_init();
memp_init();
ipaddr.addr = 0;
netmask.addr = 0;
gw.addr = 0;
Set_MAC_Address(macaddress);
netif_add(&netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
netif_set_default(&netif);
dhcp_start(&netif);
netif_set_up(&netif);
}
void LwIP_Periodic_Handle(__IO uint32_t localtime)
{
/* TCP periodic process every 250 ms */
if(localtime - TCPTimer >= TCP_TMR_INTERVAL)
{
TCPTimer = localtime;
tcp_tmr();
}
/* ARP periodic process every 5s */
if(localtime - ARPTimer >= ARP_TMR_INTERVAL)
{
ARPTimer = localtime;
etharp_tmr();
}
/* Fine DHCP periodic process every 500ms */
if(localtime - DHCPfineTimer >= DHCP_FINE_TIMER_MSECS)
{
DHCPfineTimer = localtime;
dhcp_fine_tmr();
}
/* DHCP Coarse periodic process every 60s */
if(localtime - DHCPcoarseTimer >= DHCP_COARSE_TIMER_MSECS)
{
DHCPcoarseTimer = localtime;
dhcp_coarse_tmr();
}
}
void Display_Periodic_Handle(__IO uint32_t localtime)
{
/* 250 ms */
if (localtime - DisplayTimer >= LCD_TIMER_MSECS)
{
DisplayTimer = localtime;
if (IPaddress != netif.ip_addr.addr) // netif.ip_addr.addr在LWIP_Init中清零了,若netif.ip_addr.addr不为0则表示已分配到新IP
{
IPaddress = netif.ip_addr.addr; //读取自动分配的IP地址
if (netif.flags & NETIF_FLAG_DHCP) //如果得到IP的话 建立端口连接
{
tcp_server_init(); //TCP-Server初始化
udp_server_init(); //UDP-Server初始化
DHCP_SuccessFlag = 1;
}
}
else if (IPaddress == 0)
{
if (netif.dhcp->tries > MAX_DHCP_TRIES) //如果是超时进入超时处理
{
struct ip_addr ipaddr;
struct ip_addr netmask;
struct ip_addr gw;
dhcp_stop(&netif);
IP4_ADDR(&ipaddr, 192, 168, 111, 30);
IP4_ADDR(&netmask, 255, 255, 255, 192);
IP4_ADDR(&gw, 192, 168, 111, 62);
netif_set_addr(&netif, &ipaddr , &netmask, &gw);
}
}
}
}
|
|