STM32L0 Se cuelga al escribir EEPROM

Tengo un STM32L073RZ y estoy intentando escribir un valor de 4 bytes en la EEPROM interna de 6 KB. Estoy ejecutando MbedOS 5.11.4 pero intento usar HAL para esto. Aquí está el código:

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();

El programa parece bloquearse al escribir en la EEPROM ya que la función HAL_FLASHEx_DATAEEPROM_Programnunca regresa. Por lo que sé, no estoy haciendo nada malo, pero obviamente debo estarlo. ¿Alguien tiene alguna sugerencia?

EDITAR: ahora también probé un fragmento de código del manual de referencia STM32L073RZ , todavía con el mismo problema:

*(uint32_t *)(DATA_EEPROM_BASE) = calibrationFactor_bits;
"Se cuelga" no es realmente un informe de problema útil: use el depurador para averiguar dónde está sentado, por ejemplo, en un bucle infinito o en el controlador de fallas permanentes. Es posible que desee probar algo simple sin mbed os.

Respuestas (1)

¿Puede intentar poner la siguiente línea al comienzo de su función EEPROM?

ScopedRomWriteLock make_rom_writable;

entonces HAL_FLASHEx_DATAEEPROM_Programllama