Тактирование STM32 — цепочка от генератора до ядра и периферии: кварцевый генератор HSE или внутренний HSI, предделитель и умножитель PLL, затем шина AHB с ядром и памятью и шины APB с периферией. Неверный множитель — и ядро работает за пределами допустимой частоты, лишний такт ожидания — и программа медленнее, недостающий — и она падает. Калькулятор проверяет каждую настройку по справочному руководству своей линейки.
Коротко
- F1: кварц 4–16 МГц, PLL ×2…×16, до 72 МГц; APB1 — до 36 МГц; для USB PLL должен дать 48 или 72 МГц.
- F4: вход VCO 1–2 МГц (лучше 2 МГц), VCO 100–432 МГц; SYSCLK = VCO / P, USB = VCO / Q; F407 — до 168 МГц, F429 — до 180 МГц.
- F0 и G0: до 48 и 64 МГц; у G0 SYSCLK берётся с выхода R: VCO / R.
- L4 и L4+: после сброса — MSI 4 МГц; PLL M, N, R; до 80 МГц, у L4+ до 120 МГц в режиме Range 1 boost.
- Таймеры: при делителе APB больше 1 частота таймеров вдвое выше частоты шины.
- Флеш-память: число тактов ожидания растёт с частотой, у F4 — ещё и при пониженном питании.
Как пользоваться
- Выберите линейку. Пределы частот и устройство PLL у них разные: STM32F103 и STM32F407 считаются по разным руководствам.
- Выберите генератор: HSE — кварц на плате (частоту впишите), HSI — внутренний RC-генератор. У STM32F042, F072 и F091 есть ещё HSI48, у STM32L4 — генератор MSI с выбором частоты.
- Впишите нужную частоту SYSCLK. Калькулятор переберёт все допустимые настройки PLL и покажет ближайшую частоту, а среди равных выберет ту, что даёт 48 МГц для USB и — у F4 — 2 МГц на входе VCO. Другие настройки с той же частотой собраны в таблицу под схемой.
- Делители шин по умолчанию — самые маленькие в пределах линейки; их можно задать вручную. У F4 выберите напряжение питания, у G0, L4 и L4+ — диапазон напряжения ядра.
Справа — частоты ядра, шин, таймеров, USB и АЦП и число тактов ожидания. Ниже — цепочка тактирования, значения регистров RCC и функция инициализации на регистрах с именами из заголовочных файлов CMSIS. Все настройки хранятся в адресе страницы — ссылкой можно поделиться.
Назначение каждого бита RCC_CR, RCC_CFGR, RCC_PLLCFGR и регистров включения периферии с кодами значений и макросами CMSIS — на страницах регистров RCC STM32F1 и STM32F4.
Как устроена цепочка тактирования
После сброса STM32 работает от внутреннего генератора HSI. Чтобы разогнать ядро, программа включает кварцевый генератор HSE, настраивает PLL, увеличивает такты ожидания флеш-памяти, ждёт захвата PLL и только потом переключает на него системную частоту SYSCLK. Дальше SYSCLK делится делителем AHB — это частота HCLK ядра, памяти и DMA, — а от HCLK своими делителями тактируются шины APB.
Пределы шин и генераторов у каждой линейки свои:
| Линейка | SYSCLK, HCLK | APB1 | APB2 | HSI | Кварц HSE | PLL | Документ |
|---|---|---|---|---|---|---|---|
| STM32F030x4/x6/x8 | до 48 МГц | до 48 МГц | — | 8 МГц | 4–32 МГц | ×2…×16 | RM0360 Rev 5 |
| STM32F030xC, STM32F070 | до 48 МГц | до 48 МГц | — | 8 МГц | 4–32 МГц | ×2…×16 | RM0360 Rev 5 |
| STM32F031, F038, F051, F058 | до 48 МГц | до 48 МГц | — | 8 МГц | 4–32 МГц | ×2…×16 | RM0091 Rev 10 |
| STM32F042, F048, F072, F078, F091, F098 | до 48 МГц | до 48 МГц | — | 8 МГц | 4–32 МГц | ×2…×16 | RM0091 Rev 10 |
| STM32F100 (value line) | до 24 МГц | до 24 МГц | до 24 МГц | 8 МГц | 4–24 МГц | ×2…×16 | RM0041 Rev 6 |
| STM32F101 (access line) | до 36 МГц | до 36 МГц | до 36 МГц | 8 МГц | 4–16 МГц | ×2…×16 | RM0008 Rev 21 |
| STM32F102 (USB access line) | до 48 МГц | до 36 МГц | до 48 МГц | 8 МГц | 4–16 МГц | ×2…×16 | RM0008 Rev 21 |
| STM32F103 (performance line) | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–16 МГц | ×2…×16 | RM0008 Rev 21 |
| STM32F105, F107 (connectivity line) | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 3–25 МГц | ×4…×9, ×6,5 | RM0008 Rev 21 |
| STM32F301, F318 | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0366 Rev 5 |
| STM32F302x6/x8, F302xB/xC | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0365 Rev 8 |
| STM32F302xD/xE | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0365 Rev 8 |
| STM32F303x6/x8, F303xB/xC, F328, F358 (USB — у F303xB/xC) | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0316 Rev 10 |
| STM32F303xD/xE, F398 (USB — у F303xD/xE) | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0316 Rev 10 |
| STM32F334 | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0364 Rev 4 |
| STM32F373, F378 (USB — у F373) | до 72 МГц | до 36 МГц | до 72 МГц | 8 МГц | 4–32 МГц | ×2…×16 | RM0313 Rev 7 |
| STM32F401 | до 84 МГц | до 42 МГц | до 84 МГц | 16 МГц | 4–26 МГц | ÷M, ×N, ÷P, ÷Q | RM0368 Rev 6 |
| STM32F405, F407, F415, F417 | до 168 МГц | до 42 МГц | до 84 МГц | 16 МГц | 4–26 МГц | ÷M, ×N, ÷P, ÷Q | RM0090 Rev 22 |
| STM32F411 | до 100 МГц | до 50 МГц | до 100 МГц | 16 МГц | 4–26 МГц | ÷M, ×N, ÷P, ÷Q | RM0383 Rev 4 |
| STM32F427, F429, F437, F439 | до 180 МГц | до 45 МГц | до 90 МГц | 16 МГц | 4–26 МГц | ÷M, ×N, ÷P, ÷Q | RM0090 Rev 22 |
| STM32G031, G041, G051, G061, G071, G081, G0B1, G0C1 | до 64 МГц | до 64 МГц | — | 16 МГц | 4–48 МГц | ÷M, ×N, ÷R | RM0444 Rev 6 |
| STM32G030, G050, G070, G0B0 | до 64 МГц | до 64 МГц | — | 16 МГц | 4–48 МГц | ÷M, ×N, ÷R | RM0454 Rev 5 |
| STM32L4: L412…L4A6 | до 80 МГц | до 80 МГц | до 80 МГц | 16 МГц | 4–48 МГц | ÷M, ×N, ÷R | RM0351 Rev 11, RM0394 Rev 5 |
| STM32L4+: L4P5…L4S9 | до 120 МГц | до 120 МГц | до 120 МГц | 16 МГц | 4–48 МГц | ÷M, ×N, ÷R | RM0432 Rev 9 |
PLL STM32F0, F1 и F3: умножитель
У F0, F1 и F3 PLL — умножитель. Частота входа делится предделителем, затем умножается:
Множитель PLLMUL — от 2 до 16. У STM32F101, F102 и F103 вход PLL — HSI / 2 = 4 МГц или HSE, деленный на 1 или 2 (бит PLLXTPRE), а выход ограничен 72 МГц. У F105 и F107 множители ×4…×9 и ×6,5, а HSE делится предделителем PREDIV1 от 1 до 16. У F0 выход PLL должен быть в пределах 16–48 МГц, у F100 — 16–24 МГц.
USB у STM32F102 и F103 тактируется от PLL через делитель USBPRE: ÷ 1 или ÷ 1,5. Поэтому для USB PLL должен выдавать 48 или 72 МГц — других вариантов нет. Частота АЦП делится от PCLK2 на 2, 4, 6 или 8 и не должна превышать 14 МГц: на 72 МГц наименьший подходящий делитель — 6, это 12 МГц.
У STM32F3 тот же умножитель ×2…×16, но выход PLL должен быть в пределах 16–72 МГц, кварц — от 4 до 32 МГц, а HSE всегда проходит через предделитель PREDIV ÷1…16 в регистре RCC_CFGR2 (бит PLLXTPRE в RCC_CFGR повторяет его младший разряд). Вход PLL — HSI / 2 или HSE / PREDIV; у STM32F302xD/xE, F303xD/xE и F398 вместо HSI / 2 — HSI / PREDIV (поле PLLSRC из двух битов, RM0316 и RM0365). USB тактируется как у F103 — через USBPRE от 48 или 72 МГц. Такты ожидания у F3 считаются по HCLK, а у F373 и F378 — по SYSCLK (RM0313); пороги те же: 24, 48 и 72 МГц. Частоту АЦП STM32F3 калькулятор не считает: у этих АЦП свой тактовый вход и пределы в даташитах.
PLL STM32F4: делители M, N, P и Q
У F4 PLL устроен как синтезатор частоты: вход делится на M, генератор VCO работает на частоте в N раз выше, а выходы делят её на P и Q.
Ограничения RM0090: M — от 2 до 63, а частота на входе VCO — от 1 до 2 МГц, и для меньшего джиттера рекомендовано 2 МГц; N — от 50 до 432, VCO — от 100 до 432 МГц (у F401 — от 192 МГц); P — 2, 4, 6 или 8; Q — от 2 до 15. USB OTG FS требует ровно 48 МГц, SDIO и генератор случайных чисел — не больше 48 МГц.
Выше 168 МГц STM32F427 и F429 работают только в режиме over-drive регулятора напряжения: его включают, когда PLL уже настроен, но ещё не выбран системной частотой. STM32F411 выше 84 МГц требует масштаба регулятора scale 1. Калькулятор добавляет эти шаги в код сам.
PLL STM32G0: делители M, N и R
У G0 похожий синтезатор, но системная частота берётся с выхода R:
M — от 1 до 8, а частота после него — от 2,66 до 16 МГц; N — от 8 до 86; VCO — от 96 до 344 МГц у G0x1 (RM0444) и от 64 до 344 МГц у G0x0 (RM0454); R — от 2 до 8, выход — не больше 64 МГц. От HSI16 максимальные 64 МГц дают M = 1, N = 8, R = 2: VCO на 128 МГц. Выходы P и Q тактируют часть периферии; калькулятор ставит в них допустимые делители, но не включает их. В диапазоне Range 2 — режиме пониженного напряжения ядра — частота системы ограничена 16 МГц, а VCO — 128 МГц.
PLL STM32L4 и L4+: генератор MSI и делители M, N, R
У STM32L4 после сброса ядро работает от генератора MSI на 4 МГц. Его частоту выбирают из двенадцати ступеней от 100 кГц до 48 МГц полем MSIRANGE регистра RCC_CR (RM0351). MSI, HSI16 или кварц HSE на 4–48 МГц питают PLL, устроенный как у G0: системная частота берётся с выхода R.
У STM32L4 (RM0351, RM0394) M — от 1 до 8, а частота после него — от 4 до 16 МГц; N — от 8 до 86; VCO — от 64 до 344 МГц; R — 2, 4, 6 или 8; выход — до 80 МГц. В экономичном диапазоне Range 2 частота системы, HSE и выхода PLL ограничена 26 МГц, MSI — 24 МГц, а VCO — 128 МГц (таблица 33 RM0351). У STM32L4+ (RM0432) M — от 1 до 16 при входе 2,66–8 МГц, N — до 127, а выше 80 МГц, до 120 МГц, нужен режим Range 1 boost: бит R1MODE в регистре PWR_CR5 сбрасывают, на время переключения частоту AHB делят на 2 и возвращают делитель не раньше чем через 1 мкс. Калькулятор вставляет эти шаги в код.
USB, генератор случайных чисел и SDMMC у STM32L4 тактируются частотой 48 МГц от отдельного источника: MSI на 48 МГц, подстроенного по часовому кварцу LSE, выхода Q основного PLL или — у STM32L41x–L46x и L49x/L4Ax — генератора HSI48. Выход Q основного PLL не даёт 48 МГц одновременно с 80 МГц на выходе R: VCO для 80 МГц — 160 или 320 МГц, а для 48 МГц — 96, 192 или 288 МГц. Поэтому калькулятор оставляет выходы P и Q выключенными и частоту USB для L4 не считает.
Шины и таймеры
Делители AHB — 1, 2, 4, 8, 16, 64, 128, 256 и 512, делители APB — 1, 2, 4, 8 и 16. Таймеры получают частоту своей шины APB, если её делитель равен 1, и удвоенную — при любом другом делителе. Поэтому на STM32F407 таймеры шины APB1 работают на 84 МГц при самой шине на 42 МГц, а таймеры APB2 — на 168 МГц. От частоты таймера считают предделитель и период в калькуляторе таймера, от частоты шины — делитель скорости в калькуляторе UART.
Такты ожидания флеш-памяти
Флеш-память медленнее ядра: на высокой частоте процессор ждёт её несколько тактов. Число тактов ожидания задаёт поле LATENCY регистра FLASH_ACR. Мало тактов — команды читаются с ошибками, много — ядро простаивает. Таблицы — по справочным руководствам; верхняя граница каждой строки включительно.
STM32F1 (RM0008), STM32F0 (RM0091, RM0360) — от частоты SYSCLK, F100 тактов ожидания не имеет:
| Такты ожидания (LATENCY) | Частота |
|---|---|
| 0 | до 24 МГц |
| 1 | 24–48 МГц |
| 2 | 48–72 МГц |
STM32F405 и F407 (RM0090, таблица 11) — от частоты HCLK и напряжения питания:
| Такты ожидания (LATENCY) | 2,7–3,6 В | 2,4–2,7 В | 2,1–2,4 В | 1,8–2,1 В |
|---|---|---|---|---|
| 0 | до 30 МГц | до 24 МГц | до 22 МГц | до 20 МГц |
| 1 | 30–60 МГц | 24–48 МГц | 22–44 МГц | 20–40 МГц |
| 2 | 60–90 МГц | 48–72 МГц | 44–66 МГц | 40–60 МГц |
| 3 | 90–120 МГц | 72–96 МГц | 66–88 МГц | 60–80 МГц |
| 4 | 120–150 МГц | 96–120 МГц | 88–110 МГц | 80–100 МГц |
| 5 | 150–168 МГц | 120–144 МГц | 110–132 МГц | 100–120 МГц |
| 6 | — | 144–168 МГц | 132–154 МГц | 120–140 МГц |
| 7 | — | — | 154–168 МГц | 140–160 МГц |
STM32G0x1 (RM0444) — от частоты HCLK и диапазона напряжения ядра:
| Такты ожидания (LATENCY) | Range 1 | Range 2 |
|---|---|---|
| 0 | до 24 МГц | до 8 МГц |
| 1 | 24–48 МГц | 8–16 МГц |
| 2 | 48–64 МГц | — |
STM32L4 (RM0351, таблица 11; RM0394, таблица 9) и STM32L4+ (RM0432, таблица 12) — от частоты HCLK и диапазона:
| Такты ожидания (LATENCY) | Range 1 | Range 2 |
|---|---|---|
| 0 | до 16 МГц | до 6 МГц |
| 1 | 16–32 МГц | 6–12 МГц |
| 2 | 32–48 МГц | 12–18 МГц |
| 3 | 48–64 МГц | 18–26 МГц |
| 4 | 64–80 МГц | — |
| Такты ожидания (LATENCY) | Range 1 boost | Range 1 | Range 2 |
|---|---|---|---|
| 0 | до 20 МГц | до 20 МГц | до 8 МГц |
| 1 | 20–40 МГц | 20–40 МГц | 8–16 МГц |
| 2 | 40–60 МГц | 40–60 МГц | 16–26 МГц |
| 3 | 60–80 МГц | 60–80 МГц | — |
| 4 | 80–100 МГц | — | — |
| 5 | 100–120 МГц | — | — |
Такты ожидания увеличивают до перехода на высокую частоту и уменьшают только после перехода на низкую. При питании STM32F4 ниже 2,1 В буфер предвыборки должен быть выключен — в коде калькулятора он тогда не включается.
Код инициализации
Функция clock_init() повторяет порядок из справочных руководств: включает генератор и ждёт его готовности, ставит такты ожидания, записывает делители и настройки PLL, включает PLL и ждёт захвата, затем переключает SYSCLK и ждёт подтверждения в поле SWS. В конце она записывает новую частоту в переменную SystemCoreClock, от которой считают задержки и скорость интерфейсов библиотеки. Код рассчитан на запуск сразу после сброса, когда SYSCLK — от HSI (у STM32L4 — от MSI 4 МГц), а PLL выключен. Для Range 2 у L4 код сначала переключает диапазон напряжения, пока частота ещё низкая.
Ограничения
- Второй PLL STM32F105 и F107 (PLL2 и PLL3 для Ethernet и I2S) не моделируется: PREDIV1 тактируется прямо от HSE.
- STM32F410, F412, F413, F446 и F469 и линейки F2, F7, G4, H7, L0, L1 и L5 пока не поддерживаются.
- У STM32L4 не моделируются PLLSAI1 и PLLSAI2, режим MSI с подстройкой по LSE и вход внешнего питания ядра от понижающего преобразователя (SMPS).
- Внешний тактовый сигнал вместо кварца (режим bypass) отдельно не рассматривается: пределы частоты HSE взяты для кварца.
- Частоты периферии с собственным выбором источника (USART, I2C, АЦП у F0 и G0) не считаются: они задаются в регистрах выбора тактирования периферии.
- Калькулятор не проверяет ограничения корпусов и температурных исполнений — сверяйтесь с даташитом своего микроконтроллера.
Частые вопросы
Как получить 72 МГц на STM32F103 от кварца 8 МГц?
Включите HSE и умножьте его в PLL на 9: PLLSRC = 1 (HSE), PLLXTPRE = 0 (без деления), PLLMUL = 0111. Шина APB1 не может работать быстрее 36 МГц, поэтому её делитель — 2, APB2 остаётся на 72 МГц. Флеш-памяти на 72 МГц нужно два такта ожидания (LATENCY = 2), USB получает 72 / 1,5 = 48 МГц, АЦП — 72 / 6 = 12 МГц. Регистр RCC_CFGR после переключения — 0x001D8402.
Как рассчитать PLL STM32F4 на 168 МГц?
С кварцем 8 МГц: PLLM = 4 даёт на входе VCO рекомендуемые 2 МГц, PLLN = 168 — VCO 336 МГц, PLLP = 2 — SYSCLK 168 МГц, PLLQ = 7 — ровно 48 МГц для USB, SDIO и генератора случайных чисел. APB1 делится на 4 (42 МГц), APB2 — на 2 (84 МГц). При питании 2,7–3,6 В флеш-памяти нужно 5 тактов ожидания. RCC_PLLCFGR = 0x07402A04.
Почему таймеры работают на удвоенной частоте шины APB?
Так устроено тактирование таймеров у STM32F0, F1, F3, F4 и G0: если делитель шины APB равен 1, таймеры получают частоту шины, а при любом другом делителе — удвоенную. На STM32F103 с APB1 ÷ 2 шина работает на 36 МГц, а таймеры TIM2–TIM4 — на 72 МГц. Это нужно учитывать при расчёте предделителя и периода таймера.
Сколько тактов ожидания флеш-памяти ставить?
Это зависит от частоты — у F0, F1 и STM32F37x от SYSCLK, у остальных STM32F3, у F4 и G0 от HCLK — и, у STM32F4, от напряжения питания. STM32F1 и F3: 0 тактов до 24 МГц, 1 — до 48, 2 — до 72 МГц. STM32F0: 0 до 24 МГц, 1 до 48. STM32F407 при 2,7–3,6 В — по такту на каждые 30 МГц, 5 тактов на 168 МГц. Такты ожидания увеличивают до повышения частоты и уменьшают после её снижения.
Можно ли получить 48 МГц для USB на STM32F429 при 180 МГц?
Нет. Для 180 МГц VCO должен работать на 360 МГц с PLLP = 2 (с PLLP = 4 нужно 720 МГц, а VCO ограничен 432 МГц), а 360 не делится на 48 нацело: PLLQ = 7,5 недопустим. Если нужен USB, выберите 168 МГц: VCO 336 МГц, PLLQ = 7.
Как настроить STM32L476 на 80 МГц без кварца?
От генератора MSI, который после сброса и так работает на 4 МГц: PLLM = 1 (вход VCO 4 МГц), PLLN = 40 (VCO 160 МГц), PLLR = 2 — SYSCLK 80 МГц. Так настроены шаблоны STM32CubeL4 для плат Nucleo. Шины APB1 и APB2 у STM32L4 работают до 80 МГц, делители не нужны; флеш-памяти на 80 МГц в Range 1 нужно 4 такта ожидания. RCC_PLLCFGR = 0x01002801.
Как получить 120 МГц на STM32L4+?
Перевести стабилизатор в режим Range 1 boost, сбросив бит R1MODE в регистре PWR_CR5, и настроить PLL — например, MSI 4 МГц × 60 / 2. По RM0432 на время переключения частоту AHB делят на 2 и возвращают делитель не раньше чем через 1 мкс; флеш-памяти на 120 МГц нужно 5 тактов ожидания. Без режима boost STM32L4+ работает не быстрее 80 МГц.
Можно ли обойтись без кварца?
Да, если не нужна точная частота: внутренний генератор HSI откалиброван на заводе: в справочном руководстве RM0008 указано около 1 % при 25 °C, в даташите STM32F103 (DS5319) — от −1,1 до +1,8 % при 25 °C, и от него можно запустить PLL. Для USB, CAN и точных интервалов времени нужен кварц. STM32F042, F072 и F091 имеют HSI48, но без подстройки системой CRS его погрешность — около 3 % при 25 °C.
Источники
- STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — раздел RCC: кварц 4–16 МГц (3–25 МГц у F105/F107), PLL ×2…×16 с выходом до 72 МГц, AHB и APB2 до 72 МГц, APB1 до 36 МГц, АЦП до 14 МГц, USB — PLL на 48 или 72 МГц и USBPRE, биты RCC_CFGR; раздел флеш-памяти — LATENCY 0/1/2 до 24/48/72 МГц
- STMicroelectronics. RM0041 Rev 6. Reference manual: STM32F100xx advanced Arm-based 32-bit MCUs — кварц 4–24 МГц, AHB и обе шины APB до 24 МГц, выход PLL 16–24 МГц, PREDIV1 ÷1…16, флеш без тактов ожидания
- STMicroelectronics. RM0360 Rev 5. Reference manual: STM32F030x4/x6/x8/xC and STM32F070x6/xB — кварц 4–32 МГц, выход PLL 16–48 МГц, входы PLL по устройствам (PLLSRC), LATENCY 0/1 до 24/48 МГц
- STMicroelectronics. RM0091 Rev 10. Reference manual: STM32F0x1/STM32F0x2/STM32F0x8 — глава 6 RCC: HSI 8 МГц, HSI48 у F04x/F07x/F09x, PREDIV ÷1…16, PLL ×2…×16 с выходом 16–48 МГц, PLLSRC, коды PLLMUL, PPRE и HPRE, удвоение частоты таймеров; глава 3 — такты ожидания флеш-памяти
- STMicroelectronics. RM0090 Rev 22. Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — главы 6 и 7 RCC: кварц 4–26 МГц, HSI 16 МГц, PLLM 2…63 с входом VCO 1–2 МГц, PLLN 50…432, VCO 100–432 МГц, PLLP 2/4/6/8, PLLQ 2…15 для 48 МГц, пределы шин 168/84/42 и 180/90/45 МГц; таблицы 11 и 12 — такты ожидания по напряжению питания; режим over-drive для 180 МГц
- STMicroelectronics. RM0368 Rev 6 (STM32F401xB/C/D/E) и RM0383 Rev 4 (STM32F411xC/E) — F401: VCO 192–432 МГц, до 84 МГц, таблица 6 тактов ожидания; F411: до 100 МГц, APB1 до 50 МГц, таблица 5 тактов ожидания, масштаб регулятора VOS
- STMicroelectronics. RM0444 Rev 6 (STM32G0x1) и RM0454 Rev 5 (STM32G0x0) — кварц 4–48 МГц, вход PLL после ÷M 2,66–16 МГц, PLLN 8…86, VCO 96–344 МГц (у G0x0 — 64–344 МГц), PLLR 2…8 и PLLRCLK до 64 МГц, таблица 36 — пределы в Range 1 и Range 2, HSIDIV, биты RCC_PLLCFGR, такты ожидания по диапазону
- STMicroelectronics. RM0316 Rev 10. Reference manual: STM32F303xB/C/D/E, STM32F303x6/8, STM32F328x8, STM32F358xC, STM32F398xE — раздел RCC: HSI 8 МГц, кварц 4–32 МГц, выход PLL 16–72 МГц, APB1 до 36 МГц; 9.4.2 и 9.4.12 — биты RCC_CFGR (PLLSRC, PLLXTPRE, PLLMUL, USBPRE, PPRE, HPRE) и PREDIV в RCC_CFGR2; раздел FLASH — LATENCY 0/1/2 до 24/48/72 МГц HCLK
- STMicroelectronics. RM0365 Rev 8 (STM32F302), RM0366 Rev 5 (STM32F301, F318), RM0364 Rev 4 (STM32F334), RM0313 Rev 7 (STM32F37x) — те же пределы PLL и шин; поле PLLSRC из двух битов у F302xD/E (RM0365); такты ожидания по SYSCLK у F37x (RM0313)
- STMicroelectronics. RM0351 Rev 11 (STM32L47x, L48x, L49x, L4Ax) и RM0394 Rev 5 (STM32L41x–L46x). Reference manuals — раздел RCC: MSI — двенадцать ступеней от 100 кГц до 48 МГц, 4 МГц после сброса; HSI16, кварц 4–48 МГц; AHB, APB1 и APB2 до 80 МГц; PLLM 1…8 с входом 4–16 МГц, PLLN 8…86, VCO 64–344 МГц, PLLR 2/4/6/8, выход до 80 МГц; таблица 33 (у RM0394 — 31): в Range 2 — MSI до 24 МГц, HSE и PLL до 26 МГц, VCO до 128 МГц; биты RCC_CR, RCC_CFGR, RCC_PLLCFGR; таблица 11 (у RM0394 — 9) — такты ожидания; PWR_CR1 — поле VOS
- STMicroelectronics. RM0432 Rev 9. Reference manual: STM32L4+ Series — раздел RCC: AHB и APB до 120 МГц, PLLM 1…16 с входом 2,66–8 МГц, PLLN 8…127, выход PLL до 120 МГц; таблица 37 — пределы в Range 1 boost, Range 1 normal и Range 2; таблица 24 и порядок перехода в Range 1 boost (R1MODE, деление AHB на 2 на время переключения, пауза 1 мкс); таблица 12 — такты ожидания
- STMicroelectronics. STM32CubeL4: шаблоны проектов (Projects/NUCLEO-L476RG, NUCLEO-L432KC, NUCLEO-L496ZG, NUCLEO-L4R5ZI, Templates/Src/main.c) — второй источник для L4: MSI 4 МГц, PLLM 1, PLLN 40, PLLR 2 — 80 МГц и FLASH_LATENCY_4; у L4R5 — PLLN 60, 120 МГц в Range 1 boost и FLASH_LATENCY_5
- STMicroelectronics. STM32CubeF3: шаблоны проектов и драйвер HAL RCC (stm32f3xx_hal_rcc.c) — второй источник для F3: STM32F3-Discovery и STM32303C_EVAL — HSE 8 МГц × 9 = 72 МГц, STM32F302R8 и F334R8 Nucleo — HSI/2 × 16 = 64 МГц, F303K8 Nucleo — HSI/2 × 12 = 48 МГц, F303RE Nucleo — HSI / PREDIV 2 × 16 = 64 МГц; делители и LATENCY совпадают с расчётом
- STMicroelectronics. STM32CubeF0, STM32CubeF1, STM32CubeF4, STM32CubeG0: шаблоны проектов (Projects/…/Templates, SystemClock_Config) — второй источник для проверки: F103 от HSI на 64 МГц, F411 на 100 МГц, F429 на 180 МГц с over-drive, F072 от HSI48 на 48 МГц, G071 на 56 МГц — делители, LATENCY и пределы совпадают с расчётом
- STMicroelectronics. Заголовочные файлы CMSIS: cmsis_device_f0, cmsis_device_f1, cmsis_device_f4, cmsis_device_g0, cmsis_device_l4 — имена регистров и битов в сгенерированном коде: RCC_CR_HSEON, RCC_CFGR_SWS, FLASH_ACR_LATENCY, PWR_CR_ODEN, RCC_PLLCFGR_PLLREN, RCC_CR_MSIRANGE, PWR_CR5_R1MODE и другие
Где пригодится
- Семейства STM32Сравнение 25 семейств: ядро, частота, память, питание, периферия; выбор под задачу
- Совместимость STM32 по выводамКакие STM32 совпадают по выводам: таблицы отличий для F103, F407, F401, F303, G474, F030, G030
- Таймеры STM32Тактирование, PSC/ARR, ШИМ, мёртвое время, захват, энкодер, OPM, синхронизация
- UART STM32BRR и OVER8, допуск по частоте, флаги, прерывания, DMA с IDLE, полудуплекс, RS-485
- STM32 Blue PillSTM32F103C8T6: функции выводов, 5 В-выводы, питание, загрузка
- STM32 Black PillSTM32F411: функции выводов, 5 В, питание, DFU и SWD
Встроить калькулятор на свой сайт
Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах
<iframe src="https://gaw.ru/embed/stm32-clock/" title="Тактирование STM32: PLL, шины и такты ожидания" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/stm32-clock/">Тактирование STM32: PLL, шины и такты ожидания</a> — GAW.ru</p>Автоподстройка высоты рамки
Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.
<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>Обновлено .
Нашли ошибку в расчёте?