www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 Probleme mit Watchdog


Autor: Mehmet Kendi (mkmk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.
TIM2_init();
:
weitere inits ...
:
:
IWDG_init();  // 300ms timeout
TIM2_start(); 
:
:
Nach Stunden des TryAndError fand ich heraus, dass wenn ich diese 
Reihenfolge waehle, sich alles in Wohlwollen auflöst.
:
IWDG_init();  
TIM2_init();
TIM2_start(); 
:

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.)

//=============================
// IWDG_init
//=============================
void IWDG_init(void)
{  
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  IWDG_SetPrescaler(IWDG_Prescaler_32);
  IWDG_SetReload(375); 
  IWDG_ReloadCounter(); 
  //IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);

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

Dank im voraus!

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.