ST意法半导体
直播中

golabs

8年用户 879经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表
私信 关注
[问答]

设置RTC警报事件以从睡眠模式唤醒STM32F103C8T6,后续警报永远不会唤醒MCU怎么解决?

我正在尝试设置 RTC 警报事件以从睡眠模式(不是待机,不是停止)唤醒 STM32F103C8T6 并且它工作一次,但后续警报永远不会唤醒 MCU。我尝试过的任何东西似乎都不起作用,我不再知道如何解决这个问题。








回帖(1)

李滢芝

2022-12-26 15:00:47
好吧,我终于弄明白了,我试过的大部分东西都不需要了;我的问题是我不知道我需要从 NVIC 清除挂起的 IRQ。基本上,它归结为以下几点:


  • //Disable systick so it won't wake the MCU up from sleep
  •         HAL_SuspendTick();
  •         HAL_PWR_EnableSEVOnPend();
  •         //These two lines clear any pending RTC alarm
  •         __HAL_RTC_ALARM_CLEAR_FLAG(&hrtc, RTC_FLAG_ALRAF);
  •         NVIC_ClearPendingIRQ(RTC_IRQn);
  •         //Then just proceed to set up the new alarm and go to sleep
  •         HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN);
  •         HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFE);
  •         HAL_ResumeTick();

值得注意的是,在清除 NVIC 中断挂起之前,必须清除 RTC 警报。交换它们或期望 HAL_RTC_SetAlarm_IT() 清除警报将不起作用,NVIC 中断在警报首次被清除之前不会被成功清除。
我把它留在这里,以防其他人想在睡眠时使用 WFE 而不是 WFI,但无法让它工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分