硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1007|回复: 4
收起左侧

[STM32CubeF4] stm32f4读不了PHY芯片,程序死在读函数里面

[复制链接]

16

主题

17

回帖

65

积分

初级会员

积分
65
发表于 2024-11-13 14:16:33 | 显示全部楼层 |阅读模式
stm32f427读写IP101GRI芯片,调用hal库以太网读写phy寄存器函数,发现程序卡在里面一段时间后会出去,然后读出来的值还不对。示波器发现,PHY的晶振可以起振,复位引脚正常复位。



HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg,
                                          uint32_t *pRegValue)
{
  uint32_t tmpreg1;
  uint32_t tickstart;

  /* Get the ETHERNET MACMIIAR value */
  tmpreg1 = heth->Instance->MACMIIAR;

  /* Keep only the CSR Clock Range CR[2:0] bits value */
  tmpreg1 &= ~ETH_MACMIIAR_CR_MASK;

  /* Prepare the MII address register value */
  tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA);                        /* Set the PHY device address   */
  tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR);                /* Set the PHY register address */
  tmpreg1 &= ~ETH_MACMIIAR_MW;                                            /* Set the read mode            */
  tmpreg1 |= ETH_MACMIIAR_MB;                                             /* Set the MII Busy bit         */

  /* Write the result value into the MII Address register */
  heth->Instance->MACMIIAR = tmpreg1;


  tickstart = HAL_GetTick();

  /* Check for the Busy flag */
  while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB)
  {
    /* Check for the Timeout */
    if ((HAL_GetTick() - tickstart) > PHY_READ_TO)
    {
      return HAL_ERROR;
    }

    tmpreg1 = heth->Instance->MACMIIAR;
  }

  /* Get MACMIIDR value */
  *pRegValue = (uint16_t)(heth->Instance->MACMIIDR);

  return HAL_OK;
}

回复

使用道具 举报

16

主题

17

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2024-11-13 14:25:25 | 显示全部楼层
本帖最后由 zlx 于 2024-11-13 16:01 编辑

/* Check for the Busy flag */程序卡在这里一段时间后就出去了

回复

使用道具 举报

16

主题

17

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2024-11-13 16:01:10 | 显示全部楼层
RMII接口,时钟正常,50mhz,但是还是不行,这个位一直无法清0
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-11-14 09:24:59 | 显示全部楼层
zlx 发表于 2024-11-13 16:01
RMII接口,时钟正常,50mhz,但是还是不行,这个位一直无法清0

硬件原理图贴下,有硬件复位引脚没有,上电后手动硬件复位下,等待5秒后访问。
回复

使用道具 举报

16

主题

17

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2024-11-14 11:17:35 | 显示全部楼层
问题已经解决了,是自己句柄定义有问题,谢谢大家
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:07 , Processed in 0.059765 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表