Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F030 и autobaudrate
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Михась
Удалось ли кому запустить автоопределение скорости UART?
У меня работает, но плохо. Кварцы не используются.

Нужно передавать данные в одну сторону по следующему протоколу:

http://joxi.ru/Q2K03aZS9gXl0A

Рассчитывал на автоопределение скорости по преамбуле 0x80 в режиме USART_AutoBaudRate_StartBit. При отключенном автоопределении все работает замечательно, никаких сбоев, при включенном - очень часто регистр принимает неправильные значения, иногда отклонение в сотни раз больше нужного.

Михась
В общем, отчитываюсь.

Я впал в отчаяние и решил применить почти недокументированный режим для F030

ABRMOD[1:0]: Auto baud rate mode

00: Measurement of the start bit is used to detect the baud rate.
01: Falling edge to falling edge measurement. (the received frame must start with a single bit = 1 ->
Frame = Start10xxxxxx)
10: 0x7F frame detection.
11: 0x55 frame detection


Поменял преамбулу 0x55 и стал использовать в периодах между пакетами команду USART_RequestCmd(USART1, USART_Request_ABRRQ, ENABLE);

Устойчиво пересинхронизируется на лету в диапазоне 600-250000 бод.
-----------------------
UPD:
C преамбулой 0x55 худо-бедно заработал и в режиме 00:

SSerge
Цитата(Михась @ Jan 28 2016, 15:10) *
Рассчитывал на автоопределение скорости по преамбуле 0x80 в режиме USART_AutoBaudRate_StartBit.

А с чего бы ему работать по преамбуле 0x80, если данные, как известно, передаются младшим битом вперёд.
Вот по 0x01 или любому другому байту с установленным в 1 младшим битом сработало бы.
Михась
Цитата(SSerge @ Jan 29 2016, 21:07) *
А с чего бы ему работать по преамбуле 0x80, если данные, как известно, передаются младшим битом вперёд.
Вот по 0x01 или любому другому байту с установленным в 1 младшим битом сработало бы.


00: Measurement of the start bit is used to detect the baud rate.
01: Falling edge to falling edge measurement. (the received frame must start with a single bit = 1 ->
Frame = Start10xxxxxx)

Я пробовал оба варианта, или во втором случае подразумевается что Start стоит возле младшего байта?
ViKo
Если пишут "измерение от среза до среза", то должны были указать не только первый бит 1, но и второй 0.
Если же измеряют от среза стартового бита до фронта, то первым битом должна быть 1, а дальше любые.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.