STM32L0 Hängt beim Schreiben des EEPROM

Ich habe einen STM32L073RZ und versuche, einen 4-Byte-Wert in das interne 6-KB-EEPROM zu schreiben. Ich verwende MbedOS 5.11.4, versuche aber, die HAL dafür zu verwenden. Hier ist der Code:

HAL_Init();

float calibrationFactor = 13000.0;
uint32_t calibrationFactor_bits;

LOG("Store float in 32 bits");
memcpy(&calibrationFactor_bits, &calibrationFactor, sizeof(uint32_t));

LOG("Unlock EEPROM");
HAL_FLASHEx_DATAEEPROM_Unlock();

LOG("Write to EEPROM");
HAL_StatusTypeDef success = HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAM_WORD, DATA_EEPROM_BASE, calibrationFactor_bits);
LOG("HAL_StatusTypeDef: %d", success);

LOG("Lock EEPROM");
HAL_FLASHEx_DATAEEPROM_Lock();

Das Programm scheint beim Schreiben in das EEPROM zu hängen, da die Funktion HAL_FLASHEx_DATAEEPROM_Programnie zurückkehrt. Soweit ich weiß, mache ich nichts falsch, aber offensichtlich muss ich es sein. Hat jemand irgendwelche Hinweise?

EDIT: Ich habe jetzt auch ein Code-Snippet aus dem STM32L073RZ- Referenzhandbuch ausprobiert, immer noch mit dem gleichen Problem:

*(uint32_t *)(DATA_EEPROM_BASE) = calibrationFactor_bits;
"Hängt" ist nicht wirklich ein nützlicher Problembericht - verwenden Sie den Debugger, um herauszufinden, wo es sich befindet, zum Beispiel in einer Endlosschleife oder im Hard-Fault-Handler. Vielleicht möchten Sie etwas Einfaches ohne mbed os ausprobieren.

Antworten (1)

Können Sie versuchen, die folgende Zeile an den Anfang Ihrer EEPROM-Funktion zu setzen,

ScopedRomWriteLock make_rom_writable;

dann anrufen HAL_FLASHEx_DATAEEPROM_Program.