Как выбрать максимальную выходную скорость UART?

Когда я открываю проект в STM32CubeMX и настраиваю UART, есть конфигурация максимальной скорости вывода (в разделе «Настройки GPIO» ), которая по умолчанию имеет значение « Очень высокая» . Варианты:

  • Низкий
  • Середина
  • Высокий
  • Очень высоко

В руководстве пользователя STM32CubeMX о максимальной выходной скорости говорится следующее :

Максимальная выходная скорость GPIO (только для коммуникационных периферийных устройств)
По умолчанию для нее установлено значение «Низкая» для оптимизации энергопотребления, и ее можно изменить на более высокую частоту в соответствии с требованиями приложения.

Но на самом деле он установлен на «Низкий» только для обычных выходных GPIO. Для контактов UART TX/RX фактически установлено значение Very High.

У меня есть несколько вопросов по этому поводу:

  1. Какие «требования к приложению» потребуют более высоких настроек?
  2. Почему для этих настроек по умолчанию установлено значение «Очень высокий» для UART и «Низкий» для выходного GPIO?
  3. Самое главное, могут ли 2 UART с разными максимальными выходными скоростями разговаривать (общаться) или они должны быть настроены одинаково? Какие последствия могут возникнуть, если UART каждой стороны будет настроен по-разному в отношении этого параметра?

Ответы (2)

Параметр скорости GPIO просто настраивает мощность привода или способность того, сколько вывод может генерировать и потреблять ток. Больший ток означает более быстрый переход сигнала к более тяжелым емкостным нагрузкам.

1) Например, управляя затвором FET, который обладает высокой емкостной емкостью, и ему нужно потратить минимальное время на полпути.

2) Кто-то часто выбирал эти значения по умолчанию только потому, что вам нужно иметь некоторые базовые настройки по умолчанию, которые в основном работают. Использование, скажем, 3 мегабод с длинными проводами для отладки UART может быть безопаснее, чтобы иметь высокую пропускную способность, но мигание светодиода на GPIO один раз в секунду не имеет значения, какая настройка используется.

3) Конечно, они могут обмениваться данными, если используемая скорость передачи достаточно низкая, чтобы скорость нарастания сигнала не сильно влияла на ошибку. Самая слабая мощность привода может работать примерно до 2 МГц, зависит от того, какой микроконтроллер используется.

Что касается 3, как я узнаю, что моя скорость передачи данных «достаточно медленная»? это 115200
Вы посмотрите на цифры в даташитах. Если самая слабая настройка может выдавать частоту не менее 2 МГц, это примерно в 17 раз больше скорости 115200, которая вам нужна. Глядя на вещи с максимальным временем нарастания/спада 100 нс, ваш битовый период составляет 8680 нс, поэтому ваши биты почти в 87 раз длиннее, поэтому тратить около 1% битового времени на изменение состояния в UART ничего не значит, так как UART производит выборку вывода на 16-кратный битрейт, или примерно каждые 543 нс при битрейте 115200.

Это соответствует конфигурации мощности привода вывода GPIO, настроенной битами регистра OSPEEDR. Для каждого вывода есть 4 возможных настройки. Выбор более сильного выходного привода позволяет повысить максимальную рабочую частоту (поскольку переходы выполняются быстрее), но приводит к более высокому энергопотреблению при переключении контактов и более высоким уровням электромагнитных помех. Более низкая прочность означает более низкий уровень электромагнитных помех, более низкое энергопотребление и более низкую максимальную скорость.

Взгляните на таблицу данных конкретного MCU, который вы используете, чтобы проверить, что именно это означает. Например, для STM32F405/407 вот это (глава 5.3.16: Характеристики портов ввода/вывода , параграф Характеристики входов/выходов переменного тока ):

введите описание изображения здесь

Итак, вы видите, что даже при минимальной настройке, в худшем случае, вы можете ожидать 2 МГц. Это, вероятно, намного выше, чем то, на что уже настроен ваш UART, поэтому на самом деле нет необходимости устанавливать его на «очень высокий». Вероятно, они делают это по умолчанию, чтобы быть в безопасности, но ваша скорость передачи данных не настроена на 100 Мбит/с, не так ли?

В качестве общего совета устанавливайте этот параметр на «низкий», если в этом нет особой необходимости.

Теперь, конечно, два UART, настроенных с разными настройками, могут общаться друг с другом (при условии, что скорость передачи данных ниже максимальной скорости, которую может поддерживать GPIO в соответствии с приведенной выше таблицей и выбранной вами настройкой). UART, сконфигурированный с более сильным параметром, будет иметь более резкий выходной сигнал, чем другой, и будет излучать больше электромагнитных помех, но они смогут общаться друг с другом.