Уроки STM32

Система тактування STM32.

Сьогодні мова піде про систему тактування мікроконтролерів STM 32. Якщо ви ще не знаєте, що таке такт, частота і взагалі не торкалися до цього системи тактування, перейдіть на наш урок. Хоча за цим посиланням і розглядається система тактування мікроконтролера AVR, поняття визначені в уроці за посиланням, застосовні і до системи тактування мікроконтролерів STM 32.

Розглядатимемо систему тактування на прикладі мікроконтролера STM 32 F 303 VCT ​​6, який встановлений у налагоджувальній платі STM 32 F 3 DISCOVERY .

Погляньмо на загальну структуру системи тактування:

Як бачимо, система тактування STM 32, набагато складніше системи тактування мікроконтролерів AVR, хоча, що у малюнку відбито лише основна її частина.

Розглядати схему слід зліва направо. По-перше, ми маємо вибрати основне джерело тактування контролера. Вибиратимемо між HSI та HSE.

HSE-Зовнішній високочастотний генератор. Джерелом тактування йому служить зовнішній тактовий сигнал ( Input frequency ), який як бачимо за схемою, то, можливо від 4 до 32 МГц. Це може бути кварцовий резонатор, тактовий генератор і таке інше.

HSIВнутрішній високочастотний генератор. У мікроконтролерах STM 32 F 3 є RC ланцюжком із частотою 8МГц. Точність значно нижча від зовнішнього генератора HSE.

stm32

Кожен із даних джерел тактування може бути з'єднаний зPLL. Однак перед подачею на PLL сигнал HSI буде зменшений в 2 рази. Сигнал HSE у свою чергу може подаватися на PLL без змін, або бути зменшений у певну кількість разів, за бажанням користувача.

PLLClockСистема Фазової Автопідстроювання Частоти (ФАПЧ). Дозволяє помножити вхідний сигнал HSI або HSE у необхідну кількість разів.

PLL сигнал може бути подано на системну шину, максимальна частота якої 72МГц. Або на системну шину може бути поданий сигнал HSE або HSI безпосередньо, тобто без перетворення PLL .

stm32

Системна тактова частота SYSCLK тактує всі основні шини мікроконтролера, через відповідні дільники, як ми бачимо на схемі вище. Слід враховувати, що максимальна тактова частота деяких шин нижче за SYSCLK . Тому перед подачею тактового сигналу SYSCLK на шину слід поділити його відповідним дільником. Якщо цього не зробити, мікроконтролер зависне.

Для налаштування тактування можна вдатися до ручної редагування регістрів, або скористатися бібліотечними функціями. Ми скористаємося бібліотекою.

Налаштуємо нашу налагоджувальну плату STM 32 F 3 DISCOVERY на роботу з тактовою частотою 72 МГц.

Додамо наступний код:

В основній функції main , оголошено структуруRCC_ClocksTypeDef. Ця структура містить у собі поля, відбивають поточну тактову частоту певних елементів контролера.

Потім основною функцією викликається функція InitRCC ,яка налаштовує тактування контролера. Розглянемо її докладніше.

КомандоюRCC_HSEConfig(RCC_HSE_ON),ми включаємо HSE .На його включення потрібен час, тому необхідно почекати доки не буде встановлено прапорRCC_FLAG_HSERDY.Робимо ми це в цикліwhile(RCC_GetFlagStatus(RCC_FLAG_HSERDY) ==RESET).

Потім ми робимо налаштування затримки флеш пам'яті. Це необхідно робити під час роботи системної шини на частотах понад 36 МГц!

Після налаштування затримки вибираємо розподільник PLL. КомандоюRCC_PREDIV1Config(RCC_PREDIV1_Div1)ми встановлюємо дільник на 1. КомандоюRCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_9) вибираємо HSE як джерело частоти для PLL і вибираємо множення у 9 разів. Залишається тільки включити PLL командоюRCC_PLLCmd(ENABLE),і чекати установки прапораRCC_FLAG_PLLRDY,в циклі while . Тим самим ми забезпечуємо необхідну тимчасову затримку для включення PLL. Після цього вибираємо PLL як джерело системної частоти SYSCLK командоюRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK).Представники шин чіпати не будемо, тому шини AHB , APB 1, APB 2 будуть працювати на частотах 72,36 та 72 МГц відповідно.

Залишається лише вимкнути внутрішній RC ланцюжок командоюRCC_HSICmd(DISABLE).

Після виконання функції InitRCC в основному циклі прошивки заповнимо структуруRCC_ClocksTypeDef, що дозволить нам дізнатися, чи правильно ми налаштували систему тактування. Робимо ми це командоюRCC_GetClocksFreq (&RCC_Clocks).

Подивитися значення тактових частот контролера можна в режимі налагодження, встановивши точку зупинки на команді__NOP()що означає порожню команду. Цю команду часто додають для зручності налагодження.

Підключаємо налагоджувальну плату STM32 F3 DISCOVERY, збираємо прошивку, прошиваємо плату і нарешті заходимо в режим налагодження, натиснувши кнопку Start/Stop debug session (Ctrl+F 5). Встановивши точку зупинки на функції__NOP,і додавши структуру RCC _ Clocks в Watch ,запускаємо виконання прошивки, натиснувши F 5. В результаті бачимо:

тактування

Частоти налаштовані правильно, і мікроконтролер тепер працює на частоті 72 МГц.

Отже, як Ви зрозуміли з сьогоднішнього уроку, система тактування STM 32 є досить потужною і гнучкою для задоволення потреб Ваших проектів. Витративши час на її налаштування - Ви досягнете чудових результатів!