2026-04-08 12:37 AM - last edited on 2026-04-08 2:54 AM by Andrew Neil
TX works but RX interrupt not triggered
Hello,
I am currently using a custom board based on STM32H563ZIT6. My goal is to establish communication over RS485 between the STM32 and a PC (using Hterm). The system is designed to receive a command and send a response.
Communication Details:
Current Situation:
Problem:
At 12 Mbaud:
Additional Notes:
What I Suspect:
Questions:
Any insights or similar experiences would be very helpful.
Thanks in advance!
Solved! Go to Solution.
2026-04-15 8:06 AM
Thank you all for your support and valuable suggestions.
I would like to briefly summarize the issue and the solution, in case it helps others in the future.
Initially, when using interrupt-based reception, I was able to reach up to around 4 Mbaud reliably.
After switching to DMA, I was able to increase this up to 8 Mbaud.
However, I could never reach the 10 Mbaud value stated in the datasheet — at that speed, I was neither able to receive nor transmit data reliably.
While going through the datasheets more carefully, I noticed that the UART clock is 24 MHz, and in simple terms, the achievable baud rates follow a relation like 24 / n (Mbaud).
Based on this, I tested different baud rates again:
So it seems that certain baud rates are more “naturally aligned” with the clock configuration, while others are not achievable due to divider limitations.
Thanks again to everyone for the help.
Have a great day!
2026-04-08 2:52 AM - edited 2026-04-08 2:54 AM
Hello @MES98 and welcome to the ST community,
You said the Rx interrupt is not triggering at all at 12 Mbaud but it does at lower baud rates.
Are you sure there is no interrupt triggered at all? did you set a breakpoint in the Rx interrupt callback?
Try also to use DMA for the reception.
@MES98 wrote:
- Could this be a limitation of the USB-RS485 converter?
It could be.
What about the RS485 transceiver you are using from STM32 side? does it support a communication up to 12MBaud?
2026-04-08 3:01 AM
I put a breakpoint in the UART Rx callback, and no interrupt is triggered at all.
Also, I discovered something interesting: when I connect two RS485 lines directly to each other, the STM32 is able to send and receive data at 12 Mbaud without any issues.
Based on this, I suspect that the problem is related to Windows, Hterm, or the USB COM485 PLUS 4 converter, rather than the STM32 or my code.
2026-04-08 3:02 AM
@MES98 wrote:
Based on this, I suspect that the problem is related to Windows, Hterm, or the USB COM485 PLUS 4 converter, rather than the STM32 or my code.
Indeed!
2026-04-08 3:06 AM
Just to give another update
When I connect the two RS485 lines together on the USB COM485 PLUS4, communication still works at 12 Mbaud.
So in this scenario, everything works fine, which makes me think that Windows, Hterm, or the converter may not be the problem after all.
Honestly, this is really confusing me.
2026-04-08 3:29 AM
> I put a breakpoint in the UART Rx callback, and no interrupt is triggered at all..
This is just a callback for a specific flag.
Enable the UART error interrupts, and see if one of those gets triggered.
And in my experience, 12MBits is quite a bit beyond the capabilities of most Windows-PC / USB-adapter combinations. But you can experiment with the extended settings for your specific adapter in the Windows device manager, like packet sizes and poll rates.
2026-04-08 3:38 AM - edited 2026-04-08 7:08 AM
@MES98 wrote:
- Possible limitation of RS485 converter at high baud rates
2. Could this be a limitation of the USB-RS485 converter?
Have you tried using an oscilloscope to see what's actually happening on the wires - particularly at the STM32's RX pin?
That would soon show you if there's a hardware/connectivity issue ...
2026-04-08 3:45 AM
At such high baudrates I recommend using the DMA to receive. An interrupt for each character is not fast enough. Though you should be getting interrupts.
Aside from the termination resistor have you checked the bias network?
Check the drive enable delay. I needed to set it to maximum to avoid corrupting the last bit. Disabling the drive too soon or too late can cause corrupted bits.
Have you used a logic analyzer to check the signal integrity at the MCU pins?
2026-04-08 4:43 AM
> I suspect that the problem is related to Windows, Hterm, or the USB COM485 PLUS 4 converter,
The converter indeed can have limit of the baud rate. Check with the vendor.
2026-04-08 7:01 AM
Thank you for your suggestion.
I enabled the UART error interrupts, but no error flags are triggered.
I also checked the Windows adapter settings. The latency timer was set to 16 ms by default, and I reduced it to 1 ms, but this did not make any difference.
For clarification, my communication is very light:
For testing:
I also verified with an oscilloscope that the data is physically coming out of the converter, so the signal is present on the line.
At this point, it looks like the data reaches the STM32 pin, but it is not being captured or processed by the UART peripheral.