Есть МК STM32F030C8 подключенный к ПК через FT232.
Настройки USART: 8 бит данных, 2 стоп бита, скорость - 3М, RTS/CTS включены.
Чего я ожидал от Flow Control.
USART принимает байт, устанавливает флаг RXNE, устанавливает на выходе RTS 1. FT232 приостанавливает передачу пока на линии RTS не установится 0.
Что получается в действительности.
USART принимает байт, устанавливает флаг RXNE, устанавливает на выходе RTS 1. FT232 передает еще один байт, а уже потом приостанавливает передачу пока на линии RTS не установится 0. Как итог, USART ловит overrun ошибку. DMA, который работает с RX линией, по этой причине, периодически виснет.
Скриншот этой ситуации из лог. анализатора.
Нажмите для просмотра прикрепленного файла
1. Flow Control так и должен работать, или где-то есть ошибка?
2. Как избежать потери данных в этом случае? Вручную забирать данные из RX регистра, пока DMA неактивен?