本帖最后由 看不清的天空 于 2017-6-14 13:03 编辑
void RTC_Config(void)
{
CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1); //选择LSE作为时钟 32K/1=32K
while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
RTC_WakeUpCmd(DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);//RTC时钟门控使能
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //32K/16 = 2K
RTC_ITConfig(RTC_IT_WUT, ENABLE);
Delay(0x002F);
RTC_SetWakeUpCounter(2000);
ITC_SetSoftwarePriority(RTC_IRQn, ITC_PriorityLevel_3);//优先级
enableInterrupts();
}
/*******************************************************************************
函数备注:要实现最低功耗CPU的IO口要输出确定的电平;例程除了按键与LED接口其他IO全部输出低;
还需要使用超低功耗指令;
实测此例程
ACTIVE-HALT:主振荡器/CPU/大多数外设停止;LSI/LSE运行;BEEP/IWDG/RTC/LCD的一个或多个
使能,即可通过HALT指令进入ACTIVD-HALT模式;
*******************************************************************************/
int main( void )
{
CLK_HSICmd(DISABLE);
PWR_FastWakeUpCmd(ENABLE); //快速唤醒使能
RTC_Config();
//所有IO输出低电平
GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOC, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
PWR_UltraLowPowerCmd(ENABLE);//超低功耗
RTC_ITConfig(RTC_IT_WUT, ENABLE);//唤醒定时器中断使能
RTC_WakeUpCmd(ENABLE);//RTC唤醒使能
while(1)
{
halt();
}
}
|