diff --git a/stmhal/mphalport.c b/stmhal/mphalport.c
index a9812362b239adb0f82de673614cd6a33debbc28..ca8e1c1bde5b45e8b5aa23fdb81a242c9c4465c9 100644
--- a/stmhal/mphalport.c
+++ b/stmhal/mphalport.c
@@ -43,7 +43,7 @@ int mp_hal_stdin_rx_chr(void) {
         } else if (MP_STATE_PORT(pyb_stdio_uart) != NULL && uart_rx_any(MP_STATE_PORT(pyb_stdio_uart))) {
             return uart_rx_char(MP_STATE_PORT(pyb_stdio_uart));
         }
-        __WFI();
+        MICROPY_EVENT_POLL_HOOK
     }
 }
 
diff --git a/stmhal/uart.c b/stmhal/uart.c
index 81e6f69a583d9c54abae89d688cbb063b600cfbc..d53ca5b80c79ef96b5de3dfe76c767fdff7b2e4e 100644
--- a/stmhal/uart.c
+++ b/stmhal/uart.c
@@ -334,7 +334,7 @@ STATIC bool uart_rx_wait(pyb_uart_obj_t *self, uint32_t timeout) {
         if (HAL_GetTick() - start >= timeout) {
             return false; // timeout
         }
-        __WFI();
+        MICROPY_EVENT_POLL_HOOK
     }
 }
 
@@ -375,7 +375,7 @@ STATIC bool uart_tx_wait(pyb_uart_obj_t *self, uint32_t timeout) {
         if (HAL_GetTick() - start >= timeout) {
             return false; // timeout
         }
-        __WFI();
+        MICROPY_EVENT_POLL_HOOK
     }
 }