3.1.3 Регулятор напряжения
Регулятор всегда включается после выхода устройства из режима сброса. Он работает в 3 режимах, которые зависят от режима работы контроллера.
Обычный режим. Регулятор обеспечивает полное питание для домена 1.8В (ядро, память, цифровая периферия)
Режим останова. Регулятор обеспечивает пониженное питание для домена 1.8В, сохраняются значения регистров и SRAM.
Режим ожидания. Регулятор отключен. Содержимое регистров и SRAM утеряно, кроме схемы ожидания и резервного домена.
3.3 Режимы с низким энергопотреблением
По умолчанию, после сброса работает в режиме нормального энергопотребления. Режимы пониженного энергопотребления для снижения потребления энергии контроллером, когда нет необходимости в его функционировании (например при ожидании внешнего прерывания).
Контроллер может работать в следующих режимах:
Спящий режим – такирование ядра остановлено, периферия, в том числе и ядро, работает.
Режим останова – тактирование всех устройств отключено.
Режим ожидания – отключен домен 1.8В.
Снижение энергопотребления может быть осуществлено с помощью следующих методик:
Замедление тактирования системы
Прекращение тактирования периферии на шинах APB и AHB, когда они не используются.
3.3.1 Замедление системных частот
В обычном режиме величины системных частот (SYSCLK, HCLK, PCLK1, PCLK2) могут быть программно уменьшены с помощью предделителей. Предделители могут так же использоваться для замедления периферии перед погружением в спящий режим.
3.3.2 Отключение периферийного тактирования
В режиме нормального энергопотребления, сигналы HCLK и PCLKx для периферии и внешних запоминающих устройств могут быть отключены в любой момент для сохранения питания
Вход в спящий режим осуществляется с помощью инструкций WFI (wait for interrupt) или WFE (wait for event). Есть возможность выбора механизма входа в спящий режим в зависимоти от бита SLEEPONEXIT:
Sleep-now: если бит SLEEPONEXIT сброшен, то устройство уходит в спящий режим как только была вызвана инструкция WFI или WFE.
Sleep-on-exit: если бит SLEEPONEXIT установлен, то устройство входит в спящий режим как только произойдет выход из обработчика прерывания.
В спящем режиме все пины ввода-вывода сохраняют своё состояние.
Если для входа в спящий режим была задействована инструкция WFI, то выход контроллера из спящего режима может быть спровоцирован вызовом любого прерывания от периферии.
Если для входа в спящий режим была задействована инструкция WFE, то выход контроллера из спящего режима осуществляется как только происходит какое-либо событие. Это событие может быть сгенерировано:
за счет включения прерывания в регистре управления периферией, но не в NVIC и за счет установки бита SEVONPEND в регистре управления ядром. После восстановления контроллера из WFE, бит ожидания периферийного прерывания и бит ожидания периферийного канала NVIC.
за счет конфигурирования внешнего или внутреннего EXTI в режиме событий.
Режим останова базируется на режиме глубокой спячки ядра. В этом режиме останавливаются все генераторы тактовой частоты в 1.8В домене, а так же отключаются PLL, HSI и HSE RC.
В режиме останова все пины ввода-вывода сохраняют своё состояние.
Вход может быть осущевствлен следующими способами:
Вызовом инструкций WFI или WFE пока:
Очищен бит PDDS в регистре PWR_CR
Выбран режим регулятора напряжения битом LPDS в регистре PWR_CR
Если во время перехода устройства в спящий режим происходит программирование флеш-памяти, то переход откладывается до завершения процесса программирования.
С доступом к домену APB ситуация аналогичная.
В режиме останова путем изменения соответствующих конфигурационных битов можно включить следующие возможности:
Независимый сторожевой таймер (IWDT): он может быть запущен с помощью своего регистра. Однажды запущен, он может быть остановлен только вводом контроллера в режим сброса.
Часы реального времени (RTC): с помощью бита RTCEC в своём регистре управления.
Внутренняя тактирующая RC-цепочка (LSI RC): с помощью бита LSION.
Внешний генератор на 32.768 кГц (LSE OSC): с помощью бита LSEON.
Выход из режима останова.
Если вход был инициирован с помощью WFI, то с помощью любой линии EXTI, сконфигурированной в режиме прерывания.
Если с помощью WFE, то с помощью любой линии EXTI, сконфигурированной в режиме события.
Во время выхода из режима останова HSI RC генератор выбран как основное системное тактирующее устройство.
Режим ожидания – режим с минимальным энергоптреблением. Основан на режиме глубоко сна контроллера вместе с отключенным регулятором питания. В этом режиме 1.8В домен отключен, PLL и генераторы HSI и HSE аналогично отключены. Содержимое SRAM и всех регистров (кроме резервных) утеряно.
Вызовом инструкций WFI или WFE пока:
Установлен бит PDDS в регистре PWR_CR
Сброшен бит WUF в регистре (PWR_CSR)
Также можно включить следующие возможности:
Независимый сторожевой таймер (IWDT): он может быть запущен с помощью своего регистра. Однажды запущен, он может быть остановлен только вводом контроллера в режим сброса.
Часы реального времени (RTC): с помощью бита RTCEC в своём регистре управления.
Внутренняя тактирующая RC-цепочка (LSI RC): с помощью бита LSION.
Внешний генератор на 32.768 кГц (LSE OSC): с помощью бита LSEON.
Выход из режима ожидания.
Выход может быть осуществлен с помощью:
нарастающего фронта на пине WKUP
нарастающему фронту будильника RTC
внешнего сигнала на пине NRST
По усолчанию отладочное соединение таеряется при переходе контроллера в режим останова или ожидания, так как ядро больше не получает тактирующего сигнала.
Однако с помощью битов регистра DBGMCU_CR можно включить возможность отладки контроллера в режимах с низким потреблением энергии.
3.3.6 Автовыход из режима пониженного энергопотребления
Часы реального времени могут вызывать выход из режима пониженного энергоптребления без вызова прерывания. Можно настроить RTC на поддъем контроллера из этих режимов через определенные промежутки времени. Для этого можно выбрать 2 источника тактирующего сигнала для RTC с помощью битов RTCSEL[1:0] регистра управления RTC:
Внешний кварц на 32.768 кГц (LSE OSC)
Чтобы поднять устройство из режима останова с помощью события от будильника RTC необходимо сделать следующее:
Настроить линию 17 EXTI на возрастающий фронт
Настроить RTC на генерацию будильника
3.4 Регистры управления питанием
3.4.1 Регистр управления питанием (PWR_CR)
Биты 31:9 – зарезервированы, всегда читаются как 0.
Бит 8 DBP (disable backup domain write protection) – отключение защиты от записи резервного домена.
0: Доступ к RTC и регистрам для резервного копирования отключен.
1: Доступ к RTC и регистрам для резервного копирования включен.
Биты 7:5 PLS[2:0] (PVD level selection) – Выбор порога срабатывания детектора напряжения.
Бит 4 PVDE (power voltage detector enable) – включение детектора напряжения.
Бит 3 CSBF (clear standby flag) – Очистить флаг ожидания.
Бит всегда читается как 0.
0 – не принесет результатаю.
1 – Очистка флага ожидания SBF.
Бит 2 CWUF (clear wakeup flag) – очистить флаг пробуждения.
Бит всегда читается как 0.
0 – не принесет результата.
1 – Очистка флага WUF после 2 тактов системного генератора.
Бит 1 PDDS (power down deepsleep) – бит перехода в глубокий сон с отключением питания. Работает вместе с LPDS.
0 – Вход в режим останова, когда CPU входит в режим глубокого сна. Статус регулятора зависит от бита LPDS.
1 – Вход в режим ожидания, когда CPU входит в режим глубокого сна.
Бит 0 LPDS (low-power deepsleep) – бит перехода в глубокий сон с режимом пониженного энергопотребления. Работает вместе с PDDS.
0 – Регулятор напряжения включен во время режима останова.
1 – Регулятор напряжения в режиме низкого энергопторебления во время режима останова.
3.4.2 Регистр управления/статусный регистр (PWR_CSR)
Биты 31:9 – зарезервированы, ситаются как 0.
Бит 8 EWUP (Enable WKUP pin) – назначение пина WKUP.
0 – Пин WKUP используется как GPIO. Событие на WKUP не прерывает режим ожидания устройства.
1 – Пин WKUP используется для пробуждения устройства из режима ожидания по нарастающему фронту.
Биты 7:3 – зарезервированы, читаются как 0.
Бит 2 PVDO (PVD output) – флаг статуса программируемого регулятора напряжения. Бит устанавливается и сбрасывается аппаратно.
0: VDD / VDDA выше порога срабатывания PVD
1: VDD / VDDA ниже порога срабатывания PVD
Замечание: Во время режима ожидания PVD отключен, поэтом бит PVDO читается как 0 после выхода устройства из режима ожидания и после сброса, пока не установлен бит PVDE.
Бит 1 SBF (standby flag) – бит устанавливается и сбрасывается только POR/PDR или с помощью установки бита CSBF в регистре PWR_CR
0: Устройство не в режиме ожидания
1: Устройство в режиме ожидания
Бит 0 WUF (wakeup flag) – бит устанавливается аппаратно, а сбрасывается с помощью POR/PDR или с помощью установки бита CWUF в регистре PWR_CR.
0: Пробуждающего события нет
1: Пробуждающее событие пришло с пина WKUP или от будильника RTC.
3.5 Программирование модуля управления питанием
void PWR_BackupAccessCmd (FunctionalState NewState)
Включает или отключает доступ к резервным регистрам и регистрам RTC.
NewState – состояние разрешения доступа. Может быть либо ENABLE, либо DISABLE.
void PWR_ClearFlag (uint32_t PWR_FLAG)
Очищает указанный флаг PWR.
PWR_FLAG – указывает флаг, который надо сбросить. Прнимает следующие значения:PWR_FLAG_WU (wake up flag) и PWR_FLAG_SB (standby flag)
Сбрасывает значения регистров PWR к их первоначальному значению.
void void PWR_EnterSTANDBYMode (void )
Вводит устройство в режим ожидания.
void PWR_EnterSTOPMode (uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)
Ввводит устройство в режим останова.
PWR_Regulator – устанавливает состояние регулятора при входе в режим останова. Прнимает следующие значения: PWR_Regulator_ON (регулятор включен) иPWR_Regulator_LowPower (регулятор находится в режиме пониженного энергопотребления)
PWR_STOPEntry – устанавливает тип инструкции (WFE или WFI) с которой должен быть осуществлен вход режим останова. Принимает следующие значения:PWR_STOPEntry_WFI и PPWR_STOPEntry_WFE.
FlagStatus PWR_GetFlagStatus (uint32_t PWR_FLAG)
Возвращает состояние указанного флага (установлен или нет).
PWR_FLAG – указывает флаг, состояние которого надо проверить. Принимает следующие значения: PWR_FLAG_WU (wake up flag), PWR_FLAG_SB (standby flag) иPWR_FLAG_PVDO (PVD Output)
Состояние флага. Варианты: SET или RESET
void PWR_PVDCmd (FunctionalState NewState)
Влючает или отключает детектор напряжения.
NewState – статус детектора напряжения. Принимает следующие значения: ENABLE,DISABLE (standby flag) и PWR_FLAG_PVDO (PVD Output)
void PWR_PVDLevelConfig (uint32_t PWR_PVDLevel)
Устанавливает порог срабатывания детектора напряжения.
PWR_PVDLevel – вольтаж порога. Принимает следующие значения: отPWR_PVDLevel_2V2 (2.2 вольта) до PWR_PVDLevel_2V9 (2.9 вольта) с шагом 0.1 вольт.
void PWR_WakeUpPinCmd (FunctionalState NewState)
Устанавливает возможность пробуждения контроллера по сигналу на пробуждающем пине.
NewState – состояние возможности пробуждения. Принимает следующие значения:ENABLE и DISABLE.