www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 RTC Init Error


Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich möchte vom STM32 den RTC nutzen. Anbei der Code:
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE);
  PWR_BackupAccessCmd(ENABLE);
  Uhr_InitError = WaitForLastTask();
  if (!Uhr_InitError)
  {
    RTC_EnterConfigMode();
    RTC_SetPrescaler(32767);  // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
    BKP_RTCOutputConfig(BKP_RTCOutputSource_None);
    BKP_TamperPinCmd(DISABLE);
    RCC_LSEConfig(RCC_LSE_ON);
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    RCC_RTCCLKCmd(ENABLE);
    RTC_ExitConfigMode();
    Uhr_InitError = WaitForLastTask();
  }

: : :

u8 WaitForLastTask(void)
{
  // Loop until RTOFF flag is set
  u16 i = 0;
  while ((RTC->CRL & 0x20) == 0)
  {
    Timer_Task();  // Timeout-Abfrage
    if (tPuls1ms)
      if (++i > 20)
        return 0;
  }
  return 1;
}

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.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt gehts, mein Denkfehler...

Uhr_InitError = !WaitForLastTask();

Autor: ttl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist meine Initialisierung:
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE);
  PWR_BackupAccessCmd(ENABLE);
  RTC_ClearFlag(RTC_FLAG_RSF);
  Uhr_InitError = !WaitForLastTask();
  if (!Uhr_InitError)
  {
    RTC_EnterConfigMode();
    RTC_SetPrescaler(32767);  // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1)
    BKP_RTCOutputConfig(BKP_RTCOutputSource_None);
    BKP_TamperPinCmd(DISABLE);
    RCC_LSEConfig(RCC_LSE_ON);
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    RCC_RTCCLKCmd(ENABLE);
    RTC_ExitConfigMode();
    Uhr_InitError = !WaitForLastTask();
  }

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.