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.