Forum: Mikrocontroller und Digitale Elektronik STM32 G030 Unlock flash registers -> Hardfault


von Markus M. (adrock)


Lesenswert?

Hi,

ich scheine das gleiche (oder ähnliches?) Problem zu haben wie hier:

Beitrag "STM32F4 Flash Unlock -> Hard Fault"

Ich habe einen einfachen Code geschrieben um Daten ins Flash zu 
schreiben. Wenn ich den Code step-by-step im Debugger durchlaufe 
funktioniert er, wenn ich allerdings das Programm direkt laufen lasse 
("GO" im Debugger), kassiere ich beim ersten Schreibzugriff auf 
FLASH->KEYR einen Hardfault.

Hat jemand eine Idee wieso?

Im AHB ist der Flash-Controller enabled, System-Clock ist 24 MHz (PLL).
1
            // Unlock flash registers
2
            FLASH->KEYR = 0x45670123;   // <<< Hardfault
3
            FLASH->KEYR = 0xcdef89ab;

Gruß
Markus

von Markus M. (adrock)


Lesenswert?

Hmm.... okay, hat sich wohl erledigt :-)

Es lag wohl daran, dass unter bestimmten Umständen das LOCK Bit im 
FLASH->CR beim Programmstart schon (oder noch) gelöscht ist. Offenbar 
setzt es der Debugger (Segger Embedded Studio) nach dem Programmieren 
des Flash nicht zurück.

Ein erneutes Schreiben der KEYR führt dann zu einem Hardfault.

Ich kann es so reproduzieren:

- Controller über den Debugger Neustart
-> LOCK gesetzt
--> Funktion funktionier wie erwartet

- Änderung am Source vorgenommen, so das neu geflasht werden muss
- Controller im Debug-Modus gestartet
-> LOCK gelöscht
--> Funktion erzeugt Hardfault

(auch wenn ich den Code für das Flashen gänzlich deaktiviere bleibt das 
Verhalten des LOCK Bits beim Starten gleich. Wenn vorher geflasht wurde 
ist es schon gelöscht. IMHO nicht ganz sauber oder ein Bug des 
Controllers zusammen mit dem SWD-Interface - kA.).

Abhilfe: Bevor man versucht das LOCK zu deaktivieren, erstmal testen ob 
es nicht schon deaktiviert ist.

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.