Forum: Mikrocontroller und Digitale Elektronik RTC beim STM32 deaktivieren


von RTC (Gast)


Lesenswert?

Hallo,

eine vielleicht blöde Frage:

wie deaktiviere ich die bereits laufende RTC bei einem STM32F4 
Controller?

Danke,
mfg

von Sebastian K. (sek)


Lesenswert?

Schau dir mal das Backup Domain Control Register RCC_BDCR an

von Christian J. (Gast)


Lesenswert?

Hallo,

ich papp mich mal hier drunter und kapere den Thread. Irgendwie habe ich 
bei diesen ARMs das Gefühl, dass da manchmal was strubbelig ist in der 
Hardware.

Beispiel unten:

Ich setze ab und an die Zeit neu, die ich per Funk für mein Anzeigeboard 
bekomme. Die RTC läuft zwar sehr genau aber kann ja nicht schaden, die 
Referenz stammt aus einem DCF77 Board und ist genauer. (Gibt Leute im 
Netz, die sich einen abgebrochen haben manuell aus dem 32 Bit Counter 
eine Zeit zu basteln, dabei hat Unix und damit der GCC doch alles an 
Bord, nämlich die Epoch Time und Routinen diese umzuwandeln. )

Stunden gesucht, wieso mir plötzlich die INTs der Anwendung verrückt 
spielen, d.h. die CPU ist dicht, andauernd wurde der 1s RTC Int 
ausgelöst, raus und direkt wieder rein.

Ich habe dann probiert und den Befehl

PWR_BackupAccessCmd(ENABLE);

hinein genommen. Und plötzlich war das Problem weg! Ohne diesen wird der 
RTC Prescaler nämlich auf 0 gesetzt und das beeinflusst den INT wohl.

Aber: Normalerweise dürfte der Schreibzugriff gar nicht ausgeführt 
werden, ohne dass diese RTC / Backup Register freigeschaltet wurden. Da 
dürfte nix passieren.

Ist das nun ein Feature oder ein Bug?


/* 
----------------------------------------------------------------------
    Zeit neu einstellen, läuft allein weiter per RTC ISR
   ------------------------------------------------------------------- 
*/

void Set_NewTime(uint32_t newtime)
{
   NVIC_DisableIRQ(RTC_IRQn);

   PWR_BackupAccessCmd(ENABLE);
   RTC_WaitForLastTask();
   RTC_SetCounter(newtime);
   RTC_WaitForLastTask();
   PWR_BackupAccessCmd(DISABLE);

   /* Unixzeit umwandeln */
   /* Unix Zeit für localtime casten */
   time_t value = (time_t)newtime;
   mytime = *localtime(&value);

   NVIC_EnableIRQ(RTC_IRQn);
}

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.