He estado tratando de programar una palabra de memoria flash en mi STM32F030F4, pero por alguna razón, cada vez que lo apago y vuelvo a encender, la ubicación de la memoria ha vuelto a "0xFFFFFFFF" de forma predeterminada. ¿Me estoy perdiendo de algo? ¿hay algo más que deba hacer para evitar que se borre la memoria al reiniciar?
Aquí está el código que estoy usando.
#define BRIGHTNESS_MEM 0x08003000
void FlashWrite(int data)
{
if(HAL_FLASH_Unlock()!=HAL_OK)
ErrorHandler(FLASH_ERROR);
FLASH_PageErase(BRIGHTNESS_MEM);
FLASH->CR = 0;
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, BRIGHTNESS_MEM, data) != HAL_OK)
ErrorHandler(FLASH_ERROR);
HAL_FLASH_Lock();
}
Sé que está escribiendo la memoria porque después de una escritura puedo usar la utilidad ST-link para inspeccionar la ubicación de la memoria.
Los pasos tomados al encender para leer la ubicación de la memoria:
int *mem = (int *)BRIGHTNESS_MEM;
// Load last brightness level
setBrightness(*mem);
Sé que se puede leer de esa multa porque he probado escribir en la memoria y luego comprobar la ubicación de los datos.