使用STM32+Lwip+DP83848进行网络通信,如果网线先插好,后板卡上电,通信正常;如果先上电,再插网线,通信异常。在网上看了很多贴子,都是检测到网线插入后重新对DP83848进行初始化,目前检测插拔的步骤已经完成,可重新对83848进行初始化设置后出现了问题,表现在1.网络还是无法正常通信;2.程序会出现卡死情况。现在想请问大家,为什么重新对83848进行再初始化配置会出问题,再配置初始化调用了Ethernet_Configuration(); LwIP_Init(IP);这两个函数。注:函数来源于STM32官方DEMO代码。 |
if(Check_Link_Status())
NVIC_SystemReset();//系统重启
在lwip.c中加个函数Check_Link_Status(void),如:
static uint32_t Link_Reg = 0;
uint8_t Check_Link_Status(void)
{
uint32_t i = 0;
HAL_ETH_ReadPHYRegister(&heth, PHY_SR, &i);
i = i & PHY_LINK_STATUS;
if(i != Link_Reg)//网口连接状态发生改变
return 1;//system reset
else
{
Link_Reg = i;
return 0;
}
}