Дерево тактирования (clock tree)
Ядро, память и каждый периферийный блок микроконтроллера получают тактовый сигнал не напрямую от кварца, а через цепочку переключателей и делителей. Схему этой цепочки в справочном руководстве STM32 называют деревом тактирования — по ней видно, какая частота где получится и какие пределы нельзя превысить.
Обновлено Редакция GAW
Дерево тактирования (clock tree) — схема распределения тактовых сигналов внутри микроконтроллера: от генераторов через переключатели, PLL и делители к ядру, памяти, шинам и периферии. У STM32 она нарисована в справочном руководстве отдельным рисунком (у STM32F103 — рисунок 8 в RM0008), и почти любая настройка частоты — UART, таймера, АЦП, USB — сводится к тому, чтобы пройти по этому рисунку от источника до нужного блока.
Уровни дерева
- Источники. Системную частоту SYSCLK может дать один из трёх источников: внутренний RC-генератор HSI, кварцевый генератор HSE или PLL. Кроме них есть медленные LSE (32,768 кГц, для часов) и LSI (около 40 кГц у STM32F103, для сторожевого таймера IWDG). Чем они отличаются — в термине HSE, HSI, LSE и LSI.
- Переключатель SYSCLK. После сброса выбран HSI. Переключение на другой источник происходит только после того, как он готов, а работающий источник SYSCLK остановить нельзя.
- Делитель AHB (1, 2, 4, 8, 16, 64, 128, 256 или 512 — делителя 32 нет) даёт частоту HCLK — для ядра, памяти, DMA и шины AHB.
- Делители APB1 и APB2 (1, 2, 4, 8, 16) дают частоты PCLK1 и PCLK2 для периферии на этих шинах.
- Ответвления: делитель АЦП от PCLK2, делитель USB от выхода PLL, умножитель частоты таймеров, HCLK/8 для системного таймера SysTick, источник часов RTC, вывод MCO.
- Ключи тактирования периферии. Последнее звено перед каждым блоком — бит в регистрах RCC_xxxENR; без него блок не получает такт вовсе, см. включение тактирования периферии.
Пример: STM32F103 на 72 МГц
| Узел | Настройка | Частота | Предел (RM0008) |
|---|---|---|---|
| HSE | кварц 8 МГц | 8 МГц | кварц 4–16 МГц (F101–F103, DS5319; у F105/F107 — 3–25 МГц) |
| PLL | ×9 | 72 МГц | 72 МГц |
| HCLK | AHB / 1 | 72 МГц | 72 МГц |
| PCLK2 | APB2 / 1 | 72 МГц | 72 МГц |
| PCLK1 | APB1 / 2 | 36 МГц | 36 МГц |
| Таймеры APB1 | ×2, так как делитель не 1 | 72 МГц | — |
| АЦП | PCLK2 / 6 | 12 МГц | 14 МГц |
| USB | PLL / 1,5 | 48 МГц | нужно ровно 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 МГц.
Источники
- 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, переключение только на готовый источник
- 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
Нашли ошибку?
Смотрите также
- Тактирование STM32PLL под нужную частоту, шины, флеш-память, регистры RCC и код
- PLLУмножитель частоты: ФАПЧ в тактировании МК
- HSE, HSI, LSE и LSIЧетыре тактовых генератора STM32: какой для чего
- Шины AHB и APBБыстрая шина ядра и шины периферии STM32
- STM32F1Cortex-M3: F100, F101, F102, F103, F105/107 — линейки и распиновки