Forum: Mikrocontroller und Digitale Elektronik STM32 Flash für Retain nutzen


von Curby23523 N. (Gast)


Lesenswert?

Hallo,

ich möchte auf ein EEPROM verzichten und im Flash direkt retain 
Variablen speichern. Ich benutze einen STM32F413VGT6.

Ich habe mir dazu folgende Funktionen geschrieben. Würden diese 
funktionieren? Habe ich es richtig verstanden, dass ich immer einen 
ganzen 128kb Sector löschen muss? Es gibt keine kleineren Pages? Das 
finde ich schade. Dann müsste ich ja ganze 128kB zwischenspeichern, auch 
wenn nur ein Byte verändert werden soll.

Lesen werde ich wohl mir einem normalen Pointer, der auf die 
entsprechende Flash-Adresse gerichtet ist oder?
1
uint8_t *p = 0x08040000; //z.B. lesen
2
3
void Flash_Unlock(){
4
  FLASH->KEYR = 0x45670123;
5
  FLASH->KEYR = 0xCDEF89AB;
6
}
7
8
void Flash_Lock(){
9
  FLASH->CR |= FLASH_CR_LOCK;
10
}
11
12
void Flash_Erase(uint8_t ucSector){
13
  while(FLASH->SR & FLASH_SR_BSY);
14
  FLASH->CR |= FLASH_CR_SER;
15
  FLASH->CR |= (ucSector << 3);
16
  FLASH->CR |= FLASH_CR_STRT;
17
  while(FLASH->SR & FLASH_SR_BSY);
18
}
19
20
void Flash_Write(uint8_t * pucSrc, uint8_t * pucDest, uint16_t usSize){
21
  while(FLASH->SR & FLASH_SR_BSY);
22
  FLASH->CR |= FLASH_CR_PG;
23
  while(usSize-- > 0){
24
    *pucDest++ = *pucSrc++;
25
  }
26
  while(FLASH->SR & FLASH_SR_BSY);
27
}

von A.. P. (arnonym)


Lesenswert?

Du könntest auch die EEPROM-Emulation von ST verwenden, falls das eine 
Option wäre. Dann musst du (mindestens) zwei Flash-Seiten freihalten, 
die dann für die Emulation verwendet werden. Je nach Controller-Typ 
musst du dann schauen, wie das Speicher-Layout aussieht, und wie groß 
die Seiten sind. Diese geben dann vor, wie groß dein emulierter EEPROM 
mindestens ist. Um das Löschen und Kopieren kümmert sich dann die 
Bibliothek, sobald eine Seite voll ist.

Müsstest mal für deinen Controller auf der ST-Seite nach der 
entsprechenden Application Note suchen.

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.