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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Markus M. (adrock)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.