OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5048|回复: 2

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

[复制链接]

9

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2017-3-23
在线时间
255 小时
发表于 2017-3-29 14:10:06 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 未知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

test_RTC_Alarm3.rar

1.38 MB, 下载次数: 176

最佳答案

查看完整内容[请看2#楼]

感谢帮顶,问题解决了。但时现在想想还是定时唤醒好,闹钟唤醒每次唤醒之后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 *///¸′Î& ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2017-3-23
在线时间
255 小时
 楼主| 发表于 2017-3-29 14:10:07 | 显示全部楼层

感谢帮顶,问题解决了。但时现在想想还是定时唤醒好,闹钟唤醒每次唤醒之后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) */
  
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-29 20:56:15 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 12:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表