无法清除闪存中的数据(STM32)

时间:2015-11-13 17:11:06

标签: c stm32f4discovery flash-memory hal

我正在尝试将一些数据保存到 STM32F407 板上的闪存中。在我保存它们之前,我需要擦除内存扇区。我从地址0x08004000开始选择16 Kbytes Sector1 并选择电压范围2.1-2.7 V 。我正在使用HAL库。

程序在 FLASH-> CR | = FLASH_CR_STRT; 后面的行中停止响应HAL_FLASHEx_Erase() - > FLASH_Erase_Sector()函数。

我很确定这是我的错,但我无法找出问题所在。

sudo service apache2 restart

我选择了错误的电压范围或扇区数吗?

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

如果您的程序大于16k,那么您刚刚设法从闪存中删除了部分内容。您应该从闪存结束时选择一个扇区(但是擦除时间会更长),或者在链接器配置中重新排列这些部分。

答案 1 :(得分:1)

我找到了解决方案。我使用HAL_FLASH_Lock()函数而不是HAL_FLASHEx_Erase()函数,它工作正常。我也改变了SECTOR,因为我意外地删除了我的程序。

unit32_t address = 0x0800C000;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);

FLASH_Erase_Sector(FLASH_SECTOR_3, VOLTAGE_RANGE_3);

//----------------------------write data  
uint8_t data = 'A';
if (HAL_FLASH_Program(TYPEPROGRAM_BYTE, address, data) != HAL_OK) {
    HAL_FLASH_Lock();
    return;
}
HAL_FLASH_Lock();

感谢您的帮助。