diff --git a/Upstream/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Upstream/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c index a808da5..792b1f2 100755 --- a/Upstream/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c +++ b/Upstream/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c @@ -475,11 +475,11 @@ USBD_StatusTypeDef USBD_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef sp USBD_StatusTypeDef USBD_Suspend(USBD_HandleTypeDef *pdev) { - pdev->dev_old_state = pdev->dev_state; - pdev->dev_state = USBD_STATE_SUSPENDED; - - if (pdev->dev_old_state > USBD_STATE_DEFAULT) + if ((pdev->dev_state > USBD_STATE_DEFAULT) && + (pdev->dev_state < USBD_STATE_SUSPENDED)) { + pdev->dev_old_state = pdev->dev_state; + pdev->dev_state = USBD_STATE_SUSPENDED; Upstream_StateMachine_Suspend(); } return USBD_OK; diff --git a/Upstream/Src/upstream_statemachine.c b/Upstream/Src/upstream_statemachine.c index 89f7ad1..37debfe 100644 --- a/Upstream/Src/upstream_statemachine.c +++ b/Upstream/Src/upstream_statemachine.c @@ -248,7 +248,7 @@ void Upstream_StateMachine_DeviceDisconnected(void) //Suspend event activated by our host void Upstream_StateMachine_Suspend(void) { - if (UpstreamState >= STATE_ERROR) + if (UpstreamState >= STATE_SUSPENDED) //Ignore when already suspended, or in error state { return; }