STM32 RTC上的唤醒和闹钟
RTC很简单只要给备用电,RTC就会不停,可以进行设置和读时间。同时在RTC上也涉及了闹钟(EXTI_17:RTC_FLAG_ALRAF,相当于RTC的定时器,闹钟到了之后进行异步操作)和唤醒中断(低功耗模式下的操作EXTI_22:RTC_IT_WUT)。
如果PA0上有开关信号唤醒EXIT_Line0,同时也有RTC的唤醒中断EXTI_22需要清除2个中断标记RTC_IT_WUT和EXTI_Line20。
void RTC_WKUP_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_WUT);
}
EXTI_ClearITPendingBit(EXTI_Line20);
}
void EXTI0_IRQHandler(void) //中断0 唤醒 ;
{
EXTI_ClearITPendingBit(EXTI_Line0);
}
https://blog.csdn.net/licent9420/article/details/79828381
int main()
{
DelayInit(); //延时初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR时钟
if(PWR_GetFlagStatus(PWR_FLAG_SB)) //从待机模式唤醒,清除相应标志位
{
PWR_ClearFlag(PWR_FLAG_SB);
PWR_ClearFlag(PWR_FLAG_WU);
}
OLED_Init();
RtcInit();
while(1) {
OLED_8x16StrP(0,0,"Runing..."); //液晶提示在运行中
DelayS(2); //延时2秒
RtcWakeUpConfig(); //RTC wakeup 配置:间隔500ms自动唤醒
// PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE); //Periodic auto-wakeup不需要外部唤醒管脚,故不需要这句,唤醒可以通过RTC或外部唤醒引脚PA0唤醒。因此唤醒时要区别是何种方式唤醒。
PWR_EnterSTANDBYMode(); //进入待机(STANDBY)模式
}
}