реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> STN32F107 SYSCLK = 72 MHz, частота USART1
Genadi Zawidowsk...
сообщение Nov 18 2013, 20:03
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата
Вот код, имеющийся в сухом остатке. Кто подскажет что не так?

Вам уже советовали - замените магические числа на именованные константы. Я посчитал битики и нашёл ошибку, которой могло бы не быть, если Вы бы пользовались родными #define.
Цитата
А вот это что такое?

Код
arm_hardware_pioa_periphout_altfn2(GPIO_ODR_ODR9, 255);    // TX DATA line (2 MHz)
    arm_hardware_pioa_inputs(GPIO_ODR_ODR10);        // RX data line

Вот просто rocket sience... Как Вы вообще программированием занимаетесь? Ну не обращайте внимания на второстеепнные для понимания вещи... У Вас в программе есть аналогичный кусок, только он настроен на работу с двумя битами в PIOA, это универсальные функциии...
Если что, исходник лежит вот тут https://188.134.5.254/export/616/trunk/hardware.c - строка 2600 и 1320

И что за пляски со status register? Сделайте прямо:
Код
    while ((USART1->SR & USART_SR_TXE) == 0)
;
    USART1->DR = c;


Сообщение отредактировал Genadi Zawidowski - Nov 18 2013, 20:20
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 21 2013, 17:20
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



От безысходности подключил осциллограф. Установил скорость 9600. Реально получается примерно 1 мС/бит. Форма красивая. Передается то что нужно. Пробовал соединиться терминалом от винды. Тоже ничего не принимает. При этом контроллер шьется по ком-порту, а сам порт от компьютера нормально работает с модемом. Что бы это значило? Кстати на 9600 знакомые 4 нуля.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 21 2013, 19:46
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Опытным путем удалось выяснить, что частота усарта лежит в пределах 7,5...8,5 МГц. Подставив в формулу 8 МГц получил устойчивую работу на 9600. От 0 до FF все передается без ошибок. Собственно почему 8 МГц? Системная 72 МГц, PCLK2 = 72 МГц если верить тому, что в регистрах. Может кто-то объяснить происходящее?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 21 2013, 20:07
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ПЛЛ не настроился и вы на внутренний кварц свалились?
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 22 2013, 07:32
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Я житагом просматривал регистры, пошагово проходя все до main. Исходя из увиденного пересчитал все настройки. Получилось 72 МГц. Как теперь понимать ситуацию - даже не знаю. Стартап стандартный от кеил. Кварц 25 МГц.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 22 2013, 08:41
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну и что, на заборе тоже написано....
то что в регистрах задана частота 72, это не гарантия что ПЛЛ на нее настроился, что входной кварц той частоты как должен быть. Что вы переключили клок на ПЛЛ и прочее...

выведите на ножку системный клок, да померьте осциллографом, он же у вас есть...
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 22 2013, 08:53
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Осциллограф есть. Да, както нужно пройтись по этим вопросам и посмотреть что там на самом деле.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 24 2013, 14:09
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Посмотрел ситуацию с тактированием. Получается так. Если идти пошагово до main, то с тактированием подядок. 72 МГц на усарте есть. Если же запускать "run to9 main" или просто с отключенным программатором, то на усарте 8 МГц. Т.е. тактирование не настраивается. В чем может быть дело? Раньше с подобным не сталкивался. Прочитать регистры ни программатором ни с помощью r = RCC->CFGR; не удается. Только если пошагово пройтись, то они видны. Помогите понять ситуацию. Спасибо.

Ну вобщем разобрался. Вот тут выходил по таймауту.
Код
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));


Если в строке увеличить значениетаймаута, то все в порядке.
Код
#define HSE_STARTUP_TIMEOUT   ((uint16_t)0xffff) /*0x0500!< Time out for HSE start up */


Хотелось бы знать почему HSE не выходит на готовность вовремя? Кейловцы же из чего-то исходили перед тем как записать значение 0х0500. Внесем ясность в это дело и тему можно закрывать.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
OlegH
сообщение Nov 24 2013, 15:13
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 14-01-06
Из: Украина, г.Харьков
Пользователь №: 13 168



В системной библиотеке от ST, в модуле stm32f10x_rcc есть полезная в таких случаях функция
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
Которая позволяет получить реальные значения частот шин, которые имеются. Недавно она мне помогла определить наличие проблем с тактированием.

А что таймаута не хватает - кварц может медленно раскачиваться, либо плата плохо помыта
Go to the top of the page
 
+Quote Post
smk
сообщение Nov 24 2013, 15:27
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(OlegH @ Nov 24 2013, 17:13) *
В системной библиотеке от ST, в модуле stm32f10x_rcc есть полезная в таких случаях функция
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
Которая позволяет получить реальные значения частот шин, которые имеются. Недавно она мне помогла определить наличие проблем с тактированием.

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

Надо посмотреть потом. Может действительно стоит того чтобы перепереть на нормальный язык.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Nov 24 2013, 15:46
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(OlegH @ Nov 24 2013, 22:13) *
В системной библиотеке от ST, в модуле stm32f10x_rcc есть полезная в таких случаях функция
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
Которая позволяет получить реальные значения частот шин, которые имеются. Недавно она мне помогла определить наличие проблем с тактированием.

Эта функция определяет не реальные частоты, а те которые получается из HSE_VALUE в stm32f10x.h и коэффициентов PLL, а если запустился HSI - тогда из него.
Но если HSE_VALUE правильно прописать, тогда baudrate будет корректно рассчитываться функцией USART_Init(......) из stm32f10x_usart.c когда либо HSE, либо HSI запустится.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016