定时任务中,查询LAN8720的状态寄存器 PHY_BSR = 0x01,成功读取后,检查16位数据的BIT2,即可获取网线连接状态
uint32_t phyreg = 0;
if(HAL_ETH_ReadPHYRegister(&g_eth_handler, PHY_BSR, &phyreg) == HAL_OK)
{
if(((phyreg >> 2) & 0x1) != 0x1) // 下线
{
IsNetLinkDown = true;
}
else if(IsNetLinkDown)
{
IsNetLinkDown = false;
/* 关闭连接 */
lwip_tcp_client_connection_close(tcppcb, 0);
/* 创建一个新的pcb */
tcppcb = tcp_new();
/* 创建成功 */
if (tcppcb)
{
/* 连接到目的地址的指定端口上,当连接成功后回调lwip_tcp_client_connected()函数 */
tcp_connect(tcppcb, &rmtipaddr, LWIP_DEMO_PORT, lwip_tcp_client_connected);
}
delay_ms(1000);
}
}