Hallo,
ich habe folgendes Problem. Ich habe den STM32F217 und Setze die RTC mit
einem Datum und einer Uhrzeit.
Anschließend lese ich beides aus. Die Uhrzeit wird sofort übernommen und
beim anschließenden auslesen richtig angezeit.
Das Datum hingegen wird nicht deterministisch erst bei 10 mal auslesen
oder nach 10-20 Sekunden richtig angezeit (So wie ich es vorher gesetzt
hatte)
Ich nutze die Funktionen der ST Bibliothek.
Hier der Code zum Setzen der RTC
1 | RTC_TimeTypeDef rtcTimeStampStructure;
|
2 | RTC_DateTypeDef rtcTimeStampDateStructure;
|
3 |
|
4 | rtcTimeStampDateStructure.RTC_WeekDay = 1;
|
5 | rtcTimeStampDateStructure.RTC_Year = year - 2000;
|
6 | rtcTimeStampDateStructure.RTC_Month = month;
|
7 | rtcTimeStampDateStructure.RTC_Date = day;
|
8 |
|
9 | rtcTimeStampStructure.RTC_Hours = hour;
|
10 | rtcTimeStampStructure.RTC_Minutes = minute;
|
11 | rtcTimeStampStructure.RTC_Seconds = second;
|
12 | rtcTimeStampStructure.RTC_H12 = RTC_H12_AM;
|
13 |
|
14 | // Configure the RTC time register
|
15 | if ( RTC_SetTime(RTC_Format_BIN, &rtcTimeStampStructure) == ERROR )
|
16 | {
|
17 | throw RtcIsNotSetableException();
|
18 | } else {
|
19 | RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
|
20 | }
|
21 |
|
22 | // Configure the RTC date register
|
23 | if ( RTC_SetDate(RTC_Format_BIN, &rtcTimeStampDateStructure) == ERROR )
|
24 | {
|
25 | throw RtcIsNotSetableException();
|
26 | } else {
|
27 | RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
|
28 | }
|
Hier der Code zum Lesen:
1 | RTC_TimeTypeDef rtcTimeStampStructure;
|
2 | RTC_DateTypeDef rtcTimeStampDateStructure;
|
3 |
|
4 | RTC_GetDate(RTC_Format_BIN,&rtcTimeStampDateStructure);
|
5 | RTC_GetTime(RTC_Format_BIN,&rtcTimeStampStructure);
|
6 |
|
7 | struct tm timeToSet; // TODO SP umbenennen
|
8 | timeToSet.tm_sec = rtcTimeStampStructure.RTC_Seconds;
|
9 | timeToSet.tm_min = rtcTimeStampStructure.RTC_Minutes;
|
10 | timeToSet.tm_hour = rtcTimeStampStructure.RTC_Hours;
|
11 | timeToSet.tm_mday = rtcTimeStampDateStructure.RTC_Date;
|
12 | timeToSet.tm_mon = rtcTimeStampDateStructure.RTC_Month-1;
|
13 | timeToSet.tm_year = rtcTimeStampDateStructure.RTC_Year + 2000-1900;
|
14 |
|
15 | time_t timestamp = mktime(&timeToSet);
|
16 | ret = static_cast<long long>(timestamp);
|
Habt ihr eine Idee, warum das so ist? Bzw. wie man es beheben kann?
Gruß