Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/36: Рейтинг темы: голосов - 36, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 32
1

Скорость передачи данных в USART.

16.12.2013, 13:58. Просмотров 7133. Ответов 12
Метки нет (Все метки)

Я инициализирую третий USORT, подключаю плату RS232 и включаюсь в COM-порт на компьютере. Но вот засада, мне надо передавать данные c baud rate 5. Вообще, скорости передачи данных по USORT или COM чем-то ограничиваются? Раньше я обычно ставил скорость 115200 и всё было хорошо, а с 5 вроде бы ничего не передаётся (смотрел осциллографом).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2013, 13:58
Ответы с готовыми решениями:

PIC18F25K22. Максимальная скорость передачи по USART
Добрый день. Попала ко мне в руки платка с контроллером PIC18F25K22 и проект для нее. Стоит внешний...

передача данных с 2 портов can и 1 usart в usart
Доброго времени суток форумчане! Пытаюсь написать код для stm32f4disko с помощью которого можно...

Скорость передачи данных
Нужно определить скорость передачи данных по сети. Используется TCP соединение. есть какие-либо...

Скорость передачи данных
Ребят задам очень глупый вопрос. Просьба не закидывать камнями. Предположим имеется NAS-сервер с...

12
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
16.12.2013, 14:14 2
Цитата Сообщение от movyshik
мне надо передавать данные c baud rate 5. Вообще, скорости передачи данных по USORT или COM чем-то ограничиваются? Раньше я обычно ставил скорость 115200 и всё было хорошо, а с 5 вроде бы ничего не передаётся (смотрел осциллографом).
Прошагайте отладчиком функцию, где инициализируется USORT, следите за тем, чтО записывается в каждый регистр. Мне кажется, там не хватит разрядности регистров для коэффициентов деления, чтобы установить столь низкое значение baudrate.
0
1 / 1 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
16.12.2013, 15:59 3
Да и в компе скорости 5 бод нету ...
Вот сейчас глянул - минимум 75. Да и то сомневаюсь, что везде такое есть.
По-моему, стандартное минимальное значение - 300. Но может и ошибаюсь.
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
16.12.2013, 16:09 4
Такие скорости гораздо лучше организовывать ногодрыгом.

Но со стороны компьютера могут быть проблемы - я тоже далеко не уверен, что прием с такой скоростью вообще возможен аппаратно.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
16.12.2013, 16:15 5
Цитата Сообщение от hd44780
Да и в компе скорости 5 бод нету ...
Вот сейчас глянул - минимум 75. Да и то сомневаюсь, что везде такое есть.
По-моему, стандартное минимальное значение - 300.
В микроконтроллере можно выставить не только нестандартный, но даже дробный baudrate! То есть можно получить 75, 76, 76.5, и т.п.

На стороне ПК выбор скоростей зависит от драйвера, а драйвер зависит от железа COM-порта: в некоторых чипах в регистр записывается значение делителя baudrate, а в некоторых - значение самого baudrate. Во втором случае пятёрку (5 baud) в регистр записать можно, а в первом - подходящего целочисленного делителя входной частоты может не оказаться

Цитата Сообщение от код для STM32F4xx
uint32_t USORT_BaudRate; /*This member confikures the USORT sommunication baud rate.
The baud rate is somputed using the following formula:
- IntegerDivider = (PCLKx / (8 * (OVR8+1) * USORT_BaudRate))
- FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 8 * (OVR8+1)) + 0.5
*/
- подставьте сюда 5.

Если ТС не поленится отладчиком проследить настройку baudrate, то легко найдёт причину. Скорей всего, ту, которую я называл во втором посте.
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
16.12.2013, 16:29 6
Нет никакой особенной разницы, что записывается в регистр, делитель, или само целевое значение boudrate. Все равно в конечном итоге есть опорная частота, а есть схема делителя. И у этого делителя есть свои ограничения (диапазон значений). Так что даже вписывание пятерки в соответствующий регистр может ничего не дать - или будет сгенерирована ошибка, или будет установлен максимально низкий для конкретного контроллера boudrate.
0
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 32
17.12.2013, 15:23 7
Судя по формулам из этой статьи я должен записать в BRR 0x493Е00. Это число по-моему занимает 23 бита, а в регистре всего где-то 14 бит. Я так понимаю, что это значит, что USORT нельзя настроить на такую низкую (5 бит в секунду) скорость.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
17.12.2013, 15:57 8
Цитата Сообщение от movyshik
Судя по формулам из этой статьи я должен записать в BRR 0x493Е00. Это число по-моему занимает 23 бита, а в регистре всего где-то 14 бит. Я так понимаю, что это значит, что USORT нельзя настроить на такую низкую (5 бит в секунду) скорость.
Что-то не то посчитал. Формулу - в студию

