初始化函数
-
- RTC_DeInit(); //初始化默认状态
- CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); //允许RTC时钟
- CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1); //选择RTC时钟源LSE、2=19K
- RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //19/16 ≈1ms
- RTC_SetWakeUpCounter(3000);
- RTC_ITConfig(RTC_IT_WUT, ENABLE); //使能中断
- ITC_SetSoftwarePriority(RTC_IRQn, ITC_PriorityLevel_3);//优先级
- RTC_WakeUpCmd(ENABLE); //关闭自动唤醒
RTC中断
- INTERRUPT_HANDLER(RTC_IRQHandler,4)
- {
- RTC_WakeUpCmd(DISABLE);
- RTC_ClearITPendingBit(RTC_IT_WUT);
- }
主函数
-
- HSI_TO_LSE();
- RTC_Enable(3000);
- halt();
- LSE_TO_HSI();
- System_Handle();
进入停止模式前时钟已经切换到LSE,唤醒时间一直不准。而且初次上电需要比较长的时间才能唤醒。
以前也没太注意这点,不知道怎么回事。
|