Hi
I have written the following code to set and then read the time. but when I see the result in the LCD, the value of seconds is from 0 to 89 with some jumps like 10 to 16, 25 to 32, 42 to 48 and 73 to 80.
void RTC_Set(void) { RTC_DateTypeDef RTC_DateStructure; RTC_TimeTypeDef RTC_TimeStructure; RTC_InitTypeDef RTC_InitStructure; RTC_AlarmTypeDef RTC_AlarmStructure; uint8_t uwSynchPrediv = 0xFF; uint8_t uwAsynchPrediv = 0x7F; /* Enable the PWR clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Allow access to RTC */ PWR_RTCAccessCmd(ENABLE); RCC_LSEConfig(RCC_LSE_ON); /* Wait till LSE is ready */ while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { } /* Select the RTC Clock Source */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /* ck_spre(1Hz) = RTCCLK(LSE) /(uwAsynchPrediv + 1)*(uwSynchPrediv + 1)*/ /* Enable the RTC Clock */ RCC_RTCCLKCmd(ENABLE); /* Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); /* Configure the RTC data register and RTC prescaler */ RTC_InitStructure.RTC_AsynchPrediv = uwAsynchPrediv; RTC_InitStructure.RTC_SynchPrediv = uwSynchPrediv; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_Init(&RTC_InitStructure); /* Set the alarm 05h:20min:30s */ RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM; RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x05; RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x20; RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = 0x05; RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31; RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay; /* Configure the RTC Alarm A register */ RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure); /* Enable RTC Alarm A Interrupt */ RTC_ITConfig(RTC_IT_ALRA, ENABLE); /* Enable the alarm */ RTC_AlarmCmd(RTC_Alarm_A, ENABLE); RTC_ClearFlag(RTC_FLAG_ALRAF); RTC_DateStructure.RTC_Year = 15; RTC_DateStructure.RTC_Month = RTC_Month_June; RTC_DateStructure.RTC_Date = 26; RTC_DateStructure.RTC_WeekDay = RTC_Weekday_Friday; RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure); RTC_TimeStructure.RTC_H12 = RTC_H12_AM; RTC_TimeStructure.RTC_Hours = 5; RTC_TimeStructure.RTC_Minutes = 20; RTC_TimeStructure.RTC_Seconds = 10; RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure); } void RTC_Get(void) { RTC_TimeTypeDef RTC_Time_struct; uint8_t h,m,s; char str[500]; RTC_GetTime(RTC_Format_BCD, &RTC_Time_struct); //show in display h=RTC_Time_struct.RTC_Hours; m=RTC_Time_struct.RTC_Minutes; s=RTC_Time_struct.RTC_Seconds; sprintf(str,"H=%d,M=%d,S=%d",h,m,s); GLCD_GoTo(40,4); GLCD_WriteString("Time:"); GLCD_GoTo(40,5); GLCD_WriteString(str); }