用STM32F427驱动LAN8720,网线重新插拔后不能识别请教

2019-12-11 18:26发布

本帖最后由 dwj0 于 2019-4-28 15:02 编辑

我用STM32F427驱动LAN8720,当使用自动协商功能时,一切正常。
但自动协商时,如果网线没有连接,那么等待的时间有点长。
因此我使用不自动协商,强制指定百兆全双工。网线插上开机能正常工作,但是当我重新插拔网线之后,网线灯就不亮了。
我查看了自动协商状态完成时,也是百兆全双工啊,而且以前DM9161这么用也没有问题,怎么8720不行呢?

另外,能过调试发现,使用不自动协商,当我网线拔掉,重新插上时,检查状态寄存器BSR中的Link Status位为0,就是没有检测到网线插入
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
1328616904
1楼-- · 2019-12-12 14:46
  1. void Eth_Link_IT_task( void * pvParameters )
  2. {
  3.   uint32_t pcPHYAddress;
  4.   pcPHYAddress = ( uint32_t  ) pvParameters;

  5.   for(;;)
  6.   {
  7.                   PhyRegistData = ETH_ReadPHYRegister((uint16_t) pcPHYAddress, PHY_BSR) & PHY_Linked_Status;
  8.                   if(PhyRegistData == 0 ){
  9.                                 printf("Link Down! ");
  10.                                 netif_set_link_down(&xnetif);
  11.                                
  12.                                 PhyLinked = 0;
  13.                                 #ifdef USE_DHCP
  14.                                 if(SysCfg.DHCP_Enable){
  15.                                         DHCP_state = DHCP_LINK_DOWN;
  16.                                 }
  17.                                 #endif
  18.                                
  19.                         }
  20.                         else{
  21.                                 if(PhyLinked == 0){
  22.                                         printf("Link up! ");
  23.                                         netif_set_link_up(&xnetif);
  24.                                         PhyLinked = 1;
  25.                                         #ifdef USE_DHCP
  26.                                         if(SysCfg.DHCP_Enable){
  27.                                          DHCP_state = DHCP_START;
  28.                                         }
  29.                                   #endif
  30.                                 }
  31.                         }
  32.                  vTaskDelay(1000);
  33.   }
  34. }
复制代码