想使用闹钟唤醒功能使系统从待机下唤醒,遇到一个问题:使用闹钟唤醒就不能使用wakeup pin唤醒。二者只能取其一。

此问题解决,画了个板子wakeup pin 接下拉电阻解决。

 

写新代码时候遇到一个问题:设置闹钟中断开启之后不要关闭:PWR_BackupAccessCmd(DISABLE);

如果只有设置秒中断的话可以有这句比较安全,可是后面还要设置闹钟步长,千万不能有,不然会死掉,死掉。

 

1,首先屏蔽掉:// PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能

     我的程序在wakeup_config.c中实现. 屏蔽后wakeup pin无法使机器唤醒

2,使能RTC闹钟中断:  /* Enable the RTC Alarm interrupt */
                           RTC_ITConfig(RTC_IT_ALR, ENABLE);
                           /* Wait until last write operation on RTC registers has finished */
                           RTC_WaitForLastTask();

     这两句在RTC初始化时候加入即可。

3,设置闹钟时长并进入待机   

    RTC_ClearFlag(RTC_FLAG_SEC);
    while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
    RTC_SetAlarm(RTC_GetCounter() + 15);
    RTC_WaitForLastTask();

    Sys_Enter_Standby();

4,中断服务函数:

 1 static void RTC_NVIC_Config(void)
 2 {    
 3     NVIC_InitTypeDef NVIC_InitStructure;
 4 
 5     NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;        //RTC全局中断
 6     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    //先占优先级1位,从优先级3位
 7     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    //先占优先级0位,从优先级4位
 8     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //使能该通道中断
 9     NVIC_Init(&NVIC_InitStructure);        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
10 }
RTC_NVIC_Config

相关文章: