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

 
 
> Вопросы по тактированию STM32F100, Не совпадают частоты тактирования кварцем и RC-генератором
allsettingsdone
сообщение May 14 2013, 12:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Здравствуйте, начал подробно разбираться со способами тактирования STM. Написал функцию для простоты которая позволяет выбрать источник тактирования и менять множитель частоты, НО возник момент когда я тактирую мк от внутреннего RC генератора 8 МГц - то программа работает медленней чем если бы тактировал от кварца 8 МГц (смотрел на осциллографе частоту дрыгания ногами в цикле с "for(volatile uint32_t i=10; i>0; i--) {}"). И вот в случае тактирования мк от кварца 8 МГц длительность импульса - 3 мкс, а если выбрать тактирование от внутреннего RC генератора с частотой опять таки 8 Мгц - то длительность импульса будет уже 8 мкс!!! (компилирую в Keil со вторым уровнем оптимизации). И ещё совершенно не получается изменять частоту тактирования при помощи ФАПЧ (PLL). Прилагается проект в Keil. Он сам небольшой, функция называется init_clk(uint32_t clk_sourse, uint32_t PLL_status, uint32_t PLL_freq).
Прикрепленные файлы
Прикрепленный файл  test0_delay.zip ( 180.11 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
allsettingsdone
сообщение May 24 2013, 09:01
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Может так вопрос будет понятнее:

===========================================================
В случае тактирования от PLL (а PLL от внешнего кварцевого резонатора (HSE))

1.Предочистка делителя для HSE
Код
RCC->CFGR2 &= ~RCC_CFGR2_PREDIV1;


2.Делить частоту HSE на 1
Код
RCC->CFGR2 |=  RCC_CFGR2_PREDIV1_DIV1;


3.Источником сигнала для PLL выбран HSE
Код
RCC->CFGR |= RCC_CFGR_PLLSRC;


4.Отключить генератор PLL
Код
RCC->CR   &= ~RCC_CR_PLLON;


5.Очистить PLLMULL
Код
RCC->CFGR &= ~RCC_CFGR_PLLMULL;


6.Коэффициент умножения = 2
Код
RCC->CFGR |=  RCC_CFGR_PLLMULL2;


7.Включить генератор PLL
Код
RCC->CR   |=  RCC_CR_PLLON;


8.Ожидание готовности PLL
Код
while((RCC->CR & RCC_CR_PLLRDY)==0) {}


9.Очистка битов выбора источника тактового сигнала
Код
RCC->CFGR &= ~RCC_CFGR_SW;


10.Выбрать источником тактового сигнала PLL
Код
RCC->CFGR |=  RCC_CFGR_SW_PLL;


11.Ожидание переключения на PLL
Код
while((RCC->CFGR&RCC_CFGR_SWS)!=0x08){}


===========================================================

В случае тактирования от внешнего кварца (HSE)

1.Включить генератор HSE
Код
RCC->CR     |= RCC_CR_HSEON;


2.Ожидание готовности HSE
Код
while((RCC->CR & RCC_CR_HSERDY)==0)


3.Очистка битов выбора источника тактового сигнала
Код
RCC->CFGR &= ~RCC_CFGR_SW;


4.Выбрать источником тактового сигнала генератор HSE
Код
RCC->CFGR |=  RCC_CFGR_SW_HSE;


===========================================================

В случае тактирования от внутреннего RC-генератора (HSI) без PLL

1.Включить генератор HSI
Код
RCC->CR   |=  RCC_CR_HSION;


2.Ожидание готовности HSI
Код
while((RCC->CR & RCC_CR_HSIRDY)==0) {}


3.Очистка битов выбора источника тактового сигнала
Код
RCC->CFGR &= ~RCC_CFGR_SW;


4.Выбрать источником тактового сигнала генератор HSI
Код
RCC->CFGR |=  RCC_CFGR_SW_HSI;


===========================================================

И при настройках на одинаковые частоты тактирования (во всех трех случаях должно быть 8 МГц) у меня получаются разные временные задержки.
Что я делаю не так?

Сообщение отредактировал allsettingsdone - May 24 2013, 09:03
Go to the top of the page
 
+Quote Post



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

 


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


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