STM32L– Система тактирования (обзор)

7 Декабря 2011 К комментариям

Сегодня по плану обзор системы тактирования (модуль Reset and clock control (RCC)).

Согласно документации (Reference manual RM0038) в качестве источника тактовых сигналов (SYSCLK – системные тактовые сигналы) могут выступать четыре источника:

  • HSI oscillator clock – внутренний высокочастотный RC генератор
  • HSE oscillator clock – внешний высокочастотный генератор
  • PLL clock – ситема ФАПЧ
  • MSI (multispeed internal) oscillator clock – внутренний RC генератор с возможностью выбора частоты генерации
  • </ul> Так же имеются два вторичных источника тактовых сигналов:
    • LSI RC – внутренний низкочастотный RC-генератор (37 кГц)
    • LSE crystal – внешний низкочастотный кварцевый генератор
    • </ul> Функциональная схема: image 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 МГц: image 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). В один момент времени можно “вывести” только один сигнал: image Стоит обратить внимание на ограничение максимальных частот в зависимости от режима работы (напряжения питания ядра): image Пример 1 Как мы уже знаем после сброса в качестве системной тактовой частоты используется внутренний MSI генератор, с частотой по умолчанию 2,097 МГц. Воспользуемся выходом MCO для контроля частоты. Объявим вывод: #define PIN_MCO A, 8, HIGH, MODE_AF_PUSH_PULL, SPEED_40MHZ, AF0 Настроим его: PIN_CONFIGURATION(PIN_MCO); Выбор источников сигнала производится установкой соответствующих битов в регистре RCC_CFGR. image image К сожалению в заголовочном файле stm32l1xx.h не описаны источники, поэтому опишем их сами (так как пока не используем стандартную библиотеку):
      enum rcc_cfgr_mco_select
      {
      	RCC_CFGR_MCOSEL_DISABLED = 0,
      	RCC_CFGR_MCOSEL_SYSCLK = RCC_CFGR_MCOSEL_0,
      	RCC_CFGR_MCOSEL_HSI = RCC_CFGR_MCOSEL_1,
      	RCC_CFGR_MCOSEL_MSI = RCC_CFGR_MCOSEL_1 | RCC_CFGR_MCOSEL_0,
      	RCC_CFGR_MCOSEL_HSE = RCC_CFGR_MCOSEL_2,
      	RCC_CFGR_MCOSEL_PLL = RCC_CFGR_MCOSEL_2 | RCC_CFGR_MCOSEL_0,
      	RCC_CFGR_MCOSEL_LSI = RCC_CFGR_MCOSEL_2 | RCC_CFGR_MCOSEL_1,
      	RCC_CFGR_MCOSEL_LSE = RCC_CFGR_MCOSEL_2 | RCC_CFGR_MCOSEL_1 | RCC_CFGR_MCOSEL_0
      };
      И выберем в качестве источника MSI генератор: RCC->CFGR &= ~RCC_CFGR_MCOSEL; RCC->CFGR |= RCC_CFGR_MCOSEL_MSI; После компиляции и прошивки, на выводе PA8 получил частоту 2,102 МГц. Попробуем изменить частоту MSI генератора. Выбор частоты производится установкой соответствующих битов в регистре RCC_ICSCR image image Повышаем частоту до 4,194 Мгц: RCC->ICSCR &= ~RCC_ICSCR_MSIRANGE; RCC->ICSCR |= RCC_ICSCR_MSIRANGE_6; Компилируем, прошиваем и получаем 4,206 МГц. Внимание! Так как сейчас после сброса мы “сразу” изменяем частоту генератора MSI, а он по умолчанию используется для системной тактовой частоты, то выбор диапазона 0 или 1 приведет к невозможности программирования мк. Если вы все таки попали в данное положение, то для восстановления работоспособности достаточно вывод Boot0 подключить к Vcc и выполнить сброс мк. Пример 2 После сброса выключены все генераторы кроме MSI. Попробуем включить HSI генератор. Общая процедура такова:


comments powered by Disqus