STM32 使用 FreeRTOS 进入 STOP 模式

问题描述 投票:0回答:0

我正在尝试进入停止模式并使用 RTC 闹钟唤醒。

它在启动 FreeRTOS 内核之前工作。

启动 FreeRTOS 内核后唤醒不起作用,系统继续处于 STOP 模式。

我相信问题出在禁用 RTC 警报中断上。我尝试启用它,但它仍然没有醒来。

关于问题的任何迹象?

这里是进入STOP1Mode前后的部分代码

    taskDISABLE_INTERRUPTS();    
    HAL_SuspendTick();
    HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
    HAL_NVIC_ClearPendingIRQ(RTC_Alarm_IRQn);
    SET_Alarm_A();

    HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);

    SystemClock_Config();
    HAL_ResumeTick();
    taskENABLE_INTERRUPTS();

还有 SET_Alarm_A 函数,它为我的测试设置了 10 秒的时间。

void SET_Alarm_A(void)
{
    RTC_AlarmTypeDef sAlarm = {0};

    sAlarm.AlarmTime.Hours = 0x0;
    sAlarm.AlarmTime.Minutes = 0x0;
    sAlarm.AlarmTime.Seconds = 0x10;
    sAlarm.AlarmTime.SubSeconds = 0x0;
    sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
    sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
    sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES;
    sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
    sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
    sAlarm.AlarmDateWeekDay = 0x1;
    sAlarm.Alarm = RTC_ALARM_A;
    if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
    {
        Error_Handler();
    }
}
c stm32 freertos hal
© www.soinside.com 2019 - 2024. All rights reserved.