STM32F2xx RTC nach Setzen wieder auslesen liefert altes Datum

OP #2337425
Lesenswert?

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ß
#2337484
Lesenswert?

Vielleicht hängt das hiermit zusammen: "In addition, writing to any RTC 
register is only enabled if the previous write operation is finished. To 
enable the software to detect this situation, the RTOFF status bit is 
provided in the RTC_CR register to indicate that an update of the 
registers is in progress. A new value can be written to the RTC 
registers only when the RTOFF status bit value is ’1’."

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren