初始化函数
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,唤醒时间一直不准。而且初次上电需要比较长的时间才能唤醒。
以前也没太注意这点,不知道怎么回事。 |