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

Тактирование STM32: PLL, шины и такты ожидания

Выберите линейку STM32, генератор и нужную частоту ядра — калькулятор подберёт множители и делители PLL в пределах справочного руководства, посчитает частоты шин, таймеров, USB и АЦП, такты ожидания флеш-памяти и выдаст значения регистров RCC с кодом инициализации без HAL.

Исходные данные

Справочное руководство RM0008 Rev 21

МГц
SYSCLK от
МГц

до 72 МГц у этой линейки

USB 48 МГц от PLL

Результат

SYSCLK
72 МГц
HSE ÷ 1 × 9
HCLK (ядро, AHB)
72 МГцSysTick от HCLK/8: 9 МГц
PCLK1 (APB1)
36 МГцтаймеры 72 МГц; предел 36 МГц
PCLK2 (APB2)
72 МГцтаймеры 72 МГц; предел 72 МГц
USB
48 МГцчастота для USB получена точно
ADCCLK
12 МГцPCLK2 ÷ 6, предел 14 МГц
Такты ожидания флеш-памяти
2

Цепочка тактирования

Тактирование STM32F103 (performance line): SYSCLK 72 МГцHSE8 МГцPLLXTPRE ÷ 18 МГцPLL × 972 МГцSYSCLK72 МГцAHB ÷ 172 МГцHCLK, ядроAPB1 ÷ 236 МГцтаймеры 72 МГцUSB ÷ 1,548 МГцдля USB годитсяAPB2 ÷ 172 МГцтаймеры 72 МГцADC ÷ 612 МГцне больше 14 МГц
РегистрЗначениеЧто в нём
RCC_CFGR0x001D8402делители шин, PLL и выбор SYSCLK (SW = 2)
FLASH_ACRLATENCY = 2такты ожидания флеш-памяти

Код на регистрах (CMSIS)

/* STM32F103 (performance line): SYSCLK 72 MHz, HCLK 72 MHz, PCLK1 36 MHz, PCLK2 72 MHz (RM0008 Rev 21) */
void clock_init(void)
{
    RCC->CR |= RCC_CR_HSEON;
    while (!(RCC->CR & RCC_CR_HSERDY)) {}
    /* 2 wait state(s) before raising the clock */
    FLASH->ACR = (FLASH->ACR & ~FLASH_ACR_LATENCY) | FLASH_ACR_PRFTBE | 2U;
    while ((FLASH->ACR & FLASH_ACR_LATENCY) != 2U) {}
    RCC->CFGR = 0x001D8400; /* prescalers and PLL, SYSCLK still HSI */
    RCC->CR |= RCC_CR_PLLON;
    while (!(RCC->CR & RCC_CR_PLLRDY)) {}
    RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | 2U;
    while ((RCC->CFGR & RCC_CFGR_SWS) != 0x00000008) {}
    SystemCoreClock = 72000000U;
}

Функция вызывается в начале main() или из SystemInit(), пока SYSCLK — от HSI после сброса.

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

Тактирование 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 — ещё и при пониженном питании.

Как пользоваться

  1. Выберите линейку. Пределы частот и устройство PLL у них разные: STM32F103 и STM32F407 считаются по разным руководствам.
  2. Выберите генератор: HSE — кварц на плате (частоту впишите), HSI — внутренний RC-генератор. У STM32F042, F072 и F091 есть ещё HSI48, у STM32L4 — генератор MSI с выбором частоты.
  3. Впишите нужную частоту SYSCLK. Калькулятор переберёт все допустимые настройки PLL и покажет ближайшую частоту, а среди равных выберет ту, что даёт 48 МГц для USB и — у F4 — 2 МГц на входе VCO. Другие настройки с той же частотой собраны в таблицу под схемой.
  4. Делители шин по умолчанию — самые маленькие в пределах линейки; их можно задать вручную. У 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.

Тактирование STM32F103 (performance line) от HSE 8 МГц: SYSCLK 72 МГцHSE8 МГцPLLXTPRE ÷ 18 МГцPLL × 972 МГцSYSCLK72 МГцAHB ÷ 172 МГцHCLK, ядроAPB1 ÷ 236 МГцтаймеры 72 МГцUSB ÷ 1,548 МГцдля USB годитсяAPB2 ÷ 172 МГцтаймеры 72 МГцADC ÷ 612 МГцне больше 14 МГц
STM32F103 от кварца 8 МГц: PLL ×9 даёт 72 МГц, APB1 делится на 2 и работает на 36 МГц, но её таймеры — на 72 МГц. Снизу — ответвления: USB берёт PLL ÷ 1,5 = 48 МГц, АЦП — PCLK2 ÷ 6 = 12 МГц.

