Ср. Окт 28th, 2026

Пример показывает, как ввести систему в режим 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

От sapfir63