STM32
Режимы пониженного энергопотребления в STM32L
Одной из распространенных разновидностей современных встроенных систем стали устройства с автономным питанием. Главным требованием к таким изделиям выступает минимизация потребления электрического тока, с целью продления срока службы батарей и следовательно, непрерывной работы конструкции. Реализация режимов пониженного энергопотребления давно стала одним из факторов, которым производители привлекают внимание к своей продукции. Не является исключением и STMicroelectronics. Наиболее интересными изделиями в этом направлении - микроконтроллеры серии STM32L.
В современных микроконтроллерах возможно два направления реализации пониженного энергопотребления. Первое из них заключается в уменьшении потребляемого тока в рабочем режиме. Достигается это с помощью проектирования и производства специализированных устройств, способных снижать производительность или отключать все неиспользуемые модули в рабочем режиме. Суть второго направления в полном или частичном останове процессора на период простоя. Оба эти способа нашли применение в микроконтроллерах STM32. Наряду с общей серией микросхем, разработчики создали и вариант с пониженным энергопотреблением, обозначаемый STM32L . В этом процессоре удалось реализовать большое количество разнообразных режимов работы, что позволяет подобрать наиболее оптимальный, с точки зрения расхода энергии в конкретном проекте.
Энергопотребление микроконтроллеров STM32L в рабочем режиме зависит от напряжения питания процессорного ядра и тактовой частоты, на которой это ядро работает. Соответственно, уменьшив до необходимого уровня частоту тактового генератора, можно ожидать и снижения уровня потребляемого тока.
Отдельно следует упомянуть об источниках тактовой частоты. Самым энергозатратным оказывается внешний тактовый резонатор (HSE). Гораздо меньше потребляют встроенный генератор на 16МГц (HSI), и программируемый генератор (MSI). Учитывая, что последний включается после сброса, а также после выхода из любого «спящего» режима, то в приложениях, критичных к потребляемому току следует использовать именно его, если конечно не требуется большое быстродействие.
В зависимости от используемой тактовой частоты выбирается и напряжение ядра микроконтроллера, что позволяет получить еще более низкие значения потребляемого тока.
Уровень напряжения |
Максимальная тактовая частота |
|||
MSI |
HSI |
HSE |
PLL |
|
1.8 В |
4.2 МГц |
16 МГц |
32 МГц от внешнего источника 24 МГЦ от кристалла |
32 МГц (PLLVCOmax =96МГц) |
1.5 В |
4.2 МГц |
16 МГц |
16 МГц |
16 МГц (PLLVCOmax =48 МГц) |
1.2 В |
4.2 МГц |
Нет |
8 МГц |
4 МГц (PLLVCOmax =24 МГц) |
Режимы пониженного энергопотребления
Наряду с возможностью управления напряжением ядра и тактовой частотой, в микроконтроллерах STM32L имеется пять режимов пониженного энергопотребления. Некоторые из этих режимов присутствуют и в микроконтроллерах других серий. Все доступные варианты с базовыми цифрами энергопотребления сведены в таблице. Следует учесть, что использование периферийных модулей в рабочем и «спящих режимах» отразиться и на значении потребляемого тока.
Режим |
I пот. |
CPU |
Flash |
RAM |
DMA/Periph |
Тактирование |
RTC |
LCD |
Sleep |
100uA/МГц (Range 1) |
Остановлен |
Вкл |
Вкл |
Вкл |
Любой источник |
Доступны |
|
82uA/МГц (Range 2) |
||||||||
65uA/МГц (Range 3) |
||||||||
Low Power RUN |
10.4uA (Flash Выкл, 32 КГц) |
Работает |
Выклили Вкл. |
Вкл |
Вкл |
MSI |
Доступны |
|
Low Power Sleep |
5.1uA (периферия выкл.) |
Остановлен |
Выкл. |
Вкл |
Вкл |
MSI |
Доступны |
|
6.1uA (1 таймер вкл.) |
||||||||
Stop c RTC |
1.3uA (1.8 В) |
Остановлен |
Выкл. |
Вкл |
Остановлен |
LSE, LSI |
Доступны |
|
1.6uA (3 В) |
||||||||
Stop |
500нА |
Остановлен |
Выкл. |
Вкл |
Остановлен |
LSE, LSI |
Выкл. |
Выкл. |
Standby c RTC |
1.3uA (3 В) |
Выкл |
Выкл. |
Выкл. |
Выкл. |
LSE, LSI |
Выкл. |
Вкл. |
1uA (1.8 В) |
||||||||
Standby |
270нА |
Выкл. |
Выкл. |
Выкл. |
Выкл. |
LSE, LSI |
Выкл. |
Выкл. |
Low Power RUN
В режиме Low Power RUN работа процессора не приостанавливается. При этом производится только снижение напряжения питания ядра и ограничение тактовой частоты. Уровень потребления в данном режиме зависит от количества задействованных периферийных устройств и тактовой частоты, на которой работает процессор.
Для входа в рабочий режим с пониженным энергопотреблением следует отключить всю неиспользуемую периферию путем настройки регистров RCC_APBxENR и
RCC_AHBENR. Частота системного тактового сигнала должна быть снижена до уровня или ниже 4.2МГц (MSI range1). Непосредственно включение режима выполняется настройкой регулятора напряжения с помощью включения битов LPRUN и LPSDSR.
Выход из рабочего режима с низким энергопотреблением производится переводом регулятора в стандартный режим и дальнейшей необходимой настройкой системы.
Sleep
В спящем режиме, прежде всего, производится остановка процессора. Все периферийные модули при этом могут продолжать работать. Время пробуждения из данного режима оказывается самым коротким, по сравнению с другими вариантами. Уровень потребления энергии зависит, как и в предыдущем режиме, от количества включенных периферийных модулей и напряжения ядра. Источник тактового сигнала при этом может быть любым. Состояние линий вывода в режиме Sleep не изменяется по сравнению с рабочим состоянием.
Вход в режим Sleep, как и во все другие «спящие» режимы, выполняется с помощью процессорных команд WFI или WFE. Команда WFI (Wait For Interrupt) останавливает процессор и настраивает его включение при возникновении прерывания. WFE (Wait for Event) делает то же самое, но выход из «спящего» режим производится по событию. В зависимости от состояния бита SLEEPONEXIT, вход в спящий режим может выполняться немедленно (SLEEPONEXIT=0), либо по достижению наименьшего значения приоритета ISR (SLEEPONEXIT=1).
Выход из спящего режим после срабатывания команды WFI выполняется по любому прерыванию, разрешенному в контроллере NVIC. При использовании команды WFE, выход производится, если разрешен запрос прерываний в периферийных устройствах, но запрещен в NVIC (При этом должен быть установлен бит SEVONPEND), либо контроллер EXTI настроен на работу с событиями. Для нормального продолжения работы, после пробуждения необходим сброс битов ожидания прерывания, как в периферийном устройстве, так и в контроллере прерываний.
Low Power Sleep
Главное отличие спящего режима с низким энергопотреблением от простого спящего режима (Sleep) заключается в источнике тактовой частоты. Фактически Low Power Sleep является частным случаем, в котором используется внутренний тактовый генератор MSI. Вход в режим выполняется, если MSI работает в диапазоне 1 (range 1), а регулятор напряжения в диапазоне 2 (Range2). В данном режиме отключается Flash-память, но ОЗУ остается в работе. В остальном режим аналогичен простому Sleep.
Stop
Останов процессора является базовым режимом ядра Cortex-M3, поэтому присутствует во всех микроконтроллерах. Он накладывает большие ограничения на работу внутренних схем, вследствие чего является наименее энергозатратным, из «спящих» режимов. Так, в данном режиме, производится остановка практически всей периферии микроконтроллера, а также любого основного тактового генератора. Вариантом режима Stop является случай, когда в работе остается модуль часов реального времени с соответствующим источником частоты. Для обеспечения минимального энергопотребления в данном режиме рекомендуется настройка внутреннего регулятора напряжения, а также отключение систем Vrefnt, BOR, PVD, ADC, DAC и встроенного датчика температуры. Состояние линий ввода вывода при переходе в режим STOP не изменяется, содержимое памяти и регистров сохраняется.
Для перевода в режим останова необходимо выполнить следующие действия:
- Установить бит SLEEPDIP в регистре SCB
- Очистить бит PDDS в регистре PWR_CR
- Очистить бит WUF в регистре PWR_CSR
- Настроить регулятор напряжения LPSDSR в регистре PWR_CR
- Настроить событие или прерывание выхода из режима STOP
- Подать команду WFI или WFE
Stadby
Режим ожидания стоит несколько особняком от других вариантов пониженного энергопотребления по причине отключения процессора и памяти. Фактически данный режим равноценен состоянию сброса. Содержимое памяти и всех регистров за исключением PWR_CSR теряется. Все порты ввода/вывода переводятся в высокоимпедансное состояние за исключением следующих линий, отвечающих за пробуждение процессора:
- вход сброса
- RTC_AF1 (PC13), если он сконфигурирован как вход для функций Wakeup (WKUP2), защиты данных (tamper), захвата времени (time-stamp), или как выход тревоги по таймеру (RTC Alarm), или тактовый выход RTC clock.
- PA0 и PE6, если они сконфигурированы в качестве входов сигнала пробуждения WKUP.
Выход из режима ожидания выполняется при поступлении сигналов сброса, внешних сигналов пробуждения (WKUP), событий часов реального времени, событий несанкционированного доступа к данным или записи временной метки.
Для перевода в режим останова необходимо выполнить следующие действия:
- Установить бит SLEEPDIP в регистре SCB
- Включить бит PDDS в регистре PWR_CR
- Очистить бит WUF в регистре PWR_CSR
- Очистить флаги источников пробуждения
- Подать команду WFI или WFE