Пределы шин и генераторов у каждой линейки свои:

ЛинейкаSYSCLK, HCLKAPB1APB2HSIКварц HSEPLLДокумент
STM32F030x4/x6/x8до 48 МГцдо 48 МГц—8 МГц4–32 МГц×2…×16RM0360 Rev 5
STM32F030xC, STM32F070до 48 МГцдо 48 МГц—8 МГц4–32 МГц×2…×16RM0360 Rev 5
STM32F031, F038, F051, F058до 48 МГцдо 48 МГц—8 МГц4–32 МГц×2…×16RM0091 Rev 10
STM32F042, F048, F072, F078, F091, F098до 48 МГцдо 48 МГц—8 МГц4–32 МГц×2…×16RM0091 Rev 10
STM32F100 (value line)до 24 МГцдо 24 МГцдо 24 МГц8 МГц4–24 МГц×2…×16RM0041 Rev 6
STM32F101 (access line)до 36 МГцдо 36 МГцдо 36 МГц8 МГц4–16 МГц×2…×16RM0008 Rev 21
STM32F102 (USB access line)до 48 МГцдо 36 МГцдо 48 МГц8 МГц4–16 МГц×2…×16RM0008 Rev 21
STM32F103 (performance line)до 72 МГцдо 36 МГцдо 72 МГц8 МГц4–16 МГц×2…×16RM0008 Rev 21
STM32F105, F107 (connectivity line)до 72 МГцдо 36 МГцдо 72 МГц8 МГц3–25 МГц×4…×9, ×6,5RM0008 Rev 21
STM32F301, F318до 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0366 Rev 5
STM32F302x6/x8, F302xB/xCдо 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0365 Rev 8
STM32F302xD/xEдо 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0365 Rev 8
STM32F303x6/x8, F303xB/xC, F328, F358 (USB — у F303xB/xC)до 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0316 Rev 10
STM32F303xD/xE, F398 (USB — у F303xD/xE)до 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0316 Rev 10
STM32F334до 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0364 Rev 4
STM32F373, F378 (USB — у F373)до 72 МГцдо 36 МГцдо 72 МГц8 МГц4–32 МГц×2…×16RM0313 Rev 7
STM32F401до 84 МГцдо 42 МГцдо 84 МГц16 МГц4–26 МГц÷M, ×N, ÷P, ÷QRM0368 Rev 6
STM32F405, F407, F415, F417до 168 МГцдо 42 МГцдо 84 МГц16 МГц4–26 МГц÷M, ×N, ÷P, ÷QRM0090 Rev 22
STM32F411до 100 МГцдо 50 МГцдо 100 МГц16 МГц4–26 МГц÷M, ×N, ÷P, ÷QRM0383 Rev 4
STM32F427, F429, F437, F439до 180 МГцдо 45 МГцдо 90 МГц16 МГц4–26 МГц÷M, ×N, ÷P, ÷QRM0090 Rev 22
STM32G031, G041, G051, G061, G071, G081, G0B1, G0C1до 64 МГцдо 64 МГц—16 МГц4–48 МГц÷M, ×N, ÷RRM0444 Rev 6
STM32G030, G050, G070, G0B0до 64 МГцдо 64 МГц—16 МГц4–48 МГц÷M, ×N, ÷RRM0454 Rev 5
STM32L4: L412…L4A6до 80 МГцдо 80 МГцдо 80 МГц16 МГц4–48 МГц÷M, ×N, ÷RRM0351 Rev 11, RM0394 Rev 5
STM32L4+: L4P5…L4S9до 120 МГцдо 120 МГцдо 120 МГц16 МГц4–48 МГц÷M, ×N, ÷RRM0432 Rev 9

PLL STM32F0, F1 и F3: умножитель

У F0, F1 и F3 PLL — умножитель. Частота входа делится предделителем, затем умножается:

fSYSCLK=fвхPREDIV⋅PLLMUL.f_\text{SYSCLK} = \frac{f_\text{вх}}{\text{PREDIV}} \cdot \text{PLLMUL}.

Множитель 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.

