STM32F207+DP83848+RT-THREAD实现网线拔插重连试验

本文详细介绍了如何使用STM32F207、DP83848和RT-THREAD操作系统,在嵌入式环境中实现网线拔插后的自动重连功能。通过配置DP83848 PHY,当检测到链接状态变化时,触发STM32中断,进而执行中断处理函数,重新配置MAC DMA和网络设备初始化,确保网线热拔插后仍能正常通信。
摘要由CSDN通过智能技术生成

我在刚开始遇到这个问题的时候,上网搜了下,讲得都不是很清楚。不非是重新初始化重新初始化MAC,但是都是在文字表面。下面直接上代码,附上的代码是自己测试通过的。

1、通过DP83848配置为link状态变化,相应管教会有电平变化(具体看手册),从而触发STM32外部中断,通知STM32网线状态。下面是配置PHY

/************************************************************
**配置DP83848芯片当网线状态变化时产生一个变化电平通知MCU。
*************************************************************/
uint32_t Eth_Link_PHYITConfig(uint16_t PHYAddress)
{
/* PHY registers */
  uint32_t tmpreg = 0;
  tmpreg = ETH_ReadPHYRegister(PHYAddress, 2);
  tmpreg = ETH_ReadPHYRegister(PHYAddress, 3);
  /* Read MICR register */
  tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_MICR);
  /* Enable output interrupt events to signal via the INT pin */
  tmpreg |= (uint32_t)PHY_MICR_INT_EN | PHY_MICR_INT_OE;
  if(!(ETH_WritePHYRegister(PHYAddress, PHY_MICR, tmpreg)))
  {
    /* Return ERROR in case of write timeout */
    return ETH_ERROR;
  }
  /* Read MISR register */
  tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_MISR);
  /* Enable Interrupt on change of link status */
  tmpreg |= (uint32_t)PHY_MISR_LINK_INT_EN;
  if(!(ETH_WritePHYRegister(PHYAddress, PHY_MISR, tmpreg)))
  {
    /* Return ERROR in case of write timeout */
    return ETH_ERROR;
  }
 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值