STM32/STM8技术william hill官网
直播中

jf_35225777

未满1年用户 3经验值
擅长:嵌入式技术
私信 关注
[问答]

stm32f407vet6+LAN8720A调试以太网遇到软件复位失败问题

我用stm32f407vet6+LAN8720A调试以太网遇到软件复位失败问题,单步调试发现在复位MAC内部寄存器时对以太网总线模式寄存器(ETN_DMABMR)软件复位SR位置1后,硬件未自动清除该位,导致软件,导致代码进入while死循环。

这问题在用官网代码上也复位不成功。代码如下:

/* Ethernet Software reset */

/* Set the SWR bit: resets all MAC subsystem internal registers and logic */

/* After reset all the registers holds their respective reset values */

(heth->Instance)->DMABMR |= ETH_DMABMR_SR;

/* Get tick */

tickstart = HAL_GetTick();

/* Wait for software reset */

while (((heth->Instance)->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)

{

/* Check for the Timeout */

if((HAL_GetTick() - tickstart ) > ETH_TIMEOUT_SWRESET)

{

heth->State= HAL_ETH_STATE_TIMEOUT;

/* Process Unlocked */
  __HAL_UNLOCK(heth);

  /* Note: The SWR is not performed if the ETH_RX_CLK or the ETH_TX_CLK are  
     not available, please check your external PHY or the IO configuration */
  return HAL_TIMEOUT;
}

}3e81d530fc528e67ab83df0043fea1a.jpg

这是我REFCLK引脚的频率图

更多回帖

发帖
×
20
完善资料,
赚取积分