/******************************************************************************* * Function Name : RTC_Configuration * Description : Configures the RTC. * Input : None * Output : None * Return : None *******************************************************************************/ void RTC_Configuration(void) { /* Enable PWR and BKP clocks */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */ PWR_BackupAccessCmd(ENABLE);
/* Reset Backup Domain */ BKP_DeInit();
/* Enable LSE */ RCC_LSEConfig(RCC_LSE_ON); /* Wait till LSE is ready */ while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { }
/* Select LSE as RTC Clock Source */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable RTC Clock */ RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC registers synchronization */ RTC_WaitForSynchro();
/* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask();
/* Enable the RTC Second */ //RTC_ITConfig(RTC_IT_SEC, ENABLE);
/* Wait until last write operation on RTC registers has finished */ //RTC_WaitForLastTask();
/* Set RTC prescaler: set RTC period to 1sec */ RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
/* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); }
/******************************************************************************* * Function Name : Time_Regulate * Description : Returns the time entered by user, using Hyperterminal. * Input : None * Output : None * Return : Current time RTC counter value *******************************************************************************/ INT32U Time_Regulate(void) { /* Return the value to store in RTC counter register */ // yearhdata = 20; //2009年1月1日星期4,0点0分0秒. // yearldata = 9; // monthdata = 12; // daydata = 31; // weekdata = 4; // hourdata = 0; // mindata = 0; // secdata = 0; return((hourdata*3600 + mindata*60 + secdata)); }
/******************************************************************************* * Function Name : Time_Adjust * Description : Adjusts time. * Input : None * Output : None * Return : None *******************************************************************************/ void Time_Adjust(uint32 data) { /* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); /* Change the current time */ RTC_SetCounter(data); /* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); }