Режимы работы: различия между версиями

Материал из MIK32 микроконтроллер
Нет описания правки
Нет описания правки
 
(не показано 16 промежуточных версий этого же участника)
Строка 1: Строка 1:
== Описание режимов ==
=== Активный ===
{| class="wikitable"
|+
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Процессор работает в нормальном режиме.
|ОЗУ, EEPROM, SPIFI работают в нормальном режиме.
|Периферия работает в нормальном режиме.
|Системный домен включен, батарейный домен включен.
|От внешнего осциллятора с частотой до 32 МГц OSC32M;
От встроенного осциллятора с частотой до 32 МГц HSI32M.
|Режим после сброса/подачи питания.
| -
|}
Режим «Активный» подразумевает режим с максимальной производительностью: максимальная системная частота, минимальные делители, тактирование всех задействованных устройств включено.
=== Пониженного энергопотребления ===
{| class="wikitable"
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Процессор работает в нормальном режиме.
|ОЗУ, EEPROM, SPIFI работают в нормальном режиме.
Рекомендуется отключать тактирование неиспользуемых модулей памяти записью в регистры:
PM.CLK_AHB_CLEAR
|Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:
PM.CLK_AHB_CLEAR;
PM.CLK_APB_M_CLEAR;
PM.CLK_APB_P_CLEAR.
|Системный домен включен, батарейный домен включен.
|От внешнего часового осциллятора;
от встроенного часового осциллятора;
от внешнего осциллятора с частотой до 32 МГц с делителем системной шины.
|Программно, переключившись на нужный источник тактирования или выставив необходимый делитель.
| Программно, переключившись на нужный источник тактирования или выставив необходимый делитель.
|}
Режим «Пониженного потребления» предполагает уменьшение производительности и потребления за счет снижения рабочей частоты, временное отключение тактирования устройств, которые временно не используются. Режим «Активный» и режим «Пониженного потребления» достаточно условны, так как отличаются выбранными источником тактирования, установленными делителями частот, отключенным тактированием тех или иных устройств, что определяется конкретной задачей.
{{#spoiler:show=Показать пример входа в режим пониженного энергопотребления|hide=Скрыть пример входа в режим пониженного энергопотребления|
<syntaxhighlight lang="c++" line="1">
void lowEnergyMode()
{
    // Шина APB_P (периферия)
    uint32_t clk_apb_p_mask = 0;
    // Шина APB_M (модули)
    uint32_t clk_apb_m_mask = 0
                              | PM_CLOCK_APB_M_PAD_CONFIG_M  // контроллер выводов (вкл по умолч)
                              | PM_CLOCK_APB_M_WU_M        // блок  батар. домена WakeUp (вкл по умолч)
                              | PM_CLOCK_APB_M_PM_M        // блок упр. питанием PowerMonitor (вкл по умолч)
                              ;     
    // Шина AHB (главная)
    uint32_t clk_ahb_mask = 0
                            | PM_CLOCK_AHB_CPU_M      // Ядро (вкл по умолч)
                            | PM_CLOCK_AHB_EEPROM_M // EEPROM (вкл по умолч)
                            | PM_CLOCK_AHB_RAM_M    // ОЗУ (вкл по умолч)
                            // | PM_CLOCK_AHB_SPIFI_M  // SPI flash (вкл по умолч)
                            | PM_CLOCK_AHB_TCB_M    // TCB (вкл по умолчанию)
                            // | PM_CLOCK_AHB_DMA_M    // DMA
                            ; 
    // Включить тактирование выбранных блоков и выключить у остальных
    PM->CLK_APB_M_SET = clk_apb_m_mask;
    PM->CLK_APB_M_CLEAR = ~clk_apb_m_mask;
    PM->CLK_APB_P_SET = clk_apb_p_mask;
    PM->CLK_APB_P_CLEAR = ~clk_apb_p_mask;
    PM->CLK_AHB_SET = clk_ahb_mask;
    PM->CLK_AHB_CLEAR = ~clk_ahb_mask;
    /* Вход в режим пониженного энергопотребления переключением на источник LSI32K. */
    PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_LSI32K_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K
    for (volatile int i = 0; i < 100; i++)
        ;
    /* Отключение неиспользуемых источников тактирования */
    /* Источники 32МГц */
    /* Внутренний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M
    /* Внешний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M
    /* Источники 32кГц */
    /* Внутренний  */
    // WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K
    /* Внешний */
    WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K
    /* Делители частоты */
    PM->DIV_AHB = 255;
    PM->DIV_APB_M = 255;
    PM->DIV_APB_P = 255;
}
</syntaxhighlight>
}}
=== Спящий ===
{| class="wikitable"
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Ядро в состоянии sleep
|Тактирование Ядра, ОЗУ, EEPROM, SPIFI может быть выключено при записи в PM.SLEEP_MODE
|Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:
PM.CLK_AHB_CLEAR;
PM.CLK_APB_M_CLEAR;
PM.CLK_APB_P_CLEAR.
|Системный домен включен,
батарейный домен включен.
|От внешнего осциллятора с частотой до 32 МГц
От встроенного осциллятора с частотой до 32 МГц
|Записью в регистр PM.SLEEP_MODE.
| По прерыванию.
|}
«Спящий» режим подразумевает автоматическое отключение частоты ядра, некоторых модулей памяти. Переход осуществляется записью в регистр PM. SLEEP_MODE. При записи отключается тактирование ядра и в зависимости от записываемого значения отключается тактирование следующих модулей:
* SLEEP_MODE[0] = 1 – отключение тактирования ядра;
* SLEEP_MODE[1] = 1 – отключение тактирования EEPROM;
* SLEEP_MODE[2] = 1 – отключение тактирования ОЗУ;
* SLEEP_MODE[3] = 1 – отключение тактирования контроллера SPIFI.
Ниже представлен пример входа в спящий режим, в котором включено тактирование GPIO0, GPIO_IRQ и EPIC. Выход из режима осуществляется, например, по внешнему прерыванию от вывода на порте GPIO0. {{#spoiler:show=Показать пример входа в спящий режим|hide=Скрыть пример входа в спящий режим|
<syntaxhighlight lang="c++" line="1">
void sleepMode()
{
    // Шина APB_P (периферия)
    uint32_t clk_apb_p_mask = 0
                            | PM_CLOCK_APB_P_GPIO_0_M   
                            | PM_CLOCK_APB_P_GPIO_IRQ_M
                            ;
    // Шина APB_M (модули)
    uint32_t clk_apb_m_mask = 0
                              | PM_CLOCK_APB_M_PAD_CONFIG_M  // контроллер выводов (вкл по умолч)
                              | PM_CLOCK_APB_M_WU_M        // блок  батар. домена WakeUp (вкл по умолч)
                              | PM_CLOCK_APB_M_PM_M        // блок упр. питанием PowerMonitor (вкл по умолч)
                              | PM_CLOCK_APB_M_EPIC_M
                              ;     
    // Шина AHB (главная)
    uint32_t clk_ahb_mask = 0
                            | PM_CLOCK_AHB_CPU_M      // Ядро (вкл по умолч)
                            | PM_CLOCK_AHB_EEPROM_M // EEPROM (вкл по умолч)
                            | PM_CLOCK_AHB_RAM_M    // ОЗУ (вкл по умолч)
                            // | PM_CLOCK_AHB_SPIFI_M  // SPI flash (вкл по умолч)
                            | PM_CLOCK_AHB_TCB_M    // TCB (вкл по умолчанию)
                            // | PM_CLOCK_AHB_DMA_M    // DMA
                            ; 
    // Включить тактирование выбранных блоков и выключить у остальных
    PM->CLK_APB_M_SET = clk_apb_m_mask;
    PM->CLK_APB_M_CLEAR = ~clk_apb_m_mask;
    PM->CLK_APB_P_SET = clk_apb_p_mask;
    PM->CLK_APB_P_CLEAR = ~clk_apb_p_mask;
    PM->CLK_AHB_SET = clk_ahb_mask;
    PM->CLK_AHB_CLEAR = ~clk_ahb_mask;
    PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_HSI32M_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K
    for (volatile int i = 0; i < 100; i++)
        ;
    /* Отключение неиспользуемых источников тактирования */
    /* Источники 32МГц */
    /* Внутренний */
    // WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M
    /* Внешний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M
    /* Источники 32кГц */
    /* Внутренний  */
    WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K
    /* Внешний */
    WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K
    /* Делители частоты */
    PM->DIV_AHB = 255;
    PM->DIV_APB_M = 255;
    PM->DIV_APB_P = 255;
    /* Вход в спящий режим */
    /* Отключить тактирование SPIFI[3], RAM[2], ROM[1], ядро[0] */
    PM->SLEEP_MODE = 0b1110;
}
</syntaxhighlight>
}}
===Стоп===
{| class="wikitable"
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Ядро в состоянии sleep.
|Тактирование ОЗУ, EEPROM, SPIFI выключено.
|Тактированием периферия выключено
|Системный домен включен, батарейный домен включен.
|Тактирование системы выключено.
|Запись в регистр WAKEUP.STOP
|RTC/выводу EXT_WU.
|}
В режиме “Стоп” автоматически отключается тактирование всех устройств за исключением батарейного домена. Переход осуществляется записью в регистр WAKEUP.STOP.  Выход из режима событию на выводе EXT_WU, будильника, или по сбросу.
Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU.
Ниже приведен пример кода входа в режим стоп. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1".
{{#spoiler:show=Показать пример входа в режим стоп|hide=Скрыть пример входа в режим стоп|
<syntaxhighlight lang="c++" line="1">
void stopMode()
{
    /* Разрешить включение системного домена (из режима СТОП) при активном уровне внешнего вывода ext_wu */
    // WU->SYS_LEVEL &= ~WU_SYS_LEVEL_EXT_LINE_M; // Активный уровень EXT_WU лог. "0"
    WU->SYS_MASK |= WU_MASK_WAKEUP_EXT_M;
    for (volatile int i = 0; i < 100; i++)
        ;
    PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_LSI32K_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K
    for (volatile int i = 0; i < 100; i++)
        ;
    /* Отключение неиспользуемых источников тактирования */
    /* Источники 32МГц */
    /* Внутренний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M
    /* Внешний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M
    /* Источники 32кГц */
    /* Внутренний  */
    // WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K
    /* Внешний */
    WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K
    /* Делители частоты */
    PM->DIV_AHB = 255;
    PM->DIV_APB_M = 255;
    PM->DIV_APB_P = 255;
    /* Вход в режим стоп */
    WU->STOP = 1;
}
</syntaxhighlight>
}}
===Ожидание===
{| class="wikitable"
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Питание выключено
|Питание выключено
|Питание выключено
|Системный домен выключен, батарейный домен включен
|Тактирование системы выключено.
|Запись в регистр WAKEUP. SYS_POWEROFF.
|По сбросу/RTC/ выводу EXT_WU
|}
Во всех режимах, кроме ожидания питание всех доменов включено. В режиме ожидания остается включенным только батарейный домен. Системный LDO выключен. Переход осуществляется записью в регистр SYS_POWEROFF. Выход из режима событию на выводе EXT_WU, будильника, или по сбросу.
Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU.
Ниже приведен пример кода входа в режим ожидания. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1".
{{#spoiler:show=Показать пример входа в режим ожидания|hide=Скрыть пример входа в режим ожидания|
<syntaxhighlight lang="c++" line="1">
void standbyMode()
{
    /* Разрешить включение системного домена при активном уровне внешнего вывода ext_wu */
    // WU->SYS_LEVEL &= ~WU_SYS_LEVEL_EXT_LINE_M; // Активный уровень EXT_WU лог. "0"
    WU->SYS_MASK |= WU_MASK_WAKEUP_EXT_M;
    for (volatile int i = 0; i < 100; i++)
        ;
    PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_LSI32K_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K
    for (volatile int i = 0; i < 100; i++)
        ;
    /* Отключение неиспользуемых источников тактирования */
    /* Источники 32МГц */
    /* Внутренний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M
    /* Внешний */
    WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M


    /* Источники 32кГц */
    /* Внутренний  */
    // WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K
    /* Внешний */
    WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K
   
    /* Делители частоты */
    PM->DIV_AHB = 255;
    PM->DIV_APB_M = 255;
    PM->DIV_APB_P = 255;
    /* Вход в режим ожидания */
    WU->SYS_POWEROFF = 1;
}
</syntaxhighlight>
}}
==Потребление в различных режимах работы ==
{| class="wikitable"
{| class="wikitable"
|+Потребление в различных режимах
!Режим работы
!Режим работы
!Условия
!Условия
Строка 16: Строка 346:


Делитель APB_P = 0.
Делитель APB_P = 0.
|OSC32M
|OSC32M  
|F<sub>CPU</sub> = 32 МГц
|F<sub>CPU</sub> = 32 МГц  
|12,54
|12,50÷15,00
|мА
|мА
|-
|-
Строка 32: Строка 362:
|LSI32K
|LSI32K
|F<sub>CPU</sub> = 125 кГц
|F<sub>CPU</sub> = 125 кГц
|1,50
| 1,50÷1,80
|мА
|мА
|-
|-
Строка 48: Строка 378:
|HSI32M
|HSI32M
| rowspan="2" |F<sub>CPU</sub> = 125 кГц
| rowspan="2" |F<sub>CPU</sub> = 125 кГц
|3,26
|3,20÷3,84
|мА
|мА
|-
|-
|OCS32M
| OCS32M
|3,25
|3,20÷3,84
|мА
|мА  
|-
|-
|LSI32K
| LSI32K
|F<sub>CPU</sub> = 125 Гц
|F<sub>CPU</sub> = 125 Гц
|1,50
|1,50÷1,80
|мА
|мА
|-
|-
! rowspan="2" |Стоп
! rowspan="2" |Стоп  
|Источники HSI32M, OSC32K, LSI32K выключены;
|Источники HSI32M, OSC32K, LSI32K выключены;
Делитель AHB = 255;
Делитель AHB = 255;
Строка 72: Строка 402:
|F<sub>CPU</sub> = 125 кГц
|F<sub>CPU</sub> = 125 кГц
Ядро в состоянии sleep
Ядро в состоянии sleep
|2,03
|2,00÷2,40
|мА
|мА
|-
|-
Строка 86: Строка 416:
|F<sub>CPU</sub> = 125 Гц
|F<sub>CPU</sub> = 125 Гц
Ядро в состоянии sleep
Ядро в состоянии sleep
|0,78
|0,70÷0,84
|мА
|мА
|-
|-
Строка 99: Строка 429:
Делитель APB_P = 255
Делитель APB_P = 255
|LSI32K
|LSI32K
|F<sub>CPU</sub> = 125 Гц
| F<sub>CPU</sub> = 125 Гц
Питание ядра выключено
Питание ядра выключено
|0,57
|0,50÷0,60
|мА
|мА
|-
|-
Строка 115: Строка 445:
|F<sub>CPU</sub> = 125 Гц
|F<sub>CPU</sub> = 125 Гц
Питание ядра выключено
Питание ядра выключено
|0,17
|0,17÷0,20
|мА
|мА
|-
|-
| colspan="6" |Примечание: В главном цикле инкрементируется переменная, программа выполняется из EEPROM.
| colspan="6" |Примечание: В главном цикле инкрементируется переменная, программа выполняется из EEPROM.
|}
|}
== Описание режимов ==
=== Активный ===
{| class="wikitable"
|+
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Процессор работает в нормальном режиме
|ОЗУ, EEPROM, SPIFI работают в нормальном режиме
|Периферия работает в нормальном режиме.
|Системный домен включен;
батарейный домен включен
|От внешнего осциллятора с частотой до 32 МГц OSC32M;
От встроенного осциллятора с частотой до 32 МГц HSI32M.
|Режим после сброса/подачи питания
| -
|}
Режим «Активный» подразумевает режим с максимальной производительностью: максимальная системная частота, минимальные делители, тактирование всех задействованных устройств включено.
=== Пониженного энергопотребления ===
{| class="wikitable"
!Состояние процессора
!Состояние памяти
!Состояние периферии
!Состояние системного и батарейного домена
!Тактирование
!Вход в режим
!Выход из режима
|-
|Процессор работает в нормальном режиме
|ОЗУ, EEPROM, SPIFI работают в нормальном режиме.
Рекомендуется отключать тактирование неиспользуемых модулей памяти записью в регистры:
PM.CLK_AHB_CLEAR
|Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:
PM.CLK_AHB_CLEAR
PM.CLK_APB_M_CLEAR
PM.CLK_APB_P_CLEAR
|Системный домен включен,
батарейный домен включен
|От внешнего часового осциллятора
от встроенного часового осциллятора
От внешнего осциллятора с частотой до 32 МГц с делителем системной шины
|Программно, переключившись на нужный источник тактирования или выставив необходимый делитель
| Программно, переключившись на нужный источник тактирования или выставив необходимый делитель
|}
Пример

