Gast
#5115124
Hallo, eine vielleicht blöde Frage: wie deaktiviere ich die bereits laufende RTC bei einem STM32F4 Controller? Danke, mfg
|
Anzeige
|
RTC beim STM32 deaktivieren
Gast
#5115124
Hallo, eine vielleicht blöde Frage: wie deaktiviere ich die bereits laufende RTC bei einem STM32F4 Controller? Danke, mfg Schau dir mal das Backup Domain Control Register RCC_BDCR an
Gast
#5116899
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); } Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|