如何解决闪存扇区擦除-STM32F207
我目前具有以下代码设置,以擦除STM32F207内部闪存的特定扇区(在freeRTOS环境中):
static void eraseSector(uint32_t sector)
{
FLASH_EraseInitTypeDef eraseInitStruct = { 0 };
HAL_StatusTypeDef status = HAL_OK;
if( HAL_FLASH_Unlock() != HAL_OK )
{
printDebug("Error unlocking Flash\r\n");
}
eraseInitStruct.TypeErase = TYPEERASE_SECTORS;
eraseInitStruct.VoltageRange = VOLTAGE_RANGE_3;
eraseInitStruct.Sector = sector;
eraseInitStruct.NbSectors = 1;
status = HAL_FLASHEx_Erase_IT(&eraseInitStruct);
if (status != HAL_OK)
{
print("Unable to erase Sector: %d\n",status);
}
else
{
print("Flash sector %d erased. Status: %d\n",sector,status);
}
/* Wait for the erase operation to complete */
osSemaphoreWait(FlashOperation_sem,osWaitForever);
if( HAL_FLASH_Lock() != HAL_OK )
{
print("Error locking Flash\n");
}
}
执行此代码时,只要在FLASH_Erase_Sector()中设置了FLASH_CR开始位(从HAL_FLASHEx_Erase_IT()函数调用),应用程序就会重置/崩溃。我已经尝试过使用多个未使用的闪存扇区,它们都会崩溃。
我还尝试直接调用FLASH_Erase_Sector(),并且仍然存在。
解决方法
证明我的崩溃是由我的看门狗死亡(我的疏忽大意)造成的。我在闪存擦除和写入操作期间暂时禁用了看门狗,它工作正常。
不过,更好的选择是将功能放在RAM中(如@old_timer和@kkrambo所建议),以防止CPU被阻塞太长时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。