以太网唤醒
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]