Page 1 of 1

STM32F4xx Uart

Posted: Mon Feb 24, 2025 10:59 pm
by Alan_37
Hi,

This is an old bug, but it's still present. I'm using the STM32F407VET, though this issue affects all STM32 devices I have tested.

To test, I simply trigger the UART1 RX interrupt and receive a string or a byte array with a timeout, then send it back to verify functionality. This works reliably on AVR microcontrollers like the ATmega128A.

Using ReciveByteArray or ReceiveString ( Timeout=10, NumBytes=30 ) I send Hello and I Get Hellooooooooooooooooooooooooo Back with 30 Chars .
for some unknown reason if I send Testing it replies Testing .

I understand that a common workaround is to receive characters byte by byte into a circular buffer and manage the timeout manually.
However, why hasn't this bug been fixed?

Additionally, I looked into configuring UART with DMA so data could be written to memory without CPU involvement, but it seems the HAL library used in flowcode lacks the necessary support for this ( or maybe it's too advanced for me :lol: :lol: )

The C Code provided by ChatGPT was Compiled but was not able to receive any Data .

Re: STM32F4xx Uart

Posted: Wed Mar 05, 2025 3:14 pm
by LeighM
I think the issue here is that you shouldn't mix interrupt driven comms with a polled timed loop.

Re: STM32F4xx Uart

Posted: Thu Mar 06, 2025 8:26 am
by Alan_37
Good Morning LeighM,

Thanks for the reply. I understand that mixing interrupt-driven communication with polled timeouts can cause issues, but this is actually part of the confusion.

If Flowcode's ReceiveByteArray and ReceiveString functions aren't designed to work with interrupts (or if they assume a blocking/polled flow), then it would be helpful if this was documented more clearly.

In my case, the UART interrupt is firing correctly — I can see data arriving — but the Flowcode function still seems to pad the buffer with junk data up to the full requested length, regardless of actual received length. This doesn't seem like expected behavior for a function that claims to handle timeouts.

If the recommended approach is to avoid these functions entirely and manually implement a circular buffer using just the interrupt, that's fine — but again, this should really be documented if it's the official stance.

Also, is there any official guidance on using DMA with Flowcode UART? If not, that would be useful to know too, since manual handling of every byte can get inefficient at higher speeds.

Thanks again for your input — just trying to figure out the "right" way to handle this within the framework Flowcode provides.