我试图将一些数据保存到我的STM32F407板上的闪存中。在我可以保存它们之前,我需要清除内存扇区。我选择了16千字节Sector1从地址0x08004000开始并选择电压范围2.1-2.7 V。我正在使用HAL库。不能擦除闪存中的数据(STM32)
程序停止响应后FLASH-> CR | = FLASH_CR_STRT;行内HAL_FLASHEx_Erase() - > FLASH_Erase_Sector()函数。
我很确定这是我的错,但我找不出什么是错的。
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_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.Sector = FLASH_SECTOR_1;
EraseInitStruct.TypeErase = TYPEERASE_SECTORS;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_2;
EraseInitStruct.NbSectors = 1;
uint32_t SectorError = 0;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK) {
HAL_FLASH_Lock();
return;
}
uint16_t data = 300;
//----------------------------write data
if (HAL_FLASH_Program(TYPEPROGRAM_WORD, start_address, data) != HAL_OK) {
HAL_FLASH_Lock();
return;
}
HAL_FLASH_Lock();
我是否选择错误的电压范围或扇区数?
感谢您的回答。
您可能对电气工程堆栈交换中的这个问题有更好的运气 - 请参阅他们的“[我可以问什么问题?](http://electronics.stackexchange.com/help/on-topic)”页面。 – tonysdg