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