Изменение контактов аппаратного управления потоком на STM32

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

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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 819
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

My question is, could you set up hardware flow control manually by using different pins or do you strictly have to use the implemented pins?

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

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

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

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

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

Вот и все.

Это очень хорошо проясняет ситуацию - спасибо, мистер Пингвин (нормальное животное)!

Alex_embedded 06.09.2018 06:04

Обратите внимание, что вам нужно будет либо реализовать прерывание смены вывода на выводе GPIO, используемом как CTS, либо постоянно опрашивать линию подтверждения.

tofro 06.09.2018 09:26

@tofro Если не использовать DMA, достаточно просто и достаточно эффективно опросить CTS перед загрузкой регистра данных TX.

Clifford 06.09.2018 15:15

@Clifford, как только tx приостанавливается CTS, насколько эффективно нужно опрашивать строку CTS, например, частота символов для перезапуска передачи? Наличие прерывания при повышении уровня CTS звучит полезно, а также позволяет немедленно перезапустить передачу без задержки любого выбранного времени опроса.

balmy 06.09.2018 18:58

Я не очень знаком с STM32, но, судя по таблице данных, похоже, что лучший подход для USART1 - это побайтовые функции отправки и получения на основе прерываний. Еще одно прерывание для CTS, переходящего в высокий уровень, является простым добавлением, поскольку оно может отправить следующий байт и разрешить прерывание для следующего исходящего байта. Поскольку CTS должен быть выбран перед отправкой следующего байта, я не уверен, что вы можете легко использовать DMA для отправки. Для приема подойдет DMA, особенно если вы также используете прерывание для приема «последнего» байта (отправленного непосредственно перед тем, как RTS / RTR опустился на низкий уровень).

Nominal Animal 08.09.2018 08:36

Другие вопросы по теме