83 lines
2.5 KiB
C
83 lines
2.5 KiB
C
#include "main.h"
|
|
#include "cmsis_os.h"
|
|
#include "ethernetif.h"
|
|
#include "lwip/tcpip.h"
|
|
#include "lwip/init.h"
|
|
#include "lwip/netif.h"
|
|
#include "lwip/opt.h"
|
|
#include "lwip/mem.h"
|
|
#include "lwip/memp.h"
|
|
#include "netif/etharp.h"
|
|
#include "lwip/dhcp.h"
|
|
#include "lwip/netif.h"
|
|
#include "lwip/timeouts.h"
|
|
#include "bsp_eth.h"
|
|
/* Variables Initialization */
|
|
struct netif gnetif;
|
|
ip4_addr_t ipaddr;
|
|
ip4_addr_t netmask;
|
|
ip4_addr_t gw;
|
|
uint8_t IP_ADDRESS[4];
|
|
uint8_t NETMASK_ADDRESS[4];
|
|
uint8_t GATEWAY_ADDRESS[4];
|
|
|
|
void TCPIP_Init(void)
|
|
{
|
|
tcpip_init(NULL, NULL);
|
|
|
|
/* IP addresses initialization */
|
|
/* USER CODE BEGIN 0 */
|
|
#if LWIP_DHCP
|
|
ip_addr_set_zero_ip4(&ipaddr);
|
|
ip_addr_set_zero_ip4(&netmask);
|
|
ip_addr_set_zero_ip4(&gw);
|
|
#else
|
|
IP4_ADDR(&ipaddr,IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3);
|
|
IP4_ADDR(&netmask,NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3);
|
|
IP4_ADDR(&gw,GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3);
|
|
#endif /* USE_DHCP */
|
|
/* USER CODE END 0 */
|
|
/* Initilialize the LwIP stack without RTOS */
|
|
/* add the network interface (IPv4/IPv6) without RTOS */
|
|
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
|
|
|
|
/* Registers the default network interface */
|
|
netif_set_default(&gnetif);
|
|
|
|
if (netif_is_link_up(&gnetif))
|
|
{
|
|
/* When the netif is fully configured this function must be called */
|
|
netif_set_up(&gnetif);
|
|
}
|
|
else
|
|
{
|
|
/* When the netif link is down this function must be called */
|
|
netif_set_down(&gnetif);
|
|
}
|
|
|
|
#if LWIP_DHCP //若使用了DHCP
|
|
int err;
|
|
/* Creates a new DHCP client for this interface on the first call.
|
|
Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
|
|
the predefined regular intervals after starting the client.
|
|
You can peek in the netif->dhcp struct for the actual DHCP status.*/
|
|
|
|
printf("本例程将使用DHCP动态分配IP地址,如果不需要则在lwipopts.h中将LWIP_DHCP定义为0\n\n");
|
|
|
|
err = dhcp_start(&gnetif); //开启dhcp
|
|
if(err == ERR_OK)
|
|
printf("lwip dhcp init success...\n\n");
|
|
else
|
|
printf("lwip dhcp init fail...\n\n");
|
|
while(ip_addr_cmp(&(gnetif.ip_addr),&ipaddr)) //等待dhcp分配的ip有效
|
|
{
|
|
tos_task_delay(1);
|
|
}
|
|
#endif
|
|
printf("本地IP地址是:%d.%d.%d.%d\n\n", \
|
|
((gnetif.ip_addr.addr)&0x000000ff), \
|
|
(((gnetif.ip_addr.addr)&0x0000ff00)>>8), \
|
|
(((gnetif.ip_addr.addr)&0x00ff0000)>>16), \
|
|
((gnetif.ip_addr.addr)&0xff000000)>>24);
|
|
}
|