Forum: Mikrocontroller und Digitale Elektronik STM32 Powerdown während Flash Beschreiben


von Bert S. (kautschuck)


Lesenswert?

Hi,

Mein STM32F405VGT6 hatte während dem Beschreiben des Flashs einen 
Stromausfall und nun gibt mir
1
status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);

immer einen HAL_ERROR zurück und zwar den FLASH_FLAG_PGPERR und den 
FLASH_FLAG_PGSERR. Ich habe mal den uC mit dem STUtility komplett 
gelöscht, jedoch hat das leider auch nichts mehr gebracht. Jemand eine 
Idee, wie ich da wieder an den Flash ran komme?

: Bearbeitet durch User
von Steffen R. (steffen_rose)


Lesenswert?

Du hast aktuell ein Programm laufen, welches in den Flash schreibt?
Läuft dieses im RAM oder im Flash?

Um einen Fehler in deinem Programm auszuschließen, läßt sich ein 
Programm per STUtility flashen?

von Bert S. (kautschuck)


Lesenswert?

Steffen R. schrieb:
> Du hast aktuell ein Programm laufen, welches in den Flash schreibt?
> Läuft dieses im RAM oder im Flash?
>
> Um einen Fehler in deinem Programm auszuschließen, läßt sich ein
> Programm per STUtility flashen?

Ich konnte es nun beheben, habe einfach mal eine ältere Version des 
Programmes hochgeladen. Das Programm schreibt eigentlich nur bei 
Änderungen in den Flash und läuft im RAM. Auch per STUtility konnte ich 
es flashen. Ich versuche nun aber noch rauszufinden, warum das vorhin 
passiert ist.

von Bert S. (kautschuck)


Lesenswert?

Ich denke ich habe den Fehler gefunden, oder zumindest mit was er 
korreliert. Ich hatte in der Main Loop die ganze Zeit 
HAL_WWDG_Refresh(&hwwdg); getriggert, obwohl der Watchdog nicht aktiv 
(nicht initialisiert) war. Dies hat irgendwie schwere Probleme mit dem 
Flash verursacht. Warum das so ist kann ich nicht sagen, jemand eine 
Idee?

: Bearbeitet durch User
von TrollJäger (Gast)


Lesenswert?

Lern gescheit programmieren....

Dem ist sonst nichts hinzuzufügen.

von Bert S. (kautschuck)


Lesenswert?

TrollJäger schrieb:
> Lern gescheit programmieren....

Genau, einfach keine Fehler programmieren und alles ist gut...

von TrollJäger (Gast)


Lesenswert?

Bert S. schrieb:
> TrollJäger schrieb:
>> Lern gescheit programmieren....
>
> Genau, einfach keine Fehler programmieren und alles ist gut...

Nein, so war es nicht gemeint.

ABER wenn du in der main loop (!) ohne zeitlichen Bezug hirnlos pollst, 
dazu noch eine Funktion die nicht mal benötigt wird: nun, DAS ist kein 
Zeugnis für jemanden, der sein Handwerk versteht.

von Stefan F. (Gast)


Lesenswert?

TrollJäger schrieb:
> ABER wenn du in der main loop (!) ohne zeitlichen Bezug hirnlos pollst,
> dazu noch eine Funktion die nicht mal benötigt wird: nun, DAS ist kein
> Zeugnis für jemanden, der sein Handwerk versteht.

Woher weißt du denn wie seine mail loop aussieht? Ich sehe in dem ganzen 
Thread nicht den Quelltext!

von TrollJäger (Gast)


Lesenswert?

Stefanus F. schrieb:
> Woher weißt du denn wie seine mail loop aussieht? Ich sehe in dem ganzen
> Thread nicht den Quelltext!

Bert S. schrieb:
> Ich hatte in der Main Loop die ganze Zeit
> HAL_WWDG_Refresh(&hwwdg); getriggert, obwohl der Watchdog nicht aktiv
> (nicht initialisiert) war.

