реклама на сайте
подробности

 
 
> STM32F0 и FT232, Flow Control работает не так как ожидалось.
Wasserati
сообщение Aug 30 2017, 07:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 1-06-13
Пользователь №: 77 044



Есть МК 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 неактивен?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Aug 30 2017, 09:37
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Wasserati @ Aug 30 2017, 10:52) *
1. Flow Control так и должен работать, или где-то есть ошибка?
2. Как избежать потери данных в этом случае? Вручную забирать данные из RX регистра, пока DMA неактивен?

1. В общем случае зависит от реализации UARTа на передающем контроллере. Как правило, при активации внешнего RTS передатчик УАРТа все равно передает байт, который у него уже загружен в сдвиговый регистр УАРТа. Кроме того, часто, если есть ФИФО на передачу, то передается и все, что уже лежит в ФИФО. Это известная засада, на это часто обращают внимание.
2. Нужно реализовывать алгоритм, который это учитывает.
Если ФИФО у передатчика нет и может прийти только один дополнительный байт, то я просто запрещаю прерывание на прием после взведения RTS. Этот байт приходит и принимается сдвиговым регистром приемного УАРТа и там себе лежит, пока не снят RTS и не разрешены прерывания. Обычно так работает.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.03033 секунд с 7
ELECTRONIX ©2004-2016