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_Program
nunca 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;
¿Puede intentar poner la siguiente línea al comienzo de su función EEPROM?
ScopedRomWriteLock make_rom_writable;
entonces HAL_FLASHEx_DATAEEPROM_Program
llama
chris stratton