|
发表于 2021-10-18 19:22:08
|
显示全部楼层
正好最近在做唤醒相关的程序,花了点时间仔细研究了一下,stm32cubemc 版本5.5.0,芯片f401
- __HAL_PCD_UNGATE_PHYCLOCK(&hpcd_USB_OTG_FS);
- hUsbDeviceFS.dev_state = hUsbDeviceFS.dev_old_state;
- HAL_PCD_ActivateRemoteWakeup((PCD_HandleTypeDef *)(hUsbDeviceFS.pData));
- USBD_LL_Delay(10);
- HAL_PCD_DeActivateRemoteWakeup((PCD_HandleTypeDef *)(hUsbDeviceFS.pData));
复制代码
上面代码实测能正常唤醒
__HAL_PCD_UNGATE_PHYCLOCK(&hpcd_USB_OTG_FS);这句时因为pc休眠会触发Suspend中断HAL_PCD_SuspendCallback()函数会将usb的PHY 时钟关闭,导致HAL_PCD_ActivateRemoteWakeup不起作用.
但是光把时钟打开还不够,还需要hUsbDeviceFS.dev_state = hUsbDeviceFS.dev_old_state;不把睡眠前的状态赋回来的话会导致唤醒后不重新枚举,设备无法正常工做 |
|