STM32 Powerdown während Flash Beschreiben

OP #5546872
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?
OP #5546931
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.
OP #5546944
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?
Gast #5546973
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.
Gast #5547017
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!
Gast #5547030
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?
OP #5547072
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.
Gast #5547086
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 :-)
Gast #5547099
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?

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