You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
incubator_embeded/w5500/w5500api.c

88 lines
2.3 KiB

#include "w5500api.h"
#include <string.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};
uint8 dlip[4]={192,168,31,10};
uint8 dsub[4]={255,255,255,0};
uint8 dgw[4]={192,168,31,1};
uint8 ddns[4]={114,114,114,114};
uint8 drip[4]={0,0,0,0};
void Reset_W5500(void){
GPIO_ResetBits(GPIOA, GPIO_Pin_15);
delay_us(500);
GPIO_SetBits(GPIOA, GPIO_Pin_15);
delay_ms(1600);
}
void put_defaultNet(void){
memcpy(NET_CONFIG.mac,dmac,6);
memcpy(NET_CONFIG.lip,dlip,4);
memcpy(NET_CONFIG.sub,dsub,4);
memcpy(NET_CONFIG.gw,dgw,4);
memcpy(NET_CONFIG.dns,ddns,4);
memcpy(NET_CONFIG.rip,drip,4);
}
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();
}