STM32
直播中

杨帆

8年用户 1472经验值
私信 关注
[问答]

stm32f429以太网唤醒不了是什么原因导致的?

STM32f429以太网唤醒不了。正常运行时收到magic packet能进ETH_WKUP_IRQHandler,MCU进STOP模式后唤醒不了MCU。
进STOP前调用eth_enter_sleep(),退出stop后调用eth_exit_sleep()。

void eth_enter_sleep(void)
{
    HAL_ETH_Stop( EthHandle);
    /* Write to ETHERNET MACCR */
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    EthHandle.Instance->MACRWUFFR = 0;
    __HAL_ETH_WAKEUP_EXti_ENABLE_FALLINGRISING_TRIGGER();
    __HAL_ETH_WAKEUP_EXTI_ENABLE_IT();
    __HAL_ETH_WAKEUP_FRAME_DETECTION_ENABLE( EthHandle);
    __HAL_ETH_MAGIC_PACKET_DETECTION_ENABLE( EthHandle);
    __HAL_ETH_POWER_DOWN_ENABLE( EthHandle);
    {
      __IO uint32_t tmpreg1 = 0U;

      /* Enable the MAC reception */
      (EthHandle.Instance)->MACCR |= ETH_MACCR_RE;

      /* Wait until the write operation will be taken into account:
         at least four TX_CLK/RX_CLK clock cycles */
      tmpreg1 = (EthHandle.Instance)->MACCR;
      rt_thread_mdelay(1);
      (EthHandle.Instance)->MACCR = tmpreg1;
    }
}

void eth_exit_sleep(void)
{
    __HAL_ETH_POWER_DOWN_DISABLE( EthHandle);
    __HAL_ETH_GET_PMT_FLAG_STATUS( EthHandle, ETH_PMT_FLAG_WUFFRPR);
    __HAL_ETH_GET_PMT_FLAG_STATUS( EthHandle, ETH_PMT_FLAG_WUFR);
    __HAL_ETH_GET_PMT_FLAG_STATUS( EthHandle, ETH_PMT_FLAG_MPR);
    HAL_ETH_Start( EthHandle);
}



回帖(1)

klysa

2024-5-9 16:56:18
STM32F429以太网唤醒不了可能有以下几个原因:

1. 配置问题:检查STM32F429的以太网唤醒配置是否正确。确保你已经正确设置了以太网唤醒功能,包括GPIO、时钟、中断等。

2. Magic Packet:确保发送的Magic Packet是正确的。Magic Packet是一个特定的数据包,它包含6个字节的0xFF,紧接着是你的MAC地址16次。如果Magic Packet不正确,以太网唤醒功能可能无法正常工作。

3. PHY芯片:检查PHY芯片是否支持以太网唤醒功能。有些PHY芯片可能不支持这个功能,或者需要特定的配置才能启用。

4. 电源管理:确保STM32F429在STOP模式下仍然可以接收到以太网数据包。这可能需要调整电源管理设置,以确保以太网接口在低功耗模式下仍然可以工作。

5. 代码问题:检查你的代码中是否有任何可能导致以太网唤醒功能失效的问题。例如,确保在进入STOP模式之前正确配置了以太网唤醒功能,并且在退出STOP模式后正确地恢复了以太网接口。

6. 硬件问题:检查STM32F429的硬件连接,确保以太网接口与其他硬件组件之间的连接没有问题。

7. 中断配置:确保你已经正确配置了以太网唤醒中断。在STM32F429进入STOP模式后,需要通过中断来唤醒MCU。检查中断配置是否正确,以及中断服务程序是否能够正确处理以太网唤醒事件。

8. 软件库问题:如果你使用的是HAL库或其他第三方库,确保库中的以太网唤醒功能是正确实现的。有时候,库中的实现可能存在问题,导致以太网唤醒功能无法正常工作。

9. 固件版本:检查你使用的STM32F429固件版本是否支持以太网唤醒功能。有时候,固件的早期版本可能存在一些已知的问题,这些问题可能会影响到以太网唤醒功能。

10. 调试:使用调试工具(如ST-LINK)来跟踪以太网唤醒过程中的寄存器值和中断状态。这有助于你找到可能导致问题的原因。

总之,要解决STM32F429以太网唤醒不了的问题,需要从多个方面进行排查和调试。确保硬件连接、固件配置、代码实现和中断处理都是正确的,这样才能确保以太网唤醒功能能够正常工作。
举报

更多回帖

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