Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: По поводу HSE_VALUE
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
dimon_rub
Может вопрос глупый или уже обсуждался но НЕ МОГУ ПОНЯТЬ. Проц: STM32F103RC. Ситуация такая был кварц на 16МГц стал на 8МГц. Изменил в HSE_VALUE.
Выстроил PLL что бы получилось 72МГц как и раньше. Все ОК. Проверяю опросом структуры RCC_GetClocksFreq((RCC_ClocksTypeDef *)&rcc_Clocks);

__IO RCC_ClocksTypeDef rcc_Clocks;

Возвращает:
SYSCLK_Frequency=72000000
PCLK1_Frequency=36000000
PCLK2_Frequency=72000000
HCLK_Frequency=72000000
ADCCLK_Frequency=12000000
Во всех таймерах привязка по опрошеной структуре к примеру
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1;
или
SysTick_Config(rcc_Clocks.SYSCLK_Frequency/22);

Почему по уходили временные диапазоны на половину.
Спасибо за помощь.
dimon_rub
Все что изменилось это
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL9);
на
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

Теперь что бы получилась 1ms
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 500000) - 1;
а было по нормальному
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1;
Подскажите, хоть где рыть.
x893
Возьмите Cube и посмотрите как правильно нужно настроить генератор (вторая закладка - в картринках). Делитель входящий настроен был на 2 - так и остался, а надо на 1.
dimon_rub
Цитата(x893 @ Apr 2 2017, 16:23) *
Возьмите Cube и посмотрите как правильно нужно настроить генератор (вторая закладка - в картринках). Делитель входящий настроен был на 2 - так и остался, а надо на 1.


Если бы ты был внимателен то бит RCC_CFGR_PLLXTPRE это и есть деление на 2. Во второй строке где 8МГц кварц этого бита НЕТ.
Непомнящий Евгений
del
Шаманъ
Цитата(dimon_rub @ Apr 2 2017, 15:34) *
Во всех таймерах привязка по опрошеной структуре к примеру
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1;

Почему по уходили временные диапазоны на половину.

Я не знаток куба, но эта строка дать правильный результат не может, ибо посмотрев на картинку:
Нажмите для просмотра прикрепленного файла
Можно увидеть, что для APB1 prescaler > 1, частота сигнала тактирующего таймеры в два раза больше, чем PCLK1 (у Вас PCLK1_Frequency=36000000, прескалер = 2, соответственно таймер тактируется 72МГц).

Это объясняет почему:
Цитата
Теперь что бы получилась 1ms
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 500000) - 1;
а было по нормальному
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1;
Подскажите, хоть где рыть.
dimon_rub
Я конечно только учусь но и то я вижу что и впервом и втором случае конечная частота проца была 72МГц. Изменяется только кварц и соответственно делитель для него
jcxz
Цитата(dimon_rub @ Apr 8 2017, 07:42) *
Я конечно только учусь но и то я вижу что и впервом и втором случае конечная частота проца была 72МГц. Изменяется только кварц и соответственно делитель для него

Измерить частоту подозреваемого таймера не судьба?
Шаманъ
Цитата(dimon_rub @ Apr 8 2017, 08:42) *
Я конечно только учусь но и то я вижу что и впервом и втором случае конечная частота проца была 72МГц.

Я не знаю, что Вы меняли (кубом не пользуюсь и вникать в него желания нет) - я прокомментировал результат. Очевидно, что при частоте PLL 72МГц и делителе PCLK1 2, частота таймера будет по прежнему 72МГц, а не 36МГц, как Вы считаете здесь:
Цитата
Возвращает:
SYSCLK_Frequency=72000000
PCLK1_Frequency=36000000
PCLK2_Frequency=72000000
HCLK_Frequency=72000000
ADCCLK_Frequency=12000000
Во всех таймерах привязка по опрошеной структуре к примеру
TIM3->PSC = (rcc_Clocks.PCLK1_Frequency / 1000000) - 1;


А что там менялось я думаю Вы сами разберетесь - нужно просто внимательно сравнить, что было, и что стало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.