Текущая версия от 11:18, 30 июля 2024

Описание режимов

Активный

Состояние процессора Состояние памяти Состояние периферии Состояние системного и батарейного домена Тактирование Вход в режим Выход из режима
Процессор работает в нормальном режиме. ОЗУ, EEPROM, SPIFI работают в нормальном режиме. Периферия работает в нормальном режиме. Системный домен включен, батарейный домен включен. От внешнего осциллятора с частотой до 32 МГц OSC32M;

От встроенного осциллятора с частотой до 32 МГц HSI32M.

Режим после сброса/подачи питания. -

Режим «Активный» подразумевает режим с максимальной производительностью: максимальная системная частота, минимальные делители, тактирование всех задействованных устройств включено.

Пониженного энергопотребления

Состояние процессора Состояние памяти Состояние периферии Состояние системного и батарейного домена Тактирование Вход в режим Выход из режима
Процессор работает в нормальном режиме. ОЗУ, EEPROM, SPIFI работают в нормальном режиме.

Рекомендуется отключать тактирование неиспользуемых модулей памяти записью в регистры:

PM.CLK_AHB_CLEAR

Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:

PM.CLK_AHB_CLEAR;

PM.CLK_APB_M_CLEAR;

PM.CLK_APB_P_CLEAR.

Системный домен включен, батарейный домен включен. От внешнего часового осциллятора;

от встроенного часового осциллятора;


от внешнего осциллятора с частотой до 32 МГц с делителем системной шины.

Программно, переключившись на нужный источник тактирования или выставив необходимый делитель. Программно, переключившись на нужный источник тактирования или выставив необходимый делитель.

Режим «Пониженного потребления» предполагает уменьшение производительности и потребления за счет снижения рабочей частоты, временное отключение тактирования устройств, которые временно не используются. Режим «Активный» и режим «Пониженного потребления» достаточно условны, так как отличаются выбранными источником тактирования, установленными делителями частот, отключенным тактированием тех или иных устройств, что определяется конкретной задачей.

Показать пример входа в режим пониженного энергопотребления

Спящий

Состояние процессора Состояние памяти Состояние периферии Состояние системного и батарейного домена Тактирование Вход в режим Выход из режима
Ядро в состоянии sleep Тактирование Ядра, ОЗУ, EEPROM, SPIFI может быть выключено при записи в PM.SLEEP_MODE Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:

PM.CLK_AHB_CLEAR;

PM.CLK_APB_M_CLEAR;

PM.CLK_APB_P_CLEAR.

Системный домен включен,

батарейный домен включен.

От внешнего осциллятора с частотой до 32 МГц

От встроенного осциллятора с частотой до 32 МГц

Записью в регистр PM.SLEEP_MODE. По прерыванию.

«Спящий» режим подразумевает автоматическое отключение частоты ядра, некоторых модулей памяти. Переход осуществляется записью в регистр PM. SLEEP_MODE. При записи отключается тактирование ядра и в зависимости от записываемого значения отключается тактирование следующих модулей:

  • SLEEP_MODE[0] = 1 – отключение тактирования ядра;
  • SLEEP_MODE[1] = 1 – отключение тактирования EEPROM;
  • SLEEP_MODE[2] = 1 – отключение тактирования ОЗУ;
  • SLEEP_MODE[3] = 1 – отключение тактирования контроллера SPIFI.

Ниже представлен пример входа в спящий режим, в котором включено тактирование GPIO0, GPIO_IRQ и EPIC. Выход из режима осуществляется, например, по внешнему прерыванию от вывода на порте GPIO0.

Показать пример входа в спящий режим

Стоп

Состояние процессора Состояние памяти Состояние периферии Состояние системного и батарейного домена Тактирование Вход в режим Выход из режима
Ядро в состоянии sleep. Тактирование ОЗУ, EEPROM, SPIFI выключено. Тактированием периферия выключено Системный домен включен, батарейный домен включен. Тактирование системы выключено. Запись в регистр WAKEUP.STOP RTC/выводу EXT_WU.

В режиме “Стоп” автоматически отключается тактирование всех устройств за исключением батарейного домена. Переход осуществляется записью в регистр WAKEUP.STOP.  Выход из режима событию на выводе EXT_WU, будильника, или по сбросу.

Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU.

Ниже приведен пример кода входа в режим стоп. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1".

Показать пример входа в режим стоп

Ожидание

Состояние процессора Состояние памяти Состояние периферии Состояние системного и батарейного домена Тактирование Вход в режим Выход из режима
Питание выключено Питание выключено Питание выключено Системный домен выключен, батарейный домен включен Тактирование системы выключено. Запись в регистр WAKEUP. SYS_POWEROFF. По сбросу/RTC/ выводу EXT_WU

Во всех режимах, кроме ожидания питание всех доменов включено. В режиме ожидания остается включенным только батарейный домен. Системный LDO выключен. Переход осуществляется записью в регистр SYS_POWEROFF. Выход из режима событию на выводе EXT_WU, будильника, или по сбросу.

Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU.

Ниже приведен пример кода входа в режим ожидания. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1".

Показать пример входа в режим ожидания

Потребление в различных режимах работы

Режим работы Условия Источник тактирования системы Частота ядра Потребление Единицы
Активный Тактирование периферий по умолчанию;

Делитель AHB = 0;

Делитель APB_M = 0;

Делитель APB_P = 0.

OSC32M FCPU = 32 МГц 12,50÷15,00 мА
Пониженного энергопотребления Тактирование включено только у WU, PM, CPU, EEPROM, RAM, TCB;

Источники OSC32M, OSC32K, HSI32M выключены;

Делитель AHB = 255;

Делитель APB_M = 255;

Делитель APB_P = 255.

LSI32K FCPU = 125 кГц 1,50÷1,80 мА
Спящий Тактирование RAM, EEPROM, SPIFI выключено записью в PM.SLEEP_MODE = 0b1110;

Тактирование включено только у WU, PM, CPU, TCB;

Источники OSC32M, OSC32K, OSC32K выключены;

Делитель AHB = 255;

Делитель APB_M = 255;

Делитель APB_P = 255.

HSI32M FCPU = 125 кГц 3,20÷3,84 мА
OCS32M 3,20÷3,84 мА
LSI32K FCPU = 125 Гц 1,50÷1,80 мА
Стоп Источники HSI32M, OSC32K, LSI32K выключены;

Делитель AHB = 255;

Делитель APB_M = 255;

Делитель APB_P = 255;

Загрузка из EEPROM.

OCS32M FCPU = 125 кГц

Ядро в состоянии sleep

2,00÷2,40 мА
Источники OSC32M, HSI32M, OSC32K выключены;

Делитель AHB = 255;

Делитель APB_M = 255;

Делитель APB_P = 255;

Загрузка из EEPROM.

LSI32K FCPU = 125 Гц

Ядро в состоянии sleep

0,70÷0,84 мА
Ожидание Источники HSI32M, OSC32K выключены;

OSC32M включен;

Делитель AHB = 255;

Делитель APB_M = 255;

Делитель APB_P = 255

LSI32K FCPU = 125 Гц

Питание ядра выключено

0,50÷0,60 мА
Источники OSC32M, HSI32M, OSC32K выключены;

OSC32M не установлен, вывод XI заземлен;

Делитель AHB = 255;

Делитель APB_M = 255;

Делитель APB_P = 255.

LSI32K FCPU = 125 Гц

Питание ядра выключено

0,17÷0,20 мА
Примечание: В главном цикле инкрементируется переменная, программа выполняется из EEPROM.