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

Режим over-drive (STM32F7)

STM32F746 работает на 216 МГц, но только в режиме over-drive внутреннего стабилизатора. Без него предел — 180 МГц, и включать режим нужно в определённой последовательности, до переключения на PLL.

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

Режим over-drive — режим внутреннего стабилизатора STM32F7, в котором ядро и цифровая логика работают на более высокой частоте, чем в нормальном режиме при том же уровне масштабирования напряжения (RM0385, разд. 4.1.4). Для STM32F74x/F75x это разница между 180 и 216 МГц.

Предельная частота HCLK (RM0385, разд. 3.3.2)

VOS[1:0]УровеньНормальный режимС over-drive
0x01scale 3144 МГц—
0x10scale 2168 МГц180 МГц
0x11scale 1180 МГц216 МГц

Over-drive недоступен при VDD 1,8–2,1 В и при отключённом внутреннем стабилизаторе.

Последовательность включения

  1. Выбрать HSI или HSE системным тактом.
  2. Настроить PLL в RCC_PLLCFGR и включить его битом PLLON.
  3. Установить ODEN в PWR_CR1 и дождаться флага ODRDY в PWR_CSR1.
  4. Установить ODSWEN и дождаться ODSWRDY: в момент переключения система стоит, но PLL продолжает захват.
  5. Задать такты ожидания флеш-памяти и делители AHB и APB.
  6. Дождаться захвата PLL и переключить системный такт на него.

Пока режим включается, периферийные такты включать нельзя — такты I²S, LCD-TFT, SAI и USB 48 МГц разрешают после. RM0385 советует включать over-drive во время захвата PLL, чтобы не терять время.

Stop и выход из режима

Вход в режим Stop выключает over-drive вместе с PLL, и после пробуждения последовательность повторяют. Выключают режим одновременным сбросом ODEN и ODSWEN или сначала ODSWEN, затем ODEN, при системном такте HSI или HSE. Рассчитать PLL и частоты шин помогает калькулятор тактирования STM32.

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

Почему STM32F7 не запускается на 216 МГц?

Чаще всего не включён режим over-drive: без него предел HCLK при scale 1 — 180 МГц. Кроме того, over-drive недоступен при VDD 1,8–2,1 В, а после выхода из Stop он выключен вместе с PLL и его нужно включать заново. Ещё одна причина — не увеличено число тактов ожидания флеш-памяти до переключения на PLL.

В каком порядке включать over-drive?

По RM0385: системный такт — HSI или HSE; настроить PLL и включить его; установить ODEN и дождаться ODRDY; установить ODSWEN и дождаться ODSWRDY; выбрать такты ожидания флеш-памяти и делители AHB и APB; дождаться захвата PLL и переключиться на него. Периферийные такты, не зависящие от системного PLL, включают уже после этого.

Что такое under-drive?

Режим стабилизатора в Stop: домен 1,2 В сохраняет содержимое регистров и SRAM при уменьшенных токах утечки. Over-drive относится к режиму Run и поднимает частоту, under-drive — к Stop и снижает потребление. Оба недоступны, если внутренний стабилизатор отключён и ядро питается снаружи.

Источники

  1. STMicroelectronics. RM0385: STM32F75xxx and STM32F74xxx advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 3.3.2: VOS = 0x01 — HCLK до 144 МГц; 0x10 — до 168 МГц, с over-drive до 180 МГц; 0x11 — до 180 МГц, с over-drive до 216 МГц; over-drive недоступен при VDD 1,8–2,1 В; разд. 4.1.4: в Run два режима — нормальный и over-drive, в котором ядро работает на большей частоте, чем в нормальном, для scale 1 и scale 2; табл. 12 — over-drive только с основным стабилизатором в Run и Sleep, under-drive — в Stop; over-drive и under-drive недоступны при отключённом стабилизаторе; вход: выбрать HSI или HSE системным тактом, настроить RCC_PLLCFGR и включить PLLON, установить ODEN в PWR_CR1 и дождаться ODRDY в PWR_CSR1, установить ODSW и дождаться ODSWRDY, выбрать задержку флеш-памяти и делители AHB/APB, дождаться захвата PLL и переключиться на него; во время переключения система стоит, но PLL продолжает захват; во время включения over-drive периферийные такты не включать; вход в Stop выключает over-drive и PLL; выход — сбросом ODEN и ODSW одновременно или сначала ODSW, затем ODEN
  2. STMicroelectronics. CMSIS device header stm32f746xx.h, cmsis-device-f7 v1.2.10 (GitHub, Apache-2.0) — PWR_CR1_ODEN — Over Drive enable, PWR_CR1_ODSWEN — Over Drive switch enabled, PWR_CR1_VOS — VOS[1:0]; флаги PWR_CSR1_ODRDY и PWR_CSR1_ODSWRDY

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