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

2 REPLIES 2
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

If you FIFO doesn't work, then it's called GIGO.
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.
Saket_Om
ST Employee

Hello @KemalUzgoren 

As @Karl Yamashita suggest, please share your code to better understand the issue. 

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.
Saket_Om