我正在尝试进入停止模式并使用 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();
}
}