Замена аппаратных выводов управления потоком на STM32 - PullRequest
0 голосов
/ 06 сентября 2018

Я читал о рукопожатии и аппаратном управлении потоком для последовательной связи, и у меня есть вопрос, на который я не могу найти ответ.

Если вы настроили аппаратное управление потоком для последовательного порта на cubeMX, он установит необходимые контакты. Я знаю, что вы также можете использовать альтернативные контакты, и это можно сделать через cubeMX.

У меня вопрос: не могли бы вы настроить аппаратное управление потоком вручную, используя разные контакты, или вам строго нужно использовать реализованные контакты?

Я использую STM32F207ZETx и использую USB, а также последовательный порт - однако при использовании периферийного устройства USB он блокирует аппаратные выводы управления потоком для USART1, которые мне нужны, и мне нужно аппаратное управление потоком для моего проекта! Альтернативные контакты для аппаратного управления потоком также уже используются, так что я в некотором роде.

1 Ответ

0 голосов
/ 06 сентября 2018

Мой вопрос: вы могли бы настроить аппаратное управление потоком вручную, используя различные контакты, или вам строго нужно использовать реализованные контакты?

Вы можете самостоятельно управлять аппаратным потоком в программном обеспечении, и на самом деле это довольно просто сделать.

USART1_RTS является выходным контактом. Он установлен / высокий, когда USART1 готов к приему данных. USART1_CTS является входным контактом. Другой конец устанавливает высокий уровень, когда он готов к приему данных, и низкий уровень, когда его нет.

Допустим, вы отправляете и получаете один символ за раз и используете два вывода GPIO для USART1_RTS и USART1_CTS вместо аппаратной поддержки.

Обычно вы держите USART1_RTS высоким. При получении данных, если у вас заканчивается приемный буфер, вы устанавливаете низкий уровень USART1_RTS. Когда вы освободите больше места в приемном буфере, вы установите высокий уровень USART1_RTS. (Если у вас есть схема буферизации, которая не может исчерпать приемный буфер, вы можете связать RTS-линию с высоким уровнем.)

Перед отправкой каждого символа вы проверяете, является ли значение USART1_CTS высоким. Если оно низкое, вы не отправляете данные, а ждете, пока USART1_CTS станет высоким, прежде чем вы это сделаете.

Вот и все.

...