Сегодня по плану обзор системы тактирования (модуль Reset and clock control (RCC)).
Согласно документации (Reference manual RM0038) в качестве источника тактовых сигналов (SYSCLK – системные тактовые сигналы) могут выступать четыре источника:
</ul> Функциональная схема:
HSE oscillator clock – внешний высокочастотный генератор
Источником сигналов для HSE генератора может быть как внешний тактовый генератор, так и обычный кварцевый или керамический резонатор.
Для установленного на плате STM32L-Discovery микроконтроллера частота внешнего сигнала не должна превышать 32МГц, в случае если вы используете внешний тактовый генератор, а при использовании кварцевого (керамического) резонатора его частота должна быть от 1 до 24 МГц.
Внешний сигнал может иметь форму пилы, синусоиды или прямоугольных импульсов со скважностью 50%.
HSI oscillator clock – внутренний высокочастотный RC генератор
HSI генератор представляет собой RC-генератор с частотой 16 МГц, он тактирует модуль АЦП, может быть источником тактовых сигналов (SYSCLK), а так же может служить источником опорных сигналов для ФАПЧ.
Данный генератор проходит калибровку на заводе и производитель гарантирует точность в 1% при температуре 25 градусов Цельсия. Калибровочное значение запрограммированное на заводе автоматически загружается в регистр ICSCR после сброса микроконтроллера (данный регистр доступен только для чтения). Дополнительно существует возможность самостоятельной подстройки генератора (регистр HSITRIM).
Данный генератор может так же использоваться как авариный, в случае отказа HSE генератора (более подробно в разделе - Clock security system (CSS)).
PLL clock – ситема ФАПЧ
Система ФАПЧ (фазовая автоподстройка частоты) грубо говоря производит умножение опорного сигнала (частота входного сигнала должна лежать в пределах от 2 до 24 МГц) с заданным коэффициентом, однако частота на выходе системы ФАПЧ недолжна превышать 32 МГц (если используется для системного тактового сигнала SYSCLK).
К сожалению, использование модуля USB, несколько ограничивает использование системы ФАПЧ в качестве источника системных тактовых сигналов, так как источником требуемой тактовой частоты USB модуля равной 48 МГц является выход ФАПЧ (до делителя) и в этом случае SYSCLK может принимать значения 12, 16 и 24 МГц:
MSI (multispeed internal) oscillator clock – внутренний RC генератор с возможностью выбора частоты генерации
MSI генератор представляет собой RC-генератор с фиксированным набором частот: 65,536 кГц; 131,072 кГц; 262,144 кГц; 524,288 кГц; 1,048 МГц; 2,097 МГц; 4,194 МГц.
Данный генератор автоматически используется в качестве источника тактовых сигналов после сброса и пробуждения из режимов пониженного энергопотребления (Stop, Standby). После сброса и выходе из режима Standby частота генератора принимает значение по умолчанию (2,097 МГц).
Генератор проходит калибровку на заводе и производитель гарантирует точность в 1% при температуре 25 градусов Цельсия. Калибровочное значение запрограммированное на заводе автоматически загружается в регистр ICSCR после сброса микроконтроллера (данный регистр доступен только для чтения). Дополнительно существует возможность самостоятельной подстройки генератора (регистр MSITRIM).
LSI RC – внутренний низкочастотный RC-генератор
LSI генератор представляет собой RC-генератор с частотой 37 кГц, используется для тактирования независимого сторожевого таймера (IWDG), модуля часов реального времени (RTC) и модуля ЖКИ индикатора.
LSE crystal – внешний низкочастотный кварцевый генератор
Источником сигналов для LSE генератора может быть как внешний тактовый генератор (с частотой до 1 МГц), так и низкочастотный кварцевый или керамический резонатор (32,768 кГц).
Внешний сигнал может иметь форму пилы, синусоиды или прямоугольных импульсов со скважностью 50%.
Генератор может использоваться для тактирования таймеров общего назначения (номера 9, 10 и 11), модуля часов реального времени (RTC) и модуля ЖКИ индикатора.
MCO – выход тактовой частоты
Для контроля частот основных источников тактового сигнала и (или) синхронизации внешних устройств предусмотрен выход MCO (Microcontroller clock output). В один момент времени можно “вывести” только один сигнал:
Стоит обратить внимание на ограничение максимальных частот в зависимости от режима работы (напряжения питания ядра):
Пример 1
Как мы уже знаем после сброса в качестве системной тактовой частоты используется внутренний MSI генератор, с частотой по умолчанию 2,097 МГц.
Воспользуемся выходом MCO для контроля частоты.
Объявим вывод:
#define PIN_MCO A, 8, HIGH, MODE_AF_PUSH_PULL, SPEED_40MHZ, AF0
Настроим его:
PIN_CONFIGURATION(PIN_MCO);
Выбор источников сигнала производится установкой соответствующих битов в регистре RCC_CFGR.
К сожалению в заголовочном файле stm32l1xx.h не описаны источники, поэтому опишем их сами (так как пока не используем стандартную библиотеку):
И выберем в качестве источника MSI генератор:
RCC->CFGR &= ~RCC_CFGR_MCOSEL;
RCC->CFGR |= RCC_CFGR_MCOSEL_MSI;
После компиляции и прошивки, на выводе PA8 получил частоту 2,102 МГц.
Попробуем изменить частоту MSI генератора.
Выбор частоты производится установкой соответствующих битов в регистре RCC_ICSCR
Повышаем частоту до 4,194 Мгц:
RCC->ICSCR &= ~RCC_ICSCR_MSIRANGE;
RCC->ICSCR |= RCC_ICSCR_MSIRANGE_6;
Компилируем, прошиваем и получаем 4,206 МГц.
Внимание! Так как сейчас после сброса мы “сразу” изменяем частоту генератора MSI, а он по умолчанию используется для системной тактовой частоты, то выбор диапазона 0 или 1 приведет к невозможности программирования мк. Если вы все таки попали в данное положение, то для восстановления работоспособности достаточно вывод Boot0 подключить к Vcc и выполнить сброс мк.
Пример 2
После сброса выключены все генераторы кроме MSI.
Попробуем включить HSI генератор.
Общая процедура такова:
разрешить работу генератора (установка соотв. битов)
дождаться стабилизации работы (ожидание установки соотв. битов)
использовать по задумке
</ul>
Разрешаем работу генератора HSI, установкой бита HSION в регистре RCC_CR:
RCC->CR |= RCC_CR_HSION;
Ожидаем окончания стабилизации работы (ожидание установки бита HSIRDY):