STM32L - Система тактування (огляд)

Сьогодні за планом огляд системи тактування (модуль Reset and clock control (RCC )). Відповідно до документації (Reference manual RM0038) як джерело тактових сигналів (SYSCLK – системні тактові сигнали) можуть виступати чотири джерела:

  • HSI oscillator clock – внутрішній високочастотний RC генератор
  • HSE oscillator clock – зовнішній високочастотний генератор
  • PLL clock – система ФАПЧ
  • MSI (multispeed internal) oscillator clock – внутрішній RC генератор із можливістю вибору частоти генерації
Також є два вторинних джерела тактових сигналів:
  • LSI RC – внутрішній низькочастотний RC-генератор (37 кГц)
  • LSE crystal – зовнішній низькочастотний кварцовий генератор
Функціональна схема: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 контролю частоти. Оголосимо висновок:

Вибір джерел сигналу здійснюється установкою відповідних бітів у регістріRCC_CFGR.

На жаль у заголовному файлі stm32l1xx.h не описані джерела, тому опишемо їх самі (бо поки не використовуємостандартну бібліотеку):

І виберемо як джерело MSI генератор:

Після компіляції та прошивки, на виведенні PA8 отримав частоту 2,102 МГц.

Спробуємо змінити частоту генератора MSI.

Вибір частоти проводиться установкою відповідних бітів у регістріRCC_ICSCR

Підвищуємо частоту до 4,194 МГц:

Компілюємо, прошиваємо та отримуємо 4,206 МГц.

Увага! Оскільки зараз після скидання ми “відразу” змінюємо частоту генератора MSI, а він за замовчуванням використовується для системної тактової частоти, то вибір діапазону 0 або 1 призведе до неможливості програмування мк. Якщо ви все ж таки потрапили в дане положення, то для відновлення працездатності достатньо висновок Boot0 підключити до Vcc і виконати скидання мк.

Приклад 2

Після скидання вимкнено всі генератори крім MSI.

Спробуємо увімкнути HSI генератор.

Загальна процедура така:

  • дозволити роботу генератора (установка соотв. бітів)
  • дочекатися стабілізації роботи (очікування установки соотв. бітів)
  • використовувати за задумом
Дозволяємо роботу генератора HSI, установкою біта HSION у регістрі RCC_CR:

Очікуємо закінчення стабілізації роботи (очікування установки біта HSIRDY):

Виводимо сигнал на висновок MCO:

Після компіляції та прошивки, на виведенні PA8 отримав частоту 15,91 МГц.

У цьому оглядова частина закінчується.

Ще раз звертаю увагу, що після скидання як системна тактова частота використовується внутрішній MSI генератор (2,097 МГц).

Вихідний код

Приклади базуються на проекті, наведеному раніше:

з виправленнями в макросах для роботи з лініями вводу-виводу: