Forum: Mikrocontroller und Digitale Elektronik STM32 RTC Init Error


von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Hallo,

Ich möchte vom STM32 den RTC nutzen. Anbei der Code:
1
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE);
2
  PWR_BackupAccessCmd(ENABLE);
3
  Uhr_InitError = WaitForLastTask();
4
  if (!Uhr_InitError)
5
  {
6
    RTC_EnterConfigMode();
7
    RTC_SetPrescaler(32767);  // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
8
    BKP_RTCOutputConfig(BKP_RTCOutputSource_None);
9
    BKP_TamperPinCmd(DISABLE);
10
    RCC_LSEConfig(RCC_LSE_ON);
11
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
12
    RCC_RTCCLKCmd(ENABLE);
13
    RTC_ExitConfigMode();
14
    Uhr_InitError = WaitForLastTask();
15
  }
16
17
: : :
18
19
u8 WaitForLastTask(void)
20
{
21
  // Loop until RTOFF flag is set
22
  u16 i = 0;
23
  while ((RTC->CRL & 0x20) == 0)
24
  {
25
    Timer_Task();  // Timeout-Abfrage
26
    if (tPuls1ms)
27
      if (++i > 20)
28
        return 0;
29
  }
30
  return 1;
31
}

Vor ein paar Monaten habe ich das programmiert und dann ging das auch. 
Jetzt allerdings blieb die CPU hängen bei "RTC_WaitForLastTask". Darauf 
hin habe ich die Schleife selbst erweitert ("WaitForLastTask") und ein 
Timeout rein gemacht, denn eine "Hänger" ist schlimmer als die fehlende 
Uhrzeit.

In der Doku RM0008/17.3.4 auch noch ein wenig gelesen und die Befehle 
etwas abgeändert. Aber dennoch bleibt der in der "WaitForLastTask" 
hängen (Uhr_InitError wird gesetzt).

Komischerweise funktioniert die Uhr dennoch !??!? Ich habe das Programm 
vor ein paar Tagen geändert, seither war die Schaltung aus, heute ist 
die Uhrzeit immer noch korrekt und läuft auch. (Goldcap 1F drin)

Hat jemand eine Idee, was ich vergessen habe? Oder warum das RTOFF Bit 
nicht auf 0 geht?

Vielen Dank im Voraus.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Jetzt gehts, mein Denkfehler...

Uhr_InitError = !WaitForLastTask();

von ttl (Gast)


Lesenswert?

Hast du eventuell etwas mehr code?
ich habe ebenfalls ein Problem mit der RTC.
Die Uhr scheint nicht weiter zu laufen.
Wenn Vdd wiederkommt ist die Zeit immer wieder auf Null.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Das ist meine Initialisierung:
1
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE);
2
  PWR_BackupAccessCmd(ENABLE);
3
  RTC_ClearFlag(RTC_FLAG_RSF);
4
  Uhr_InitError = !WaitForLastTask();
5
  if (!Uhr_InitError)
6
  {
7
    RTC_EnterConfigMode();
8
    RTC_SetPrescaler(32767);  // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
9
    BKP_RTCOutputConfig(BKP_RTCOutputSource_None);
10
    BKP_TamperPinCmd(DISABLE);
11
    RCC_LSEConfig(RCC_LSE_ON);
12
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
13
    RCC_RTCCLKCmd(ENABLE);
14
    RTC_ExitConfigMode();
15
    Uhr_InitError = !WaitForLastTask();
16
  }

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.