本帖最后由 黎明的太阳 于 2020-10-10 22:57 编辑
//mac地址生成片段
uint32_t GetUID(){
return DBGMCU_GetDEVID(); //调用自stm32f10x_dbgmcu.h
}
void GetMAC(uint8_t& a,uint8_t& b,uint8_t& c,uint8_t& d,uint8_t& e,uint8_t& f){
a=0xF1; //mcuid是4byte,所以捏了两字节的头a,b用以补够6byte的mac
b=0x32;
uint32_t id=GetUID();
char* cs=(char*)id;
c=cs[0];
d=cs[1];
e=cs[2];
f=cs[3];
}
//初始化默认地址的初始化函数
static void SetDefault(ConfigInfo* config){
memcpy(config->User,"admin\0",6);
memcpy(config->Password,"admin\0",6);
config->InitialFlag=INITIAL_FLAG;
config->Local.IP=Network::IpAddress(192,168,1,38);
config->Local.Mask=Network::IpAddress(255,255,255,0);
config->Local.GateWay=Network::IpAddress(0,0,0,0);
config->Server.ServerIP=Network::IpAddress(192,168,1,56);
config->Server.ServerPort=80;
config->Eth.Speed=0; //PHY速度,设置为0表示自动协商
config->Eth.Duplex_Mode=0; //双工半双工模式,0表示使用自动协商
}
//从一个32位整数还原ip地址(因为ip地址是配置的,配置后的结果是个32bit整数,使用时还原)
static void IpAddress(u32_t ipaddr, u8_t* a, u8_t* b, u8_t* c, u8_t* d)
{
*a = (ipaddr >> 24) & 0xff;
*b = (ipaddr >> 16) & 0xff;
*c = (ipaddr >> 8) & 0xff;
*d = ipaddr & 0xff;
}
//初始化本地Ip/网关/掩码 片段 pConfig是一个结构体指针,用于初始化
uint8_t a,b,c,d;
IpAddress(pConfig->Local.IP,&a,&b,&c,&d);
IP4_ADDR(&ipaddr,a,b,c,d);
IpAddress(pConfig->Local.Mask,&a,&b,&c,&d);
IP4_ADDR(&netmask,a,b,c,d);
IpAddress(pConfig->Local.GateWay,&a,&b,&c,&d);
IP4_ADDR(&gw, a,b,c,d); uint8_t mac_address[6];
GetMAC(mac_address[0],mac_address[1],mac_address[2],mac_address[3],mac_address[4],mac_address[5]);
Set_MAC_Address(macaddress);
netif_add(&netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
netif_set_default(&netif);
netif_set_up(&netif);
//其它的没啥,都是从stm模板里复制的
//代码经过整理,毕竟涉及文件比较多,不在一块
必须强调,这个lan8720在百兆网络里没有问题(我上面的帖子手残把G兆错录成百兆),但是无法通过G兆路由
|