Вот код инициализации часов:
Код
void RtcInit (void) {
</p> RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Reset Backup Domain */
RCC_RTCResetCmd(ENABLE);
RCC_RTCResetCmd(DISABLE);
/* LSE Enable */
RCC_LSEConfig(RCC_LSE_ON);
/*Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
/* LCD Clock Source Selection */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro(); /* Wait until last write operation on RTC registers has finished */
<p> }
</p> RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Reset Backup Domain */
RCC_RTCResetCmd(ENABLE);
RCC_RTCResetCmd(DISABLE);
/* LSE Enable */
RCC_LSEConfig(RCC_LSE_ON);
/*Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
/* LCD Clock Source Selection */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro(); /* Wait until last write operation on RTC registers has finished */
<p> }
Установка времени:
Код
void DateSetup(DWORD TimeDate) {
</p> RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeStructure.RTC_Hours = 12;
RTC_TimeStructure.RTC_Minutes = 10;
RTC_TimeStructure.RTC_Seconds = 0;
/* Set the Date */
RTC_DateStructure.RTC_Month = 6;
RTC_DateStructure.RTC_Date = 22;
RTC_DateStructure.RTC_Year = 11;
/* Calender Configuartion */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure);
<p> }
</p> RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeStructure.RTC_Hours = 12;
RTC_TimeStructure.RTC_Minutes = 10;
RTC_TimeStructure.RTC_Seconds = 0;
/* Set the Date */
RTC_DateStructure.RTC_Month = 6;
RTC_DateStructure.RTC_Date = 22;
RTC_DateStructure.RTC_Year = 11;
/* Calender Configuartion */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure);
<p> }
Считывание времени:
Код
DWORD GetSystemTime (void) {
</p> DWORD time = 0;
DWORD sec = 0;
DWORD min = 0;
DWORD hour = 0;
DWORD day = 0;
DWORD month = 0;
DWORD year = 0;
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); // Get the current Date
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); // Get the current Time
year = ((BYTE)RTC_DateStructure.RTC_Year);
month = ((BYTE) RTC_DateStructure.RTC_Month);
day = ((BYTE)RTC_DateStructure.RTC_Date);
hour = ((BYTE)RTC_TimeStructure.RTC_Hours);
min = ((BYTE)RTC_TimeStructure.RTC_Minutes);
sec = ((BYTE)RTC_TimeStructure.RTC_Seconds);
<p> }
</p> DWORD time = 0;
DWORD sec = 0;
DWORD min = 0;
DWORD hour = 0;
DWORD day = 0;
DWORD month = 0;
DWORD year = 0;
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); // Get the current Date
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); // Get the current Time
year = ((BYTE)RTC_DateStructure.RTC_Year);
month = ((BYTE) RTC_DateStructure.RTC_Month);
day = ((BYTE)RTC_DateStructure.RTC_Date);
hour = ((BYTE)RTC_TimeStructure.RTC_Hours);
min = ((BYTE)RTC_TimeStructure.RTC_Minutes);
sec = ((BYTE)RTC_TimeStructure.RTC_Seconds);
<p> }
И вот здесь-то при считывании я и получаю некорректное значение <strong>year.</strong>Заранее благодарен за любые советы.