STM32L闹钟中断在待机模式不能唤醒

2019-07-20 15:42发布

本帖最后由 未知1908 于 2017-3-29 14:12 编辑

请教大家一个问题
为什么我的程序不能唤醒闹钟。
我配置好RTC和闹钟,再不进入待机模式时,时钟能走,设定的闹钟时间一到也能进闹钟中断RTC_Alarm_IRQHandler。
但是如果单片机进入待机状态就不能唤醒,
使用的是内部的LSI时钟,进入待机之前按照手册先关闭闹钟中断,再进行清除标志位
RTC_ITConfig(RTC_IT_ALRA, DISABLE);
EXTI_ClearITPendingBit(EXTI_Line17);
RTC_ClearFlag(RTC_FLAG_ALRAF);
PWR_ClearFlag(PWR_FLAG_WU);
RTC_ITConfig(RTC_IT_ALRA, ENABLE);

但是还是不行。
实在是没有头绪了,所以请教大家,应该如何实现使用闹钟唤醒单片机。谢谢各位了
程序见附件,用LED做的运行的指示,使用的是STM32L152
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
未知1908
1楼-- · 2019-07-20 18:22
正点原子 发表于 2017-3-29 20:56
帮顶

感谢帮顶,问题解决了。但时现在想想还是定时唤醒好,闹钟唤醒每次唤醒之后RTC会被重置,闹钟也就没啥意义了。
定时唤醒代码如下:需要的可以参考一下
void StandbyRTCLSIMode_Measure(void)
{
         
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);  /* Enable PWR APB1 Clock */
  PWR_RTCAccessCmd(ENABLE);    /* Allow access to RTC */
  RCC_RTCResetCmd(ENABLE);   /* Reset RTC Domain *///¸′λRTCÇøóò
  RCC_RTCResetCmd(DISABLE);
       
  PWR_RTCAccessCmd(ENABLE);/* Allow access to RTC */
  
  RCC_LSICmd(ENABLE);/*!< LSI Enable */
  while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) /*!< Wait till LSI is ready */
  {}
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);/*!< RTC Clock Source Selection */
  RCC_RTCCLKCmd(ENABLE);/* Enable the RTC Clock */
  RTC_WaitForSynchro();  /* Wait for RTC APB registers synchronisation */
  PWR_UltraLowPowerCmd(ENABLE);/* Enable Ultra low power mode */
  /* RTC Wakeup Interrupt Generation: Clock Source: RTCCLK_Div16, Wakeup Time Base: ~4s
     RTC Clock Source LSI ~37KHz  
  */
  RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
  RTC_SetWakeUpCounter(0x8421);
  RTC_ITConfig(RTC_IT_WUT, ENABLE);/* Enable the Wakeup Interrupt */
  RTC_WakeUpCmd(ENABLE); /* Enable Wakeup Counter */
  RTC_ClearFlag(RTC_FLAG_WUTF);/* Clear WakeUp (WUTF) pending flag */
  PWR_EnterSTANDBYMode();/* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */
  
}
正点原子
2楼-- · 2019-07-20 23:59
 精彩回答 2  元偷偷看……

一周热门 更多>