Пример показывает, как ввести систему в режим STOP и пробуждения из этого режима.
Это достигается с помощью пользовательского кнопочного EXTI0. LED1 LED2 включены в режиме RUN и выключены в режиме STOP. — системные часы установлены 168 МГц.
— EXTI0 настроен для генерации прерывания по falling фронту.
— SysTick запрограммирован на прерывание 1 мс.
Система переходит в режим останова после 5s и ожидает нажатия USER кнопки.
— STOP Mode ============
— Regulator in LP mode — VREFINT OFF with fast wakeup enabled
— HSI as SysClk after Wake Up
— No IWDG
— Wakeup using EXTI Line (User push-button connected to PA.00)
За основу взят пример STM32Cube_FW_F4_V1.8.0\Projects\STM32469I-Discovery\Examples\PWR
[codesyntax lang=»cpp» container=»pre_valid» blockstate=»collapsed»]
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* Enable Power Control clock */
__HAL_RCC_PWR_CLK_ENABLE();
/* Infinite loop */
while (1)
{
/* Insert 5 second delay */
HAL_Delay(5000);
/* Turn OFF LED */
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13, GPIO_PIN_RESET);
/* отключить SysTick */
HAL_SuspendTick();
/* Enter Stop Mode прерывание */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* включить SysTick */
HAL_ResumeTick();
/* Turn ON LED after wake-up from STOP */
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13, GPIO_PIN_SET);
/* Configures system clock after wake-up from STOP */
SystemClock_Config();
}
}
[/codesyntax]
Ссылка на готовый проект sleep.zip