私はstm32l011k4のフラッシュアドレスを消去しようとします。そのような私のコード。Cで複数のフラッシュアドレスを削除する方法は?
#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では1バイトを削除することはできません。 – Olaf
チップのドキュメントをお読みください。可能な限り小さな消去サイズが表示されます。 – user694733