fVCO=fвхM⋅N,fSYSCLK=fVCOP,fUSB=fVCOQ.f_\text{VCO} = \frac{f_\text{вх}}{M} \cdot N, \qquad f_\text{SYSCLK} = \frac{f_\text{VCO}}{P}, \qquad f_\text{USB} = \frac{f_\text{VCO}}{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 МГц.

Тактирование STM32F405, F407, F415, F417 от HSE 8 МГц: SYSCLK 168 МГцHSE8 МГц÷ M = 42 МГцVCO × N = 168336 МГц÷ P = 2168 МГцSYSCLK168 МГцAHB ÷ 1168 МГцHCLK, ядроAPB1 ÷ 442 МГцтаймеры 84 МГц÷ Q = 748 МГцдля USB годитсяAPB2 ÷ 284 МГцтаймеры 168 МГц
STM32F407 от кварца 8 МГц: M = 4 даёт на входе VCO 2 МГц, N = 168 — VCO 336 МГц, P = 2 — SYSCLK 168 МГц, Q = 7 — ровно 48 МГц для USB. Шины: APB1 ÷ 4 = 42 МГц, APB2 ÷ 2 = 84 МГц.

Выше 168 МГц STM32F427 и F429 работают только в режиме over-drive регулятора напряжения: его включают, когда PLL уже настроен, но ещё не выбран системной частотой. STM32F411 выше 84 МГц требует масштаба регулятора scale 1. Калькулятор добавляет эти шаги в код сам.

PLL STM32G0: делители M, N и R

У G0 похожий синтезатор, но системная частота берётся с выхода R:

fPLLRCLK=fвхM⋅NR.f_\text{PLLRCLK} = \frac{f_\text{вх}}{M} \cdot \frac{N}{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.

fPLLCLK=fвхM⋅NR.f_\text{PLLCLK} = \frac{f_\text{вх}}{M} \cdot \frac{N}{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 мкс. Калькулятор вставляет эти шаги в код.

Тактирование STM32L4: L412…L4A6 от MSI 4 МГц: SYSCLK 80 МГцMSI4 МГц÷ M = 14 МГцVCO × N = 40160 МГц÷ R = 280 МГцSYSCLK80 МГцAHB ÷ 180 МГцHCLK, ядроAPB1 ÷ 180 МГцтаймеры 80 МГцAPB2 ÷ 180 МГцтаймеры 80 МГц
STM32L476 от MSI 4 МГц, как в шаблонах STM32CubeL4: M = 1, N = 40 — VCO 160 МГц, R = 2 — SYSCLK 80 МГц; обе шины APB работают на полной частоте.

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 МГц
124–48 МГц
248–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 МГц
130–60 МГц24–48 МГц22–44 МГц20–40 МГц
260–90 МГц48–72 МГц44–66 МГц40–60 МГц
390–120 МГц72–96 МГц66–88 МГц60–80 МГц
4120–150 МГц96–120 МГц88–110 МГц80–100 МГц
5150–168 МГц120–144 МГц110–132 МГц100–120 МГц
6—144–168 МГц132–154 МГц120–140 МГц
7——154–168 МГц140–160 МГц

STM32G0x1 (RM0444) — от частоты HCLK и диапазона напряжения ядра:

Такты ожидания (LATENCY)Range 1Range 2
0до 24 МГцдо 8 МГц
124–48 МГц8–16 МГц
248–64 МГц—

STM32L4 (RM0351, таблица 11; RM0394, таблица 9) и STM32L4+ (RM0432, таблица 12) — от частоты HCLK и диапазона:

Такты ожидания (LATENCY)Range 1Range 2
0до 16 МГцдо 6 МГц
116–32 МГц6–12 МГц
232–48 МГц12–18 МГц
348–64 МГц18–26 МГц
464–80 МГц—
Такты ожидания (LATENCY)Range 1 boostRange 1Range 2
0до 20 МГцдо 20 МГцдо 8 МГц
120–40 МГц20–40 МГц8–16 МГц
240–60 МГц40–60 МГц16–26 МГц
360–80 МГц60–80 МГц—
480–100 МГц——
5100–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.

Источники

  1. 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 МГц
  2. STMicroelectronics. RM0041 Rev 6. Reference manual: STM32F100xx advanced Arm-based 32-bit MCUs — кварц 4–24 МГц, AHB и обе шины APB до 24 МГц, выход PLL 16–24 МГц, PREDIV1 ÷1…16, флеш без тактов ожидания
  3. 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 МГц
  4. 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 — такты ожидания флеш-памяти
  5. 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 МГц
  6. 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
  7. 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, такты ожидания по диапазону
  8. 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
  9. 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)
  10. 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
  11. 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 — такты ожидания
  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
  13. 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 совпадают с расчётом
  14. STMicroelectronics. STM32CubeF0, STM32CubeF1, STM32CubeF4, STM32CubeG0: шаблоны проектов (Projects/…/Templates, SystemClock_Config) — второй источник для проверки: F103 от HSI на 64 МГц, F411 на 100 МГц, F429 на 180 МГц с over-drive, F072 от HSI48 на 48 МГц, G071 на 56 МГц — делители, LATENCY и пределы совпадают с расчётом
  15. 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 и другие

Где пригодится

Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в 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>

Обновлено .

Нашли ошибку в расчёте?