Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: случилась странность с USART6...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ЮКОР
Не мог получить устойчивую связь на скорости 115200 бод с stm32f437ii.
Осциллографом определил, что при установленной скорости 115200 реальная скорость получалась 104700.
Частота кварца 7.99974 МГц. Подставил значение 125200 получил скорость 115200, на которой всё заработало..

Первый раз такое случилось. Не думаю, что в этом виноват кварц. Уж больно большая ошибка.
Перед этим использовал STM32F437zi, код почти тот же. Всё работало нормально.
Есть у кого какие-нибудь предположения?
Заранее спасибо.
Obam
Ну вы бы хоть расчёты, коэффициенты привели…
Сергей Борщ
Частота кварца измерялась?
ЮКОР
Цитата(Obam @ Jun 30 2015, 13:00) *
Ну вы бы хоть расчёты, коэффициенты привели…


Коэффициенты не расчитывал.
Заполнил поле структуры USART_BaudRate = 115200;
Потом проинициализировал структуру USART_Init(USART6, &структура);
Действия самые обыкновенные.

Цитата(Сергей Борщ @ Jun 30 2015, 13:05) *
Частота кварца измерялась?

Частоту кварца измерил осциллографом, используя щуп. 7,9997 МГц.
Когда подобрал коэффициент, проверил частоту кварца при обмене данных по USART.
С подключенным щупом к лапке кварца обмен данными не нарушался.
Obam
"Коэффициенты не расчитывал. Заполнил поле структуры…"

Во времена настали… "Астролябия сама меряет, было бы чего мерять " sm.gif
Golikov A.
крутоsm.gif...


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

У вас какие-нибудь настройки не прошли, PLL не на то выставилась, и опорная частота уехала, как вы таймеры и все остальное будете задавать? Или там тоже астролябией, только результат сразу не поймешь?
ЮКОР
Цитата(Golikov A. @ Jun 30 2015, 14:49) *
крутоsm.gif...


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

У вас какие-нибудь настройки не прошли, PLL не на то выставилась, и опорная частота уехала, как вы таймеры и все остальное будете задавать? Или там тоже астролябией, только результат сразу не поймешь?


Я использую многократно проверенный stm32f4xx_usart.c из стандартной перифирийной библиотеки.
там определяются все необходимые коэффициенты. Астролябией это назвать тяжело.
Не думаю, что в моём случае коэффициенты для скорости 115200 определились неправильно,
здесь чот-то другое.
Пока понять не могу.
Tanya
Цитата(ЮКОР @ Jun 30 2015, 15:40) *
Пока понять не могу.

А таймер вывести на ножку? Описки бывают - попробуйте КУБом...
Golikov A.
Цитата
Не думаю, что в моём случае коэффициенты для скорости 115200 определились неправильно,


А думать не надо, проверить надо. Если коэффициент верный - значит не верная частота, если коэффициент не верный - значит не верный расчет.
в первом случае смотрим настройки pll во втором дефайны.

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

так же может быть не от того проца дефайны и кэфициенты по регистру не правильно считаются...
Mihey_K
Если б заглянули в usart.c, то увидели бы там функцию USART_Init(), в которой рассчитывается BRR после вызова RCC_GetClocksFreq(), отсюда и смотрите. При наличии отладки все просто. Может неверно указали модель МК, т.к. в system_stm32f4xx.c куча коэфициентов PLL зависит от модели, там же определяется SystemCoreClock, базовая частота для библиотеки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.