2025-08-23 7:37 AM
I am trying to erase a sector of the flash memory on my STM32H503RB. I have successfully validated that I can write to the flash, but when I attempt to erase the sector that I wrote, the contents that I wrote stay the same. I have a feeling that I am just erasing the wrong sector, but I can't seem to find where I went wrong. I'm pretty sure that I can erase, because if I put in a deliberately wrong sector number (sector 4, which corresponds to the location of the LL drivers) the device hard faults (which is what you expect when you erase the drivers).
I am trying to erase the sector starting at 0x0801_0000, which I would expect to be sector 8. (sectors are 8 kiB, correct?) I have tried erasing sector 8 of bank 1, sector 8 of bank 2, and sector 0 of bank 2, but none of these seem to work. Am I misinterpreting how the banks and sectors interact?
Code:
#define FLASH_BASE_ADDR (0x08000000UL)
// FLASH_SECTOR_SIZE is 0x2000U
FLASH_EraseInitTypeDef erase = { 0 };
uint32_t addr = 0x08010000;
erase.TypeErase = FLASH_TYPEERASE_SECTORS;
erase.Banks = FLASH_BANK_1; // I have also tried FLASH_BANK_2
erase.Sector = (addr - FLASH_BASE_ADDR) / FLASH_SECTOR_SIZE;
erase.NbSectors = 1;
uint32_t error;
HAL_FLASH_Unlock();
HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase, &error); // status is HAL_OK
HAL_FLASH_Lock();
Solved! Go to Solution.
2025-08-23 7:50 AM
> uint32_t addr = 0x08010000;
Try erasing sector 0 of bank 2. Also ensure banks are not swapped.
Try the same thing with STM32CubeProgrammer to see if it you get success there.
2025-08-23 7:50 AM
> uint32_t addr = 0x08010000;
Try erasing sector 0 of bank 2. Also ensure banks are not swapped.
Try the same thing with STM32CubeProgrammer to see if it you get success there.
2025-08-23 8:57 AM
I'm not sure what I did the first time I tried Bank 2 Sector 0, but it seems to have worked this time.