SLEEP Mode

In SLEEP mode only the cpu clock is disabled, everything else stays as previously configured.

Enter SLEEP mode


Exit SLEEP mode


Programming Example

The code snippet bellow shows how to enter (and exit) SLEEP mode.

#include "reg_stm32f4xx.h"
 
RCC->AHB1ENR |= (0x1 <<  0u);       /* Enable GPIOA clock */
RCC->APB2ENR |= (0x1 << 14u);       /* Enable SYSCFG clock */
 
/* Configure wake up pin (PA.0). */
GPIOA->MODER &= ~(0x3 << 0u);         /* Clear existing mode bits 10 and 11. */
 
GPIOA->PUPDR &= ~(0x3 << 0u);         /* Clear existing pull-up/-down bits 0 and 1. */
GPIOA->PUPDR |= (0x1 << 0u);          /* Set pin 0 to pull-up mode. */
 
/* Configure interrupt. */
SYSCFG->EXTICR1 |= (0u << 0u);      /* Set EXTI0 to GPIOA. */
EXTI->RTSR |= (0x1 << 0u);            /* Trigger on rising edge. */
EXTI->IMR |= (0x1 << 0u);             /* Unmask interrupt line. */
NVIC->ISER0 |= (0x1 << 6u);         /* Enable EXTI0 interrupt. */
 
/* Disable SLEEPDEEP (STOP or STANDBY mode). */
SCB->SCR &= ~(0x1 << 2u);
 
 
/* -------------------- Enter SLEEP mode -------------------- */
 
__asm volatile ("wfi");
 
 
/* -------------------- Exit SLEEP mode --------------------- */
 
/* Since all registers and the SRAM are untouched by the SLEEP mode,
 * the program continues after the WFI instruction.
 * No further steps required. 
 */