我試圖擦除stm32l011k4中的Flash地址。我的代碼就是這樣;如何刪除C中的多個Flash地址?
#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」。
有什麼建議嗎?
給出的值不是頁面,而是字節地址。您無法刪除Flash中的單個字節。 – Olaf
請閱讀芯片的文檔。它應該告訴你儘可能小的擦除大小。 – user694733