STM32F0 HSI clock im debugg modus anhalten

Gast #5317941
Lesenswert?
• ▲
▼
Guten Tag

Für einen Run Time Test (Timeout durch IWDG & Takt Abweichung) will ich 
beim STM32F070 den HSI Clock beim debuggen (ST-LinkV2) anhalten und die 
Frequenz verändern (auf die Register einwirken, wie PLL) ohne manuell 
den Code zu verändern. Hat vielleicht jemand eine Idee wie ich das 
machen kann?

Freundliche Grüsse
Stefan
#5318234
Lesenswert?
• ▲
▼
Wenn ich das richtig verstehe willst du einfach nur testen ob der 
Watchdog zubeißt, falls HSI mal ausfallen sollte und willst dazu HSI 
anhalten und HSE läuft bei dir so wie ich das verstehe sowieso nicht.

Soweit ich weiß gibt es keine Möglichkeit dem Controller seine primäre 
Taktquelle einfach wegzunehmen. Eine Möglichkeit wäre meiner Meinung 
nach den Controller "geordnet" in den Stop-Mode zu versetzen. Damit der 
Debugger weiterhin mit dem Controller kommunizieren kann muss ein 
entsprechendes Bit im DBGMCU-Register gesetzt werden (siehe Kapitel 26).
#5318390
Lesenswert?
• ▲
▼
Stefan schrieb:
> Hat vielleicht jemand eine Idee wie ich das
> machen kann?

Code in den RAM via Debugger laden und mit ausgeschalteten Interrupts 
ausführen.

Man kann auch Register direkt vom Debugger aus beschreiben - eventuell 
direkt über die Addresse, aber ohne Taktsignal funktioniert die Debug 
Einheit vom Cortex-M auch nicht mehr.
Gast #5318495
Lesenswert?
• ▲
▼
Erstmal vielen Dank für die Antworten.

Jim M. schrieb:
> Man kann auch Register direkt vom Debugger aus beschreiben - eventuell
> direkt über die Addresse, aber ohne Taktsignal funktioniert die Debug
> Einheit vom Cortex-M auch nicht mehr.

Das mit dem Takt verstehe ich. Ich würde ich via Debugger
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
auf
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL2;
stellen

Also würdest du direkt in den RAM schreiben ist eigentlich eine gute 
Idee. Wie finde ich den die Adresse des Clock control register (RCC_CR)? 
Im ref manual steht ja nur wie es zu beschreiben ist.
Gast #5318529
Lesenswert?
• ▲
▼
Stefan schrieb:
> Wie finde ich den die Adresse des Clock control register (RCC_CR)?
> Im ref manual steht ja nur wie es zu beschreiben ist.

Dann wirf mal einen scharfen Blick auf S. 99, auf den Wert bei "Address 
offset", und auf S. 39 die Adresse die da bei "RCC" steht. Die musst du 
addieren um auf die Adresse des Registers zu kommen.
Die PLL-Faktoren lassen sich übrigens nur ändern wenn die PLL aus ist; 
du musst also auf eine andere Taktquelle umschalten, PLL abschalten, 
umkonfigurieren, wieder einschalten, und wieder auf PLL zurückschalten. 
Dauert natürlich mit Einschwingvorgang usw (Warten auf RCC_CR_PLLRDY und 
"RCC_CFGR_SW").

Wie wärs damit, einfach einen Breakpoint zu setzen? Bis du auf "Weiter" 
geklickt hast ist der Watchdog 10x abgelaufen.
Gast #5321443
Lesenswert?
• ▲
▼
Den Speicherbereich habe ich gefunden, danke dafür. Den Clock Fehler 
konnte ich provozieren, in dem ich den sysclock auf HSI umgestellt habe 
RCC CFGR-> SW auf 0x00, dann stellt sich HSI 8MHz ein, erwartet wird 
48MHz und der uController geht in den sicheren Zustand.

Dr. Sommer schrieb:
> Wie wärs damit, einfach einen Breakpoint zu setzen? Bis du auf "Weiter"
> geklickt hast ist der Watchdog 10x abgelaufen.

Wenn ich einen breakpoint setze läuft das Programm weiter und das ist im 
Wesentlichen mein Problem. Meine google suche ergibt immer das 
umgekehrte Problem, dass es schwierig ist zu debuggen und deshalb der 
IWDG im DBGMCU eingefroren werden muss.
Gast #5321579
Lesenswert?
• ▲
▼
Das IWDG Timeout kann ich jetzt ebenfalls ohne code Anpassung testen, 
die STL Libary, welche ich verwende, hat durch folgendes HAL Macro den 
IWDG eingefroren:

/* setup DBGMCU block - stop IWDG at break in debug mode */
__DBGMCU_CLK_ENABLE();
__HAL_FREEZE_IWDG_DBGMCU(); -> IWDG Zähler wird angehalten


Im Register DBGMCU lassen sich Timer, IWDG, WWDG etc. zu Debugzwecken 
einfrieren.

"Reference manual RM0360" Seite 718

Danke an alle beteiligten.

Gruss Stefan

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.