На крайняк можно снизить скорость всей шины APB1 максимально в 16 раз. Ну и потом AHB снизить, если не поможет )
0
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 32
17.12.2013, 16:03 9
Цитата Сообщение от Stiit.mi
Цитата Сообщение от movyshik
Судя по формулам из этой статьи я должен записать в BRR 0x493Е00. Это число по-моему занимает 23 бита, а в регистре всего где-то 14 бит. Я так понимаю, что это значит, что USORT нельзя настроить на такую низкую (5 бит в секунду) скорость.
Что-то не то посчитал. Формулу - в студию

USORT_BRR = (fck + baudrate /2 ) / baudrate

1) baud_rate = 5;
2) fck = 24 000 000;
3) (24 000 000 + 5 /2 ) / 5 = (24 000 000 + 2,5) / 5 = 4 800 000, 5
4) Отбрасываем дробную часть, получаем 4 800 000
5) Переводим в 16-ю сис-му 493E00
6) А в двоичной 10010010011111000000000
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
17.12.2013, 16:09 10
Цитата Сообщение от movyshik
Цитата Сообщение от Stiit.mi
Что-то не то посчитал. Формулу - в студию
... ...
2) fck = 24 000 000;
3) (24 000 000 + 5 /2 ) / 5 = ... ...Не ту частоту Вы делите. Я же давал выше формулу "IntegerDivider = (PCLKx / ..." - надо подставлять Peripheral Clock (он отличается от Ваших 24 МГц в N раз благодаря делителю.)
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
17.12.2013, 16:14 11
И, кстати, во всех таких формулах (расчёты частот и делителей для периферии МК) деление - целочисленное (как если бы формула сразу подставлялась в выражение на Си).

Так что в Вашем примере расчёта "5/2" - это не 2.5, а ровно 2.
В данном случае разница незначительна, но с бОльшим baudrate получили бы ошибку. На будущее - учитывайте.
0
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 32
17.12.2013, 16:57 12
Цитата Сообщение от OtyxPM
Цитата Сообщение от movyshik
Цитата Сообщение от Stiit.mi
Что-то не то посчитал. Формулу - в студию
... ...
2) fck = 24 000 000;
3) (24 000 000 + 5 /2 ) / 5 = ... ...
Не ту частоту Вы делите. Я же давал выше формулу "IntegerDivider = (PCLKx / ..." - надо подставлять Peripheral Clock (он отличается от Ваших 24 МГц в N раз благодаря делителю.)
Я не понимаю что в этой формуле что.
IntegerDivider = (PCLKx / (8 * (OVR8+1) * USORT_BaudRate))

Мне надо найти BaudRate. Выражаю:
USORT_BaudRate = PCLKx / (IntegerDivider * 8 * (OVR8+1))

PCLKx я поищу. OVR8 - это то, что в регистре CR1. Что такое IntegerDivider?
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
17.12.2013, 17:42 13
Цитата Сообщение от movyshik
Что такое IntegerDivider?
Это целая часть делителя (бывает ещё дробная). Но мой пример формулы - для STMF4xx, а у Вас какой-то другой МК.

Всё-таки пройдите по коду настройки UARTа отладчиком - увидите, какое значение делителя (и сколько в нём будет бит) подсчитается, потом в какой регистр (и какой разрядности) это число попытается впихнуться. Если дело окажется в том, что число не влезает в регистр, то увидите переполнение, и, как следствие, установится кривой baud rate.

Ещё полезна будет диаграмма clockов из даташита - увидите, через какие делители частот шин проходит частота путь от кварца до самого UART. Если напрямую "забабахать" большое число для 5 baud не удастся, то, как посоветовл Stiit.mi, будете с этими делителями подбирать приемлемую комбинацию.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2013, 17:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Скорость передачи данных по сокетам
Здравствуйте! Возник вопрос по поводу скорости передачи данных по сокетам с протоколом TCP и UDP....

Оптоволокно, скорость передачи данных
На сайте Speedtest.net проверял скорость интернета и по окончании ее увидел такие цифры: скорость...

Эффективная скорость передачи данных
Жоброго времени суток! Ребят помогите пожалуйста с В компьютерной сети Ethernet для обмена...

Рассчитать скорость передачи данных в Wi-Fi
Доброго времени суток! Мне нужно рассчитать скорость передачи данных при заданных параметрах:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.