0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 6
1

Тактирование от HSE через PLL.

30.11.2014, 18:59. Показов 6114. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, граждане!
При попытке перейти на использование внешнего кварца, словил проблему.
Использую кварц на 12 Мгц, на входе в PLL делю его на 3, далее помнажаю, делю на шины и тд и тп.

Код
RCC->CFGR &= ~RCC_CR_PLLON;
RCC->CR =RCC_CR_HSEON|RCC_CR_CSSON; //включение работы от внешнего кварца, и включение защиты от его падения.
while (!(RCC->CR & RCC_CR_HSERDY) ) {} // ждём стабилизации частоты
RCC->CFGR2 = RCC_CFGR2_PREDIV1_DIV3; // Коэффициент деления частоты кварца на входе в PLL = 3
RCC->CFGR |= RCC_CFGR_SW_PLL|RCC_CFGR_HPRE_DIV2|RCC_CFGR_PPRE1_DIV8|RCC_CFGR_PPRE2_DIV4|RCC_CFGR_PLLMULL4|RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLSRC_PREDIV1;
RCC->CFGR |= RCC_CFGR_MCO_HSE;
/* По порядку
PLL selected as system clock
AHB = SYSCLK/2
AHB1 = (AHB\8)= 1 MHz. Timers clock = AHB1*2 = 2 MHz
AHB2 = (AHB\4) = 2 MHz
PLL_IN=HSE/4= 4 MHz
Clock 4 MHz не делится на 2 перед попаданием на PLL
PREDIV в качестве источника для PLL
На выход MCO поступает сигнал HSE
*/
RCC->CFGR |= RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY) ) {}

RCC->APB2ENR=(RCC_APB2ENR_IOPAEN|RCC_APB2ENR_IOPBEN|RCC_APB2ENR_IOPCEN|RCC_APB2ENR_ADC1EN|RCC_APB2ENR_AFIOEN);
// На второй шине врубаем тактирование всех портов,и альтернативные функции.
RCC->APB1ENR=RCC_APB1ENR_TIM2EN;// врубаем тактирование таймера 2.
Проблема в чём. При прогонке в симуляторе оказалось что в конце всей моей инициализации, частоты на шинах не те что я рассчитывал. Коэффициенты деления на шинах отрабатывают нормально, а вот с PLL какая-то беда. При ближнем рассмотрении оказалось что регистры управления PLL не изменяются в процессе инициализации, что характерно в случае, когда установлен PLLON. Флажок этот действительно вылетает в самом начале симуляции.
Согласно документации делать он этого не должен (стр.130 usir manual). Вручную он скидываться тоже не захотел(первая строчка моего кода).
У меня есть определенные сомнения относительно файлика начальной инициализации system_stm32f10x. В нём дохера чего выставляется, в том числе и включается PLLON. При попытке его изменить, Keil перестал "ходить" в симуляции.
Извините что так много букв, прошу помощи.
Камень: пинбордовский STM32f103c8
Keil 4.73
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2014, 18:59
Ответы с готовыми решениями:

STM32F103C8T6 BluePill тактирование HSE от PLL
Всем привет! Столкнулся с проблемой, что, например, если обвязать переключение на HSE, PLL...

Тактироание через HSE и PLL
Здравствуйте, я новичек в программировании микроконтроллеров. Имею отладочную плату blue pill....

Тактирование от PLL по HSI
Тактирование от HSI, HSE, PLL\HSE проходит успешно, а от PLL\HSI не работает. Судя по асмеблерскому...

SYSCLK = HSE -> PLL = HSI помогите с тактированием при CSS
Добрый день. Подскажите пожалуйста, возможно ли решить следующую задачу, если да то как? Есть...

2
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
30.11.2014, 19:42 2
Посмотри тут http://forum.iosyitistromyss.r... 35&t=19943 как правильно настраивать нужно!
Вообще алгоритм такой:
1. Включили HSE (HSEON в CR)
2. Дождались установки флага HSERDY
3. Выбрали в регистре CFGR источник тактирования PLL от HSE
4. Включили PLL (PLLON в CR)
5. Настроили предвыборку (регистр FLASH_ACR)
6. Дождались установки флага PLLRDY
7. Переключили тактирование SYSCLK битами SW на PLL.
8. Можно и схему защиты включить если надо.
Кстати на входе PLL рекомендуют частоту 1-2 МГц делать... правда такое я читал для f4хх серии, насчет f1xx не уверен
0
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 6
11.12.2014, 17:51 3
wypuk, спасибо!
Я только сейчас вернулся к решению этой проблемы, сделал всё как было указано в теме, всё заработало кроме делителя PREDIV1 (как раз чтобы на вход PLL подать поменьше частоту). Есть какие-то особенности его использования? Да и вообще с регистром RCC_CFGR2 какие-то сомнения у меня. Его хрен где отследишь в симуляции, и похоже что он вообще как-то залочен и не изменяется.
0
11.12.2014, 17:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2014, 17:51
Помогаю со студенческими работами здесь

Тактирование через NPN транзистор.
Доброго времени суток всем. Ребята, не могу понять, почему на NPN (2N2222) транзисторе, при...

STM32F100 HSE
Всем привет! Возникли непонятки с запуском HSE (точнее с незапуском). Имеем код: RCC_DeInit();...

Проблемы с HSE
Ни как не могу запустить HSE. Вот код: ...

stm32 hsi/hse
103C8. Запускаю usart1 на hsi. Вывожу сообщение из кольцевого буфера по прерыванию. Работает....

STM32 HSE Кварцевый резонатор устойчивость
Вопрос - у всех слетает тактирование, если за выводы кварца прикоснуться пальцем? Кварц 8М гейер....

Автоматическое определение частоты внешнего HSE
А можно ли определить какой частоты HSE подключен средствами самого контролера STM32f100? Идея...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru