Режимы работы: различия между версиями
Андрей (обсуждение | вклад) Нет описания правки |
Андрей (обсуждение | вклад) Метка: визуальный редактор отключён |
||
Строка 182: | Строка 182: | ||
|} | |} | ||
Пример | Пример | ||
{{#spoiler:show=Показать main.c|hide=Скрыть main.c| | |||
<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> | |||
}} |
Версия от 08:27, 30 июля 2024
Режим работы | Условия | Источник тактирования системы | Частота ядра | Потребление | Единицы |
---|---|---|---|---|---|
Активный | Тактирование периферий по умолчанию;
Делитель AHB = 0; Делитель APB_M = 0; Делитель APB_P = 0. |
OSC32M | FCPU = 32 МГц | 12,54 | мА |
Пониженного энергопотребления | Тактирование включено только у WU, PM, CPU, EEPROM, RAM, TCB;
Источники OSC32M, OSC32K, HSI32M выключены; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255. |
LSI32K | FCPU = 125 кГц | 1,50 | мА |
Спящий | Тактирование 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,26 | мА |
OCS32M | 3,25 | мА | |||
LSI32K | FCPU = 125 Гц | 1,50 | мА | ||
Стоп | Источники HSI32M, OSC32K, LSI32K выключены;
Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255; Загрузка из EEPROM. |
OCS32M | FCPU = 125 кГц
Ядро в состоянии sleep |
2,03 | мА |
Источники OSC32M, HSI32M, OSC32K выключены;
Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255; Загрузка из EEPROM. |
LSI32K | FCPU = 125 Гц
Ядро в состоянии sleep |
0,78 | мА | |
Ожидание | Источники HSI32M, OSC32K выключены;
OSC32M включен; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255 |
LSI32K | FCPU = 125 Гц
Питание ядра выключено |
0,57 | мА |
Источники OSC32M, HSI32M, OSC32K выключены;
OSC32M не установлен, вывод XI заземлен; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255. |
LSI32K | FCPU = 125 Гц
Питание ядра выключено |
0,17 | мА | |
Примечание: В главном цикле инкрементируется переменная, программа выполняется из EEPROM. |
Описание режимов
Активный
Состояние процессора | Состояние памяти | Состояние периферии | Состояние системного и батарейного домена | Тактирование | Вход в режим | Выход из режима |
---|---|---|---|---|---|---|
Процессор работает в нормальном режиме | ОЗУ, 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 |
Системный домен включен,
|
От внешнего часового осциллятора
|
Программно, переключившись на нужный источник тактирования или выставив необходимый делитель | Программно, переключившись на нужный источник тактирования или выставив необходимый делитель |
Пример