[Решено] Как сплавлять Ковтер на биты

Flyboy74
Пт 22 июня 2018 г. 10:55 утра
Сейчас я работаю над установкой UART, чтобы я мог отправить информацию от отладки на серийный терминал грубого.

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

USARTDIV = FCK / (16 * бод), который довольно часто дает исход с плавающей запятой. Смотрите несколько примеров из таблицы данных
uart.jpg
Uart.JPG (51.56 киб) просмотрено 268 раз

Дэнниф
Пт 22 июня 2018 г., 11:01
в зависимости от строительства USARTDIV. Если он принимает форму _mantissa.._fraction, и дробь в 1/16, затем

Usartdiiv = fclk/бод;

Сделаю.

Flyboy74
Пт 22 июня 2018 г. 11:19
Хорошо, это означает, что если я возьму пример 9600 на FCK 36 МГц означает USARTDIIV = 234.375

Означает ли это, что 12 лучших бит - _mantissa = 234, а нижние 4 бита - _fraction = 375/16 = 23.4375 так округлый до 23 ????

Flyboy74
Пт 22 июня 2018 г., 11:22
23 в двоичном языке 10111, и у меня есть только 4 бита

Стивестронг
Пт 22 июня 2018 г., 11:36
https: // github.com/rogerclarkmelbourne/ ... #L165-L183

Дэнниф
Пт 22 июня 2018 г. 15:06
36 МГц / 9600 = 3750

Дэнниф
Пт 22 июня 2018 г. 15:21
Попробуйте 115.2 кбит / с:

36 МГц/115.2 кбит / с = 312.5 -> USARTDIV = 312.

Диаграмма говорит вам код 19.5 -> 19 * 16 + 0.5*16 = 304 + 8 = 312. Вы также можете рассмотреть вопрос о том, чтобы обновить здесь.

Ключ здесь заключается в том, что фракция - это самые низкие 4 бита, закодированные в 1/16 -м, а Мантисса - верхние биты.

Если нет, вам нужно будет поиграть с некоторой целочисленной математикой: на том, что в MSP432 есть некоторые из самых болезненных расчетов по скорости бод, которые я когда -либо видел.

Flyboy74
Пт 22 июня 2018 г., 21:22
@dannyf
36 МГц / 9600 = 3750 Если я посмотрю на ваш метод 3750 = 0b 0000 1110 1010 0110

Если я посмотрю на лист данных, он даст 234.375, который составляет 234 в Мантиссе с фракцией 375/1000, выраженной в 1/10 -м
Мантисса = 234 << 4 = 0b 0000 1110 1010 0000
Фракция = 375/(1000/16) = 6 = 0b 0110
Делая мантиссу | Фракция = 0b 0000 1110 1010 0110

Кажется, это просто fck/бод, а округление - это быстрое сокращение от одного и того же ответа. Не уверен, почему таблица дат

@stevestrong
Спасибо за ссылку. Я посмотрел код и понимаю, как он работает. Он делает то, что объясняет лист данных, но, как опубликовал Dannf, есть более простой способ сделать это.

Спасибо всем, кто мне помог. Я думаю, что я понимаю это сейчас :)

Дэнниф
Пт 22 июня 2018 г., 23:44
Не уверен, почему таблица дат Если вы думаете, что подход в таблице Dataash.

Это часть бесплатных преимуществ использования ST Parts, :) Подобные вещи не уникальны для этого конкретного модуля / части.

Пито
SAT 23 июня 2018 г. 8:10
UART отлично работает с Baudrates <= 3% скидка.
Вам не нужна плавающая точка, ИМХО.

Дэнниф
SAT 23 июня 2018 г., 13:15
это зависит. с низкой тактовой частотой и высокой скоростью передачи, дробные дробь имеют решающее значение.

Маленькие звуковые сигналы/зуммеры, которые на самом деле являются крошечными динамиками - Игрок RTTTL перенесен на STM32DUINO