Auch so ein Profiprogger wie der TO, wa?

von Stefan F. (Gast)


Lesenswert?

Sorry, aber deine Methode, auf Basis dieser einzigen Zeile Code diesen 
prolligen Kommentar abzulassen finde ich ziemlich armselig. Das kannst 
du besser.

Wie ist denn dein Plan, hier zu konstruktiver Mitarbeit zu kommen?

von Bert S. (kautschuck)


Lesenswert?

TrollJäger schrieb:
> ABER wenn du in der main loop (!) ohne zeitlichen Bezug hirnlos pollst,
> dazu noch eine Funktion die nicht mal benötigt wird: nun, DAS ist kein
> Zeugnis für jemanden, der sein Handwerk versteht.

Nun ja, ein Watchdog hat eine Reset-Funktion, wenn ich diese nicht 
polle, dann resetet er. Da ich Debuggen wollte, habe ich natürlich den 
Watchdog deaktiviert, aber leider vergessen die Reset-Funktion 
auszukommentieren.

Wenn du aber nur auf Grund dieses Fehlers auf meine Programmierkentnisse 
schließen kannst, dann ist das schon eine herausragende Leistung.

von TrollJäger (Gast)


Lesenswert?

lol, ihr versüßt mir echt den Tag :-)

Also der Reihenfolge nach:

Stefanus F. schrieb:
> Sorry, aber deine Methode, auf Basis dieser einzigen Zeile Code diesen
> prolligen Kommentar abzulassen finde ich ziemlich armselig. Das kannst
> du besser.

Klar kann ich es besser :-) Genauso, wie ich auch ohne Quellcode Texte 
durchlesen und interpretieren kann...

Stefanus F. schrieb:
> Wie ist denn dein Plan, hier zu konstruktiver Mitarbeit zu kommen?

Zum Verstehen sowie Lösen der Probleme anregen durch schonungslose 
Darstellung der gemachten Fehler sowie durch FMEA des Programmierstiels. 
Und deiner?

Bert S. schrieb:
> Nun ja, ein Watchdog hat eine Reset-Funktion, wenn ich diese nicht
> polle, dann resetet er.

Das ist richtig, dafür ist er schließlich da. Aber man sollte sinnvoller 
Weise zumindest eine zeitliche Abhängigkeit sowie einen 
Plausibilitätstest einbauen.

Bert S. schrieb:
> Da ich Debuggen wollte, habe ich natürlich den
> Watchdog deaktiviert, aber leider vergessen die Reset-Funktion
> auszukommentieren.

Gewöhne es dir direkt an, den Watchdog erst beim Release dazuzupacken. 
Vorher sind andere Sachen wichtiger.

Bert S. schrieb:
> Wenn du aber nur auf Grund dieses Fehlers auf meine Programmierkentnisse
> schließen kannst, dann ist das schon eine herausragende Leistung.

Wenn du damit Methodik meinst, dann ja.

Gegenfrage, jetzt wo wir uns so gut kennengelernt haben:

durch welche Vorgehensweise hätte man

a.) den Fehler von Anfang an verhindern können?

b.) den Fehler in kürzester Zeit einkreisen können?

@Stefanus F.: kannst gerne mitmachen :-)

von Stefan F. (Gast)


Lesenswert?

TrollJäger schrieb:
> @Stefanus F.: kannst gerne mitmachen :-)

Ich finde, diesen Vorschlag gut:

> Gewöhne es dir direkt an, den Watchdog erst beim Release dazuzupacken.
> Vorher sind andere Sachen wichtiger.

Es kommt mir komisch vor, dass HAL_WWDG_Refresh() bei deaktiviertem 
Watchdog Probleme macht. Da würde ich mal intensiver nachforschen.

Kann es sein, das deine Variable hwwdg jetzt nicht initialisiert ist? 
Falls nicht, kannst du mal den Quelltext dieser Funktion zeigen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.