I've got an STM32L073RZ and I'm attempting to write a 4 byte value to the internal 6 KB EEPROM. I'm running MbedOS 5.11.4 but attempting to use the HAL for this. Here's the 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();
The program seems to hang when writing to the EEPROM as the function HAL_FLASHEx_DATAEEPROM_Program
never returns. As far as I'm aware I'm not doing anything wrong but obviously I must be. Does anyone have any pointers?
EDIT: I've now also tried a code snippet from the STM32L073RZ reference manual, still with the same issue:
*(uint32_t *)(DATA_EEPROM_BASE) = calibrationFactor_bits;
Best Answer
Can you try to put the line below at the start of your EEPROM function,
then call
HAL_FLASHEx_DATAEEPROM_Program
.