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)模式
}
}