#include "w5500api.h" #include #include "w5500api.h" #include "dhcp.h" #include "dns.h" #include "mqtt_api.h" W5500_CONFIG NET_CONFIG; uint8 txsize[MAX_SOCK_NUM] = {2,2,2,2,2,2,2,2}; uint8 rxsize[MAX_SOCK_NUM] = {2,2,2,2,2,2,2,2}; //默认值 uint8 dmac[6]={0x02,0x0e,0xc3,0x23,0x12,0x45};//MAC地址 uint8 dlip[4]={192,168,31,60}; //本机IP uint8 dsub[4]={255,255,255,0}; //子网掩码 uint8 dgw[4]={192,168,31,1}; //网关 uint8 ddns[4]={114,114,114,114}; //DNS uint8 drip[4]={0,0,0,0}; //DNS 解析到的IP void Reset_W5500(void){ GPIO_ResetBits(GPIOA, GPIO_Pin_15); delay_us(500); GPIO_SetBits(GPIOA, GPIO_Pin_15); delay_ms(500); } void put_defaultNet(void){ memcpy(NET_CONFIG.mac,dmac,6);//MAC地址 memcpy(NET_CONFIG.lip,dlip,4);//本机IP memcpy(NET_CONFIG.sub,dsub,4);//子网掩码 memcpy(NET_CONFIG.gw,dgw,4); //网关 memcpy(NET_CONFIG.dns,ddns,4);//DNS memcpy(NET_CONFIG.rip,drip,4);//DNS 解析到的IP } uint8 set_Network(void){ uint8 temp[6]; setSHAR(NET_CONFIG.mac);//一个指向负责设置MAC地址的6字节数组的指针 setSUBR(NET_CONFIG.sub);//设置子网掩码地址 setGAR(NET_CONFIG.gw);//一个指向负责设置网关IP地址的4字节数组的指针。 setSIPR(NET_CONFIG.lip);//指向一个负责设置源IP地址的4字节数组的指针。 //Init. TX & RX Memory size of w5500 sysinit(txsize, rxsize); setRTR(2000);/*设置溢出时间值*/ setRCR(3);/*最大重发次数*/ getSHAR(temp);//配置“源IP地址” if(NET_CONFIG.mac[0]==temp[0]&&NET_CONFIG.mac[1]==temp[1]&&NET_CONFIG.mac[2]==temp[2]&& NET_CONFIG.mac[3]==temp[3]&&NET_CONFIG.mac[4]==temp[4]&&NET_CONFIG.mac[5]==temp[5]){ getSIPR(temp); if(NET_CONFIG.lip[0]==temp[0]&&NET_CONFIG.lip[1]==temp[1]&&NET_CONFIG.lip[2]==temp[2]&& NET_CONFIG.lip[3]==temp[3]){ getSUBR(temp); if(NET_CONFIG.sub[0]==temp[0]&&NET_CONFIG.sub[1]==temp[1]&&NET_CONFIG.sub[2]==temp[2]&& NET_CONFIG.sub[3]==temp[3]){ getGAR(temp); if(NET_CONFIG.gw[0]==temp[0]&&NET_CONFIG.gw[1]==temp[1]&&NET_CONFIG.gw[2]==temp[2]&& NET_CONFIG.gw[3]==temp[3])return 1; } } } return 0; } /** *@brief 检测网线是否正常 *@param 无 *@return 无 */ uint8 PHY_check(void) { return 0x01&IINCHIP_READ(PHYCFGR); } void init_W5500(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_15); WIZ_SPI_Init(); Reset_W5500();/*硬重启W5500*/ put_defaultNet();//赋值默认网络参数 } void init_Net(void){ u8 try_times=0; init_W5500(); printf("reset\r\n"); init_dhcp_client();//初始化DHCP客户端 printf("okk\r\n"); while(check_DHCP_state(SOCK_DHCP)!=DHCP_RET_UPDATE){ try_times++; if(try_times==100){ //超时 重启芯片 Reset_W5500(); printf("w5500 reset ok"); init_dhcp_client(); try_times=0; } delay_ms(5); } while(!set_Network()); }