Forum: Mikrocontroller und Digitale Elektronik STM32: Page Erase + Program funktioniert nicht nacheinader


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 Karin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo :)
Ich versuche während der Laufzeit Daten in den Flash (STM32F303K8) zu 
schreiben. Dabei stieß ich auf verschiedene Probleme:
1
void put_in_Flash(uint32_t data)
2
{  
3
  const uint32_t pageAddress = 0x800F800;
4
  HAL_FLASH_Unlock();
5
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_SR_PGERR );
6
  FLASH_PageErase(pageAddress);
7
  HAL_Delay(5000);
8
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_SR_PGERR );
9
  HAL_FLASH_Program(TYPEPROGRAM_WORD, pageAddress, (uint64_t)data);
10
  HAL_FLASH_Lock();
11
}

Ich rufe mit set_in_Flash(0xAAAA); auf.

Nun zu meinem Problem: Wenn ich den Code so wie er ist ausführe, dann 
wird lediglich die Page gelöscht, aber nicht beschrieben. Wenn ich die 
Zeile zum Löschen jeodch auskommentiere, schreibt er meine Werte. Daher 
denke ich, dass etwas im Ablauf nicht ganz passt. Kann mir jemand hier 
einen Tipp geben, was noch fehlt?

Daneben habe ich noch eine Frage: Müssen immer 64bit beschrieben werden? 
Bzw ein Vielfaches davon? Und ist es diese Passage im Manual, die das 
aussagt:
1
Memory organization: 16 Kbit x 64 bits in STM32F303x6/8 and STM32F328x8 devices

von Alex (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Moin,
Du solltest wahrscheinlich besser die Flags abwarten:
https://community.st.com/s/question/0D50X0000ASrjgjSQB/halflashprogram-returns-halok-but-does-not-appear-to-write-the-flash

schönen Gruß,
Alex

von Bauform B. (bauformb)


Bewertung
1 lesenswert
nicht lesenswert
Karin schrieb:
> Müssen immer 64bit beschrieben werden?
> Bzw ein Vielfaches davon? Und ist es diese Passage im Manual, die das
> aussagt:
> Memory organization: 16 Kbit x 64 bits in STM32F303x6/8 and STM32F328x8
> devices

Nein, der Datenbus zum Flash ist 64 Bit breit, man kann 64 Bit parallel 
lesen, aber schreiben muss man 16 Bit, nicht mehr und nicht weniger. Die 
Feinheiten sind im RM0316 unter - Flash program and erase operations - 
Main Flash memory programming - beschrieben.

Vorsicht: Die Flash-Programmierung funktioniert bei allen STM32 sehr 
unterschiedlich. Der F205 ist z.B. 128 Bit breit und man darf 8, 16, 32 
oder 64 Bit am Stück schreiben. Der L552 ist umschaltbar 64 oder 128 Bit 
breit und muss immer mit 64 Bit geschrieben werden, weil daraus 8 
ECC-Bits berechnet werden. Und so weiter...

: Bearbeitet durch User

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.