C中如何删除多个flash地址?
How to delete multiple flash addresses in C?
我尝试擦除 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”。
有什么建议吗?
当你说 "byte" 时,你似乎在说 "page",这没有多大意义。
STM32的flash的最小可擦除单元通常称为"sector",比单个字节大很多
可以编程(即写入,即把 1 变成 0)单个单词,但是你不能擦除(即把 0 变成 1)小于某个限制的时间。通常扇区大小为几千字节,也可以随地址变化 space.
地址指向 EEPROM,而不是闪存。
您不必擦除 EEPROM 中的任何内容,只需将其解锁并写入新值即可。
但是,为了写入一个字节,您需要一个正确解除引用的指针,整数常量将不起作用。
#define SLAVE_ID_ADDR_I (*(volatile unsigned char *)0x08080001)
#define SLAVE_ID_ADDR_II (*(volatile unsigned char *)0x08080002)
#define SLAVE_ID_ADDR_III (*(volatile unsigned char *)0x08080003)
#define MASTERID (*(volatile unsigned char *)0x08080000)
void software_erase(void)
{
if(FLASH->PECR & FLASH_PECR_PELOCK)
HAL_FLASH_Unlock();
SLAVE_ID_ADDR_I = 0;
...
我尝试擦除 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”。
有什么建议吗?
当你说 "byte" 时,你似乎在说 "page",这没有多大意义。
STM32的flash的最小可擦除单元通常称为"sector",比单个字节大很多
可以编程(即写入,即把 1 变成 0)单个单词,但是你不能擦除(即把 0 变成 1)小于某个限制的时间。通常扇区大小为几千字节,也可以随地址变化 space.
地址指向 EEPROM,而不是闪存。
您不必擦除 EEPROM 中的任何内容,只需将其解锁并写入新值即可。
但是,为了写入一个字节,您需要一个正确解除引用的指针,整数常量将不起作用。
#define SLAVE_ID_ADDR_I (*(volatile unsigned char *)0x08080001)
#define SLAVE_ID_ADDR_II (*(volatile unsigned char *)0x08080002)
#define SLAVE_ID_ADDR_III (*(volatile unsigned char *)0x08080003)
#define MASTERID (*(volatile unsigned char *)0x08080000)
void software_erase(void)
{
if(FLASH->PECR & FLASH_PECR_PELOCK)
HAL_FLASH_Unlock();
SLAVE_ID_ADDR_I = 0;
...