STM32 RTC Init Error

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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.