Перейти к содержанию

Дерево тактирования (clock tree)

Ядро, память и каждый периферийный блок микроконтроллера получают тактовый сигнал не напрямую от кварца, а через цепочку переключателей и делителей. Схему этой цепочки в справочном руководстве STM32 называют деревом тактирования — по ней видно, какая частота где получится и какие пределы нельзя превысить.

Обновлено Редакция GAW

Дерево тактирования (clock tree) — схема распределения тактовых сигналов внутри микроконтроллера: от генераторов через переключатели, PLL и делители к ядру, памяти, шинам и периферии. У STM32 она нарисована в справочном руководстве отдельным рисунком (у STM32F103 — рисунок 8 в RM0008), и почти любая настройка частоты — UART, таймера, АЦП, USB — сводится к тому, чтобы пройти по этому рисунку от источника до нужного блока.

Уровни дерева

  1. Источники. Системную частоту SYSCLK может дать один из трёх источников: внутренний RC-генератор HSI, кварцевый генератор HSE или PLL. Кроме них есть медленные LSE (32,768 кГц, для часов) и LSI (около 40 кГц у STM32F103, для сторожевого таймера IWDG). Чем они отличаются — в термине HSE, HSI, LSE и LSI.
  2. Переключатель SYSCLK. После сброса выбран HSI. Переключение на другой источник происходит только после того, как он готов, а работающий источник SYSCLK остановить нельзя.
  3. Делитель AHB (1, 2, 4, 8, 16, 64, 128, 256 или 512 — делителя 32 нет) даёт частоту HCLK — для ядра, памяти, DMA и шины AHB.
  4. Делители APB1 и APB2 (1, 2, 4, 8, 16) дают частоты PCLK1 и PCLK2 для периферии на этих шинах.
  5. Ответвления: делитель АЦП от PCLK2, делитель USB от выхода PLL, умножитель частоты таймеров, HCLK/8 для системного таймера SysTick, источник часов RTC, вывод MCO.
  6. Ключи тактирования периферии. Последнее звено перед каждым блоком — бит в регистрах RCC_xxxENR; без него блок не получает такт вовсе, см. включение тактирования периферии.

Пример: STM32F103 на 72 МГц

УзелНастройкаЧастотаПредел (RM0008)
HSEкварц 8 МГц8 МГцкварц 4–16 МГц (F101–F103, DS5319; у F105/F107 — 3–25 МГц)
PLL×972 МГц72 МГц
HCLKAHB / 172 МГц72 МГц
PCLK2APB2 / 172 МГц72 МГц
PCLK1APB1 / 236 МГц36 МГц
Таймеры APB1×2, так как делитель не 172 МГц—
АЦПPCLK2 / 612 МГц14 МГц
USBPLL / 1,548 МГцнужно ровно 48 МГц

Частоты в таблице — наш расчёт по пределам из RM0008, разд. 7.2. От HSI так не получится: на вход PLL идёт HSI / 2, и наибольшая системная частота — 64 МГц. Интерфейс записи флеш-памяти всегда тактируется от HSI, поэтому выключать HSI на время записи и стирания нельзя.

У STM32F407 дерево сложнее — у PLL отдельный выход PLL48CLK для USB OTG FS, генератора случайных чисел и SDIO, а для I²S есть второй PLL (PLLI2S), — и пределы шин другие: AHB до 168 МГц, APB2 до 84 МГц, APB1 до 42 МГц (RM0090, разд. 7.2). Множители и делители под конкретный кварц и частоту подбирает калькулятор тактирования STM32, он же выдаёт значения регистров RCC.

Не путать с PLL и с предделителем таймера: это отдельные узлы, а дерево тактирования — вся схема целиком, от генераторов до ключей каждого блока. Состав семейства и выводы кварца — на странице STM32F1.

Частые вопросы

Что такое SYSCLK, HCLK, PCLK1 и PCLK2?

SYSCLK — системная частота на выходе переключателя источников (HSI, HSE или PLL). HCLK — частота шины AHB, ядра, памяти и DMA: SYSCLK после делителя AHB. PCLK1 и PCLK2 — частоты шин APB1 и APB2: HCLK после их делителей. У STM32F103 HCLK и PCLK2 не выше 72 МГц, PCLK1 — не выше 36 МГц.

От чего работает STM32 сразу после сброса?

От внутреннего RC-генератора HSI: у STM32F103 это 8 МГц, у STM32F407 — 16 МГц. Кварц HSE и PLL программа включает сама, а переключение SYSCLK происходит только тогда, когда новый источник готов: генератор устойчив или PLL захватил частоту (RM0008, разд. 7.2.6).

Почему таймер работает на частоте выше, чем его шина?

Так устроено дерево тактирования: если делитель шины APB равен 1, таймеры получают её частоту, если любой другой — удвоенную. У STM32F103 на 72 МГц шина APB1 делится на 2 и работает на 36 МГц, а таймеры TIM2–TIM4 на ней считают от 72 МГц.

Источники

  1. STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — разд. 7.2 и рис. 8 Clock tree: три источника SYSCLK (HSI, HSE, PLL), вторичные LSI 40 кГц и LSE 32,768 кГц; делитель AHB /1…512, делители APB1 и APB2 /1…16; AHB и APB2 до 72 МГц, APB1 до 36 МГц; SysTick от HCLK/8; АЦП от APB2 /2, 4, 6, 8, не выше 14 МГц; USB через делитель /1 или /1,5; от HSI через PLL не выше 64 МГц; интерфейс программирования флеш-памяти всегда от HSI; таймеры — частота шины при делителе 1, иначе удвоенная; разд. 7.2.6: после сброса SYSCLK — HSI, переключение только на готовый источник
  2. STMicroelectronics. RM0090 Rev 21 (June 2024). Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — разд. 7.2 и рис. 21: STM32F405/407 — HSI 16 МГц, HSE 4–26 МГц, LSI около 32 кГц; AHB до 168 МГц, APB2 до 84 МГц, APB1 до 42 МГц; USB OTG FS, RNG и SDIO берут 48 МГц от отдельного выхода PLL

Нашли ошибку?