我正在尝试将一些数据保存到我的STM32F407板上的闪存中。在我保存它们之前,我需要擦除内存扇区。我选择了从地址 0x08004000 开始的16 KB Sector1并选择了Voltage range 2.1-2.7 V。我正在使用 HAL 库。
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();
我是否选择了错误的电压范围或扇区数?
感谢您的回答。