STM32 Probleme mit Watchdog

OP #2085486
Lesenswert?

Das Problem habe ich in der Zwischenzeit "gelöst"; indem ich es 
umschifft habe. Habe aber nicht die geringste Ahnung, was da nicht 
koscher ist.

In medias res: Die Software laeuft seit mehreren Tagen stabil. Keinerlei 
Haenger und dergleichen.
Also Zeit den Watchdog zu aktivieren.
Erstes Aha-Erlebnis: beim STM32 gibts 2 davon.
Ich entscheide mich für den WWDG. Ein Blick auf das ST-Beispielprogramm, 
ein Blick ins Manual: alles ganz einfach.
24 Stunden spaeter: "Dann halt den IWDG; was soll's".
Wieder ein Blick auf das ST-Beispielprogramm, wieder ein Blick ins 
Manual: alles ganz einfach!

Weitere 24 Stunden spater steh ich nun hier. Fassungslos mich am Kopf 
kratzend.

Meine Vorgendsweise ist die:
TIM2 / CH4 tiggert alle 100ms.
Damit steuere ich eine CTRL-LED.
Dorthin habe ich auch IWDG_ReloadCounter() gesetzt.

Wenn ich nun gleich oder auch ein paar Zeilen unterhalb IWDG_init() 
einen Breakpoint setze und dann weiterfahre, funktioniert alles wie es 
soll.
Ohne den Breakpoint resetet sich das Miststück fortlaufend.
1
TIM2_init();
2
:
3
weitere inits ...
4
:
5
:
6
IWDG_init();  // 300ms timeout
7
TIM2_start(); 
8
:
9
:
Nach Stunden des TryAndError fand ich heraus, dass wenn ich diese 
Reihenfolge waehle, sich alles in Wohlwollen auflöst.
1
:
2
IWDG_init();  
3
TIM2_init();
4
TIM2_start(); 
5
:

Ich vermute, dass ich bei der Initialisierung des TIM2 etwas falsch 
mache. Aber anderseits: vieles in der Software basiert auf TIM2. Wenn da 
was falsch waere, haette ich das das sicher bememerkt.

(Da die Codes für TIM2 mehr als ein paar Zeilen sind, lege ich diese als 
Attachment bei.)

1
//=============================
2
// IWDG_init
3
//=============================
4
void IWDG_init(void)
5
{  
6
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
7
  IWDG_SetPrescaler(IWDG_Prescaler_32);
8
  IWDG_SetReload(375); 
9
  IWDG_ReloadCounter(); 
10
  //IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
11

12
  IWDG_Enable();
13
  while((IWDG->SR & IWDG_FLAG_RVU) != (uint32_t)RESET);
14
  DBGMCU_Config(DBGMCU_IWDG_STOP, ENABLE);
15
}

Dank im voraus!
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren