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;
    ...