Pokud pracujete s MBED-OS, často je třeba přejít do usporného režimu na delší dobu než umožňuje běžný (deep) sleep a režimy STANDBY a SHUTDOWN nejsou pro daný účel vhodné. V prvé řadě je zde, pro dosažení nízké spotřeby, vhodné zvolit TICKLESS mod - nejlépe s LPTIM timerem. To ale neumožňuje dosáhnout dlouhých intervalů spánku. Proto může být někdy vhodné mít přechod do úsporného modu a vzbuzení plně pod kontrolou. Před přechodem do úsporných režimů je tedy nutné příslušný LPTIM timer zastavit. Pokud bychom tak neučinili, tak by se MCU z úsporného režimu neustále periodicky probouzel. A to někdy fakt nechceme. Nezapomeňte před přechodem do úsporného režimu také aktivovat některý zdroj vzbuzení (RTC, INT, atd.). Jinak usnete navždy. Níže je uveden způsob jak i v MBED-OS přejít do STOP modu na neomezenou dobu včetně případu kdy máte aktivní periferie, která normálně (DEEP) SLEEP blokují.

// Příklad pro MBED-OS / STM32L462CE 

...

core_util_critical_section_enter();

// Vypneme LPTIM (STM32L462CE používá LPTIM1)
HAL_NVIC_DisableIRQ(LPTIM1_IRQn);  
HAL_NVIC_ClearPendingIRQ (LPTIM1_IRQn);
__HAL_RCC_LPTIM1_CLK_DISABLE(); 

/* Enter STOP 1 mode */
HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);

// zde obnovíme hodiny dle potřeb každého soudruha

// a zase zapneme LPTIM
__HAL_RCC_LPTIM1_CLK_ENABLE();
HAL_NVIC_ClearPendingIRQ (LPTIM1_IRQn);
HAL_NVIC_EnableIRQ(LPTIM1_IRQn);  

core_util_critical_section_exit();  		

...

Stejný princip můžeme použít i pro SLEEP mod. Jen musíme počítat s prodloužením času vzbuzení než naběhnou hodiny LPTIM1.

...

core_util_critical_section_enter();  

// Vypneme LPTIM (STM32L462CE používá LPTIM1)
HAL_NVIC_DisableIRQ(LPTIM1_IRQn);  
HAL_NVIC_ClearPendingIRQ (LPTIM1_IRQn);
__HAL_RCC_LPTIM1_CLK_DISABLE(); 

HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);  

// a zase zapneme LPTIM
__HAL_RCC_LPTIM1_CLK_ENABLE();
HAL_NVIC_ClearPendingIRQ (LPTIM1_IRQn);
HAL_NVIC_EnableIRQ(LPTIM1_IRQn);    

core_util_critical_section_exit(); 

...