cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H745ZITX - USART3 RX Interrupt Works Once Then Stuck in BUSY

KemalUzgoren
Associate III

Hello,

I'm working with STM32H745ZITX on a dual-core setup. I configured USART3 on the CM7 core. The communication flow is:

  • TX: Using HAL_UART_Transmit (polling)

  • RX: Using HAL_UART_Receive_IT

The first message reception works correctly. The HAL_UART_RxCpltCallback function is triggered as expected — however, the received data buffer remains empty (i.e. I can't read the data).
On subsequent transmissions, no interrupt is triggered, and the RX remains in HAL_BUSY state. As a result, no new data is received, even though I can see the incoming data on the RX pin via an oscilloscope.

I verified:

  • USART3_IRQHandler is implemented and calls HAL_UART_IRQHandler(&huart3)

  • Only the CM7 core handles UART3; CM4 does not touch it

  • HAL_UART_Receive_IT returns HAL_BUSY after the first use

Question: 

  1. Is there any dual-core-specific configuration I need to apply to use UART interrupts reliably on CM7?

  2. Could D-Cache or I-Cache being enabled affect UART RX interrupts even when not using DMA?

    • If yes, what is the proper way to handle this? 

Any insights or suggestions are appreciated.

Thanks in advance,
Kemal

1 REPLY 1
Karl Yamashita
Principal

Not receiving after your init HAL_UART_RxCpltCallback works the first time probably means a code issue.

Show your code in HAL_UART_RxCpltCallback

I was told that if a devices starts to smoke, put the smoke back in. I guess I never got all the smoke because the device never worked afterwards.
Don't worry, I won't byte.
TimerCallback tutorial! | UART and DMA Idle with multiple UART instances tutorial!

If you find my solution useful, please click the Accept as Solution so others see the solution.