/*********************************************************** 
Function name        : RTC_Config 
Function type        : void 
Description        : RTCÅäÖÃ 
Parameter        : None 
Return                : None 
***********************************************************/ 
void RTC_Config(void) 
{ 
        //ʹÄÜPWRʱÖÓ 
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);         
 
        PWR_RTCAccessCmd(ENABLE);        //ÔÊÐí·ÃÎÊRTC 
 
        RCC_RTCResetCmd(ENABLE);        //¸´Î»RTCÓò 
        RCC_RTCResetCmd(DISABLE);        // 
 
        RCC_LSEConfig(RCC_LSE_ON);        //¿ªÆôLSE 
  
        //µÈ´ýLSEÆðÕñ²¢Îȶ¨ 
        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)         
        { 
        } 
 
        //Ñ¡ÔñLSEΪRTCʱÖÓÔ´ 
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);                 
 
        RCC_RTCCLKCmd(ENABLE);                //ʹÄÜRTCʱÖÓ 
 
        RTC_WaitForSynchro();                //µÈ´ýRTC¼Ä´æÆ÷ÓëAPBʱÖÓͬ²½ 
} 
 
/*********************************************************** 
Function name        : RTC_InitConfig 
Function type        : void 
Description        : RTC³õʼ»¯ÅäÖà 
Parameter        : None 
Return                : None 
***********************************************************/ 
void RTC_InitConfig(void) 
{ 
        RTC_InitTypeDef RTC_InitStructure; 
         
        if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2) 
        {   
                RTC_Config();                //RTCÅäÖÃ 
 
                //ÅäÖÃRTCÊý¾Ý¼Ä´æÆ÷ºÍÔ¤·ÖƵÆ÷ 
                RTC_InitStructure.RTC_AsynchPrediv = 0x7F; 
                RTC_InitStructure.RTC_SynchPrediv  = 0xFF; 
                RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;  
                 
                if (RTC_Init(&RTC_InitStructure) == ERROR) 
                { 
                        //printf("\n\r RTC Prescaler Config failed \n\r"); 
                } 
                RTC_SetInitTimeDate();        //ÉèÖóõʼʱ¼ä         
        } 
        else 
        { 
                if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)                //¼ì²éÊÇ·ñµçÔ´¸´Î» 
                { 
                        //printf("\r\n Power On Reset occurred....\n\r"); 
                } 
                else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)        //¼ì²éÊÇ·ñ¹Ü½Å¸´Î»                 
                { 
                        //printf("\r\n External Reset occurred....\n\r"); 
                } 
                //printf("\n\r No need to configure RTC....\n\r"); 
 
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);                //ʹÄÜPWRʱÖÓ 
 
                PWR_RTCAccessCmd(ENABLE);                                                                //ÔÊÐí·ÃÎÊRTC 
 
                //RCC_RTCCLKCmd(ENABLE);                                                                //ʹÄÜRTCʱÖÓ 
                 
                RTC_WaitForSynchro();                                                                        //µÈ´ýRTC¼Ä´æÆ÷ÓëAPBʱÖÓͬ²½ 
                 
                //RTC_ClearFlag(RTC_IT_WUT);                                                        //Çå³ýRTC±¨¾¯±êÖ¾ 
        } 
        RTC_SetWakeUpTime();        //ÉèÖû½ÐÑÖжÏʱ¼ä 
} 
 
/*********************************************************** 
Function name        : RTC_SetWakeUpTime 
Function type        : void 
Description        : RTCÉèÖóõʼ»¯Ê±¼ä 
Parameter        : None 
Return                : None 
***********************************************************/ 
void RTC_SetWakeUpTime(void) 
{ 
        EXTI_InitTypeDef EXTI_InitStructure; 
        NVIC_InitTypeDef NVIC_InitStructure; 
 
        //RTC WakeUpÖжÏÅäÖà 
        EXTI_ClearITPendingBit(EXTI_Line20); 
        EXTI_InitStructure.EXTI_Line         = EXTI_Line20; 
        EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt; 
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; 
        EXTI_InitStructure.EXTI_LineCmd = ENABLE; 
        EXTI_Init(&EXTI_InitStructure); 
 
        //ʹÄÜRTC WakeUpÖÐ¶Ï 
        NVIC_InitStructure.NVIC_IRQChannel                                         = RTC_WKUP_IRQn; 
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
        NVIC_InitStructure.NVIC_IRQChannelSubPriority                  = 0x0F; 
        NVIC_InitStructure.NVIC_IRQChannelCmd                                  = ENABLE; 
        NVIC_Init(&NVIC_InitStructure); 
 
        //ʹÄÜRTC WakeUpÖÐ¶Ï 
        RTC_ITConfig(RTC_IT_WUT, ENABLE); 
         
        //ʹÄÜRTC WakeUp¹¦ÄÜ 
        RTC_WakeUpCmd(ENABLE); 
         
        RTC_WakeUpCmd(DISABLE);  
        RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);        //WakeUpʱÖÓµÈÓÚ1HzÄÚ²¿Ê±ÖÓ 
        RTC_SetWakeUpCounter((WAKEUPTIME - 1)); 
        RTC_WakeUpCmd(ENABLE); 
} 
 
/*********************************************************** 
Function name        : SetInitTimeDate 
Function type        : void 
Description        : RTCÉèÖóõʼ»¯Ê±¼ä 
Parameter        : None 
Return                : None 
***********************************************************/ 
void RTC_SetInitTimeDate(void) 
{ 
        RTC_TimeTypeDef RTC_TimeStructure1; 
        RTC_DateTypeDef RTC_DateStructure1; 
         
        //ʱ¼ä 
         RTC_TimeStructure1.RTC_Hours         = 1; 
         RTC_TimeStructure1.RTC_Minutes         = 30; 
         RTC_TimeStructure1.RTC_Seconds         = 0; 
 
        //ÈÕÆÚ 
        RTC_DateStructure1.RTC_Year         = 13; 
         RTC_DateStructure1.RTC_Month         = 1; 
        RTC_DateStructure1.RTC_Date         = 1; 
        RTC_DateStructure1.RTC_WeekDay        = 2; 
         
        if(RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure1)== ERROR) 
        { 
                //printf("\n\r>> !! RTC Set Data failed. !! <<\n\r"); 
        } 
        else  
        { 
                if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure1) == ERROR) 
                { 
                        //printf("\n\r>> !! RTC Set Time failed. !! <<\n\r"); 
                }  
                else 
                { 
                        RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure1); 
                        RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure1); 
                        RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); 
                } 
        } 
} 
 
 
void IWDG_InitConfig(void) 
{ 
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);        //ʹÄܼĴæÆ÷¶Áд 
 
        IWDG_SetPrescaler(IWDG_Prescaler_256);                //LSIʱÖÓ256·ÖƵ 
         
        IWDG_SetReload(1445);                //ÉèÖüÆÊýÆ÷ÊýÖµ£¬10sÒç³ö¸´Î» 
 
        IWDG_ReloadCounter();                //ÖØÆô¼ÆÊýÆ÷ 
 
        IWDG_Enable();                        //ʹÄÜIWDG¿´ÃŹ· 
}
 |