diff --git a/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp b/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp index 3f2136c43..6cb60fe2e 100644 --- a/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp @@ -313,8 +313,10 @@ void stm32_usart_init_rx_dma(const stm32_usart_t* usart, const void* buffer, uin // Disable IRQ based RX LL_USART_DisableIT_RXNE(usart->USARTx); - // In case TX DMA is used and IDLE IRQ is not, disable the ISR completely - if (usart->txDMA && !LL_USART_IsEnabledIT_IDLE(usart->USARTx)) { + // In case TX DMA is used, IDLE IRQ is not, and not half-duplex, + // disable the ISR completely + if (usart->txDMA && !LL_USART_IsEnabledIT_IDLE(usart->USARTx) && + !IS_HALF_DUPLEX(usart)) { NVIC_DisableIRQ(usart->IRQn); }