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_Program
nie 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;
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
.
Chris Stratton