你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32的RTC闹钟休眠唤醒

[复制链接]
sunshuguang 提问时间:2017-4-27 17:21 /
如题,本人在测试STOP模式下闹钟唤醒,发现唤醒间隙不一致,如图所示:

文件

文件

在非低功耗模式下,则可以获得等宽的脉冲,希望得到大神解惑。

file:///D:\Personal\Documents\Tencent Files\406178052\Image\C2C\C3967C544EC568420CF45759007E7027.jpg


收藏 2 评论7 发布时间:2017-4-27 17:21

举报

7个回答
zhao.zhao 回答时间:2017-4-30 15:29:51
停止模式下,闹钟唤醒,要在中断唤醒后,再次初始化系统时钟的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

sunshuguang 回答时间:2017-4-27 17:26:22
下面是代码:



int RTC_Init_User(void)
{   
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
   // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);   
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);  
        BKP_DeInit();
    //使能后备寄存器访问  
    PWR_BackupAccessCmd(ENABLE);  


    RCC_LSICmd(ENABLE);  
        while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == 0) {};
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);   
    RCC_RTCCLKCmd(ENABLE);
    RTC_WaitForLastTask();
        RTC_WaitForSynchro();
    RTC_SetPrescaler(4000);
    RTC_WaitForLastTask();  
        
    RTC_SetCounter(0);  
    RTC_WaitForLastTask();  
    RTC_SetAlarm(RTC_GetCounter()+2);  //设置闹钟时间  默认初始化为0.5秒钟后闹钟事件
    RTC_WaitForLastTask();
    RTC_ITConfig(RTC_IT_ALR, ENABLE);              
      RTC_WaitForLastTask();        
            
//        PWR_Cfg_User();   
            
            //闹钟中断接到第17线外部中断  
    EXTI_ClearITPendingBit(EXTI_Line17);  
    EXTI_InitStructure.EXTI_Line = EXTI_Line17;  
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
    EXTI_Init(&EXTI_InitStructure);
   
        NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;//闹钟唤醒
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
            
        return 0;   
}
int RTC_Cfg_User(uint8_t Alarm)
{   

      RTC_SetAlarm(RTC_GetCounter()+Alarm);  //设置闹钟时间
    RTC_WaitForLastTask();
    return 0;
}


void RTCAlarm_IRQHandler()
{
    uint32_t iTemp=0;
        RTC_WaitForSynchro();  
  if (RTC_GetITStatus(RTC_IT_ALR) != RESET)  
  {

            EXTI_ClearITPendingBit(EXTI_Line17);
            RTC_WaitForLastTask();
            RTC_ClearITPendingBit(RTC_IT_ALR);
            RTC_WaitForLastTask();
            if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)  
            {
                PWR_ClearFlag(PWR_FLAG_WU); // 清除唤醒标志
                RTC_WaitForLastTask();
            }


            GPIO_ToggleBits(GPIO_Pin_13,GPIOC);
            RTC_SetCounter(0);  
            RTC_WaitForLastTask();
            iTemp=RTC_GetCounter();
            RTC_SetAlarm((uint32_t)(iTemp+2));  //设置闹钟时间  默认初始化为0.5秒钟后闹钟事件
            RTC_WaitForLastTask();
            RTC_ClearITPendingBit(RTC_IT_ALR);
            RTC_WaitForLastTask();
  }  
}
无薪税绵 回答时间:2017-5-18 08:16:10
3楼没错,没有重新初始化系统时钟。
wolfgang 回答时间:2017-5-18 13:05:25
zhao.zhao 发表于 2017-4-30 15:29
停止模式下,闹钟唤醒,要在中断唤醒后,再次初始化系统时钟的。

正解,需要初始化始终。
长不大的小孩 回答时间:2017-5-18 16:20:26
簽到簽到啦!!!!
gmphoenix_huo@h 回答时间:2017-5-18 17:17:52

这里不签到……请出门左转
cldym 回答时间:2017-5-18 20:00:21
没有重新初始化系统时钟。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版