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

Регистры PWR STM32L0

Регистры PWR STM32L0x1: диапазон напряжения ядра, выбор между Stop и Standby, режим стабилизатора, Low-power run, ultra-low-power, детектор напряжения PVD, выводы пробуждения и флаги состояния.

Напряжение ядра STM32L0 задаёт поле VOS: диапазон 1 (1,8 В) — до 32 МГц, диапазон 2 (1,5 В) — до 16 МГц, диапазон 3 (1,2 В) — до 4,2 МГц. После смены диапазона дождитесь сброса флага VOSF. Повышать частоту можно только после повышения напряжения (RM0377, раздел 6.4).

Глубокий сон Cortex-M0+ (SLEEPDEEP) превращается в Stop или Standby по биту PDDS; стабилизатор в Stop переводят в экономичный режим битами LPSDSR и LPDS, а бит ULP выключает VREFINT в режимах пониженного потребления. Бит DBP открывает запись в RTC и RCC_CSR.

ЭкземплярБазовый адресЕсть у
PWR0x4000 7000всех

Регистры блока

РегистрСмещениеНазначениеПосле сброса
PWR_CR0x00Режимы пониженного потребления, диапазон напряжения ядра и PVD0x0000 1000 (сбрасывается при выходе из режима Standby)
PWR_CSR0x04Флаги питания и выводы пробуждения WKUP0x0000 0008 (не сбрасывается при выходе из режима Standby)

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00001000

0000 0000 0000 0000 0001 0000 0000 0000

PWR->CR = 0x00001000;

PWR_CR — режимы пониженного потребления, диапазон напряжения ядра и PVD

Смещение 0x00, адрес 0x4000 7000, 32 бит, после сброса 0x0000 1000 (сбрасывается при выходе из режима Standby). В коде: PWR->CR.

31302928272625242322212019181716
—LPDS
1514131211109876543210
—LPRUNDSEEKOFFVOSFWUULPDBPPLSPVDECSBFCWUFPDDSLPSDSR
  • LPDS (бит 16) — Стабилизатор в режиме пониженного потребления в Stop (при LPSDSR = 1) (только у STM32L011, STM32L021).
  • LPRUN (бит 14) — Режим Low-power run: стабилизатор в режиме пониженного потребления (вместе с LPSDSR).
  • DSEEKOFF (бит 13) — Память NVM остаётся выключенной после выхода из Stop (если RUN_PD = 1).
  • VOS (биты 12:11) — Диапазон напряжения ядра: 1,8 В, 1,5 В или 1,2 В — задаёт наибольшую частоту.
    VOSЗначение
    01Диапазон 1: 1,8 В, до 32 МГц (с тактом ожидания)
    10Диапазон 2: 1,5 В, до 16 МГц
    11Диапазон 3: 1,2 В, до 4,2 МГц
  • FWU (бит 10) — Быстрое пробуждение: не ждать готовности VREFINT при выходе из режимов пониженного потребления.
  • ULP (бит 9) — Режим ultra-low-power: VREFINT выключен в режимах пониженного потребления.
  • DBP (бит 8) — Снятие защиты записи RTC, резервных регистров и RCC_CSR.
  • PLS (биты 7:5) — Порог детектора напряжения PVD.
    PLSЗначениеМакрос CMSIS
    0001,9 ВPWR_CR_PLS_LEV0
    0012,1 ВPWR_CR_PLS_LEV1
    0102,3 ВPWR_CR_PLS_LEV2
    0112,5 ВPWR_CR_PLS_LEV3
    1002,7 ВPWR_CR_PLS_LEV4
    1012,9 ВPWR_CR_PLS_LEV5
    1103,1 ВPWR_CR_PLS_LEV6
    111Внешний вход PVD_IN (сравнивается с VREFINT)PWR_CR_PLS_LEV7
  • PVDE (бит 4) — Включение детектора напряжения PVD.
  • CSBF (бит 3) — Запись 1 сбрасывает флаг SBF.
  • CWUF (бит 2) — Запись 1 сбрасывает флаг WUF.
  • PDDS (бит 1) — Режим глубокого сна: 0 — Stop, 1 — Standby.
  • LPSDSR (бит 0) — Стабилизатор в режиме пониженного потребления в Sleep, Stop и Low-power run.

PWR_CSR — флаги питания и выводы пробуждения WKUP

Смещение 0x04, адрес 0x4000 7004, 32 бит, после сброса 0x0000 0008 (не сбрасывается при выходе из режима Standby). В коде: PWR->CSR.

31302928272625242322212019181716
—
1514131211109876543210
—EWUP3EWUP2EWUP1—REGLPFVOSFVREFINTRDYFPVDOSBFWUF
  • EWUP3 (бит 10) — Вывод WKUP3 пробуждает из Standby (вывод переходит во вход с подтяжкой вниз) (только у STM32L011, STM32L021, STM32L031, STM32L041, STM32L071, STM32L081).
  • EWUP2 (бит 9) — Вывод WKUP2 пробуждает из Standby (вывод переходит во вход с подтяжкой вниз) (только у STM32L031, STM32L041, STM32L051, STM32L071, STM32L081).
  • EWUP1 (бит 8) — Вывод WKUP1 пробуждает из Standby (вывод переходит во вход с подтяжкой вниз).
  • REGLPF (бит 5) — Стабилизатор в режиме пониженного потребления (только чтение).
  • VOSF (бит 4) — Напряжение ядра ещё устанавливается после смены VOS (только чтение).
  • VREFINTRDYF (бит 3) — Опорное напряжение VREFINT готово (только чтение).
  • PVDO (бит 2) — Выход PVD: 1 — VDD ниже порога PLS (только чтение).
  • SBF (бит 1) — Микроконтроллер побывал в режиме Standby.
  • WUF (бит 0) — Флаг пробуждения: событие на выводе WKUP или от RTC.

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

Как войти в Stop с минимальным потреблением на STM32L0?

Установите в PWR_CR биты ULP (и FWU для быстрого пробуждения) и LPSDSR, PDDS = 0, в SCB->SCR — SLEEPDEEP, сбросьте флаг WUF записью CWUF и выполните __WFI(). После пробуждения SYSCLK — MSI или HSI16 по биту STOPWUCK регистра RCC_CFGR.

Почему после записи VOS микроконтроллер зависает?

Диапазон менялся при слишком высокой частоте или без ожидания VOSF. Порядок: при понижении частоты — сначала частота и такты ожидания, потом VOS; при повышении — VOS, ожидание VOSF, такты ожидания и только потом частота.

Источники

  1. STMicroelectronics. RM0377: Reference manual (Rev 10) — раздел 6.4: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-l0 v1.9.4: заголовки CMSIS stm32l011xx.h, stm32l021xx.h, stm32l031xx.h, stm32l041xx.h, stm32l051xx.h, stm32l071xx.h, stm32l081xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32L0

Калькуляторы и статьи