STM32 RTC Init Error

OP (Firma: EleLa - www.elela.de) #1696655
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.
Gast #1730717
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.
OP (Firma: EleLa - www.elela.de) #1731014
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
  }

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.