我尝试删除 stm32l011k4 中的闪存地址。我的代码就是这样;
#define SLAVE_ID_ADDR_I 0x08080001
#define SLAVE_ID_ADDR_II 0x08080002
#define SLAVE_ID_ADDR_III 0x08080003
#define MASTERID 0x08080000
void software_erase(void){
HAL_FLASH_Unlock();
/* Fill EraseInit structure*/
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = SlaveID_III;
EraseInitStruct.NbPages = 4;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
{
playTone=3;
}
else{
MasterID = 0;
SlaveID_I = 0;
SlaveID_II = 0;
SlaveID_III = 0;
MasterID_loaded = 0;
SlaveID_loaded_I = 0;
SlaveID_loaded_II = 0;
SlaveID_loaded_III = 0;
clear_keyfobs = 1;
playTone=2;
}
}
编辑: 但我想删除 0x08080001 - 0x08080003 之间的字节。不是所有部分。 这意味着必须删除“0x08080001、0x08080002、0x08080003”,但必须保留“0x08080000”。
有什么建议吗?
最佳答案
当你说“字节”时,你似乎在说“页面”,这没有多大意义。
STM32 flash 的最小可删除单元通常称为“扇区”,比单个字节大得多。
编程(即写入,即将 1 变为 0)单个单词是可能的,但您不能一次删除(即,将 0 变为 1)少于某个限制。通常扇区大小为几千字节,也可以随地址空间变化。
关于c - C中如何删除多个flash地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43582168/