STM32L - Часовникова система (Общ преглед)

Днес, според плана, преглед на системата за часовник (модул за нулиране и управление на часовника (RCC )). Според документацията (Справочно ръководство RM0038), четири източника могат да действат като източник на часовник (SYSCLK - системни часовникови сигнали):

  • HSI oscillator clock - вътрешен високочестотен RC осцилатор
  • HSE oscillator clock - външен високочестотен осцилатор
  • PLL clock - PLL система
  • MSI (multispeed internal) oscillator clock - вътрешен RC осцилатор с избор на честота на генериране
Има и два вторични източника на часовник:
  • LSI RC - вътрешен нискочестотен RC осцилатор (37 kHz)
  • LSE кристал - външен нискочестотен кристален осцилатор
Функционална диаграма:Часовник на HSE осцилатор – външен високочестотен осцилатор Източникът на сигнал за HSE осцилатора може да бъде външен тактов генератор или конвенционален кварцов или керамичен резонатор. За микроконтролера, инсталиран на платката STM32L-Discovery, честотата на външния сигнал не трябва да надвишава 32 MHz, ако използвате външен тактов генератор, а когато използвате кварцов (керамичен) резонатор, честотата му трябва да бъде от 1 до 24 MHz. Външният сигнал може да бъде под формата на трионообразен, синусоидален или правоъгълен импулс с коефициент на запълване 50%.HSI осцилатор - вътрешен високочестотен RC осцилатор HSI осцилаторът е 16 MHz RC осцилатор, той тактува ADC модула, може да бъде източник на тактови сигнали (SYSCLK) и може също да служи като източник на референтни сигнали за PLL. Този генератор е фабрично калибриран и производителят гарантира точност от 1% при температура от 25 градуса по Целзий. Стойността на калибриране, програмирана фабрично автоматичнозареден в регистърICSCR след нулиране на микроконтролера (този регистър е само за четене). Освен това има възможност за самонастройка на генератора (регистърHSITRIM ). Този генератор може да се използва и като авариен генератор в случай на повреда на генератораHSE (за повече подробности вижте раздела — Система за сигурност на часовника (CSS )).PLL тактова честота - PLL PLL (Phase Locked Loop) грубо умножава референтния сигнал (честотата на входния сигнал трябва да бъде между 2 и 24 MHz) по даден фактор, но изходната честота на PLL не трябва да надвишава 32 MHz (когато се използва за системен часовникSYSCLK ). За съжаление, използването на USB модула донякъде ограничава използването на PLL системата като източник на системни тактови сигнали, тъй като източникът на необходимата тактова честота на USB модула от 48 MHz е PLL изходът (преди разделителя) и в този случайSYSCLK може да приема стойности от 12, 16 и 24 MHz: широк диапазон от честоти: 65,536 kHz; 131.072 kHz; 262.144 kHz; 524.288 kHz; 1,048 MHz; 2,097 MHz; 4,194 MHz. Този осцилатор се използва автоматично като източник на часовник след нулиране и събуждане от режими на изключване (Стоп,В готовност ). След нулиране и излизане от режимStandby, честотата на осцилатора се връща към стойността по подразбиране (2,097 MHz). Генераторът е фабрично калибриран и производителят гарантира точност от 1% при температура 25 градуса по Целзий. Фабрично програмираната стойност за калибриране се зарежда автоматичнокъм регистъраICSCR след нулиране на микроконтролера (този регистър е само за четене). Освен това има възможност за самонастройка на генератора (регистърMSITRIM ).LSI RC – вътрешен нискочестотен RC осцилатор LSI осцилаторът е 37 kHz RC осцилатор, използван за часовник на независимия таймер за наблюдение (IWDG ), часовников модул за реално време (RTC ) и LCD дисплей модул.LSE кристал - външен нискочестотен кристален осцилатор Източникът на сигнал за LSE осцилатора може да бъде или външен тактов генератор (до 1 MHz), или нискочестотен кристален или керамичен резонатор (32,768 kHz). Външният сигнал може да бъде под формата на трионообразен, синусоидален или правоъгълен импулс с коефициент на запълване 50%. Генераторът може да се използва за часовник на таймерите с общо предназначение (номера 9, 10 и 11), модула на часовника за реално време (RTC ) и модула на LCD индикатора.MCO – тактов изход ИзходътMCO (тактов изход на микроконтролера) е предвиден за управление на честотите на основните източници на часовник и (или) синхронизиране на външни устройства. Само един сигнал може да бъде изведен в даден момент:

Струва си да се обърне внимание на ограничението на максималните честоти в зависимост от режима на работа (захранващо напрежение на ядрото):Пример 1 Както вече знаем, след нулирането вътрешният MSI осцилатор се използва като системен часовник с честота по подразбиране от 2,097 MHz. Нека използваме MCO изхода, за да контролираме честотата. Нека декларираме изхода:

Изборът на източници на сигнал се извършва чрез задаване на съответните битове в регистъраRCC_CFGR.

За съжаление, източниците не са описани в заглавния файл stm32l1xx.h, така че ще ги опишем сами (тъй като не използваместандартна библиотека):

И изберете генератора като източник на MSI:

След компилиране и мигане изходът PA8 получи честота от 2,102 MHz.

Нека се опитаме да променим честотата на MSI генератора.

Изборът на честота се извършва чрез задаване на съответните битове в регистъраRCC_ICSCR

Увеличаваме честотата до 4,194 MHz:

Компилираме, флашваме и получаваме 4.206 MHz.

Внимание! Тъй като сега, след нулирането, ние променяме честотата на MSI осцилатора „незабавно“ и той се използва по подразбиране за честотата на системния часовник, избирането на диапазон от 0 или 1 ще направи невъзможно програмирането на микро. Ако все още се окажете в тази ситуация, за да възстановите работоспособността, достатъчно е да свържете изхода Boot0 към Vcc и да нулирате MK.

Пример 2

След нулирането всички генератори се изключват с изключение на MSI.

Нека се опитаме да включим HSI генератора.

Общата процедура е:

  • активирайте генератора (задайте съответните битове)
  • изчакайте работата да се стабилизира (изчакване да бъдат зададени съответните битове)
  • използвайте по предназначение
Активирайте HSI генератора, като зададете бита HSION в регистъра RCC_CR:

Очакваме края на стабилизирането на работата (изчакване на настройката на бита HSIRDY):

Извеждаме сигнала към MCO щифта:

След компилиране и мигане изходът PA8 получи честота от 15,91 MHz.

Това е мястото, където прегледът свършва.

Още веднъж обръщам внимание на факта, че след нулирането вътрешният MSI генератор (2.097 MHz) се използва като тактова честота на системата.

Изходен код

Примерите са базирани на проекта по-горе:

с корекции в макроси за работа с I/O линии: