c - C中如何删除多个flash地址?

标签 c stm32 keil flash-memory

我尝试删除 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/

相关文章:

c - 无法在嵌入式设备上分配内存

c - STM32 串行 DMA - 查找流的开头

c - FreeRTOS - STM32F4 上的堆栈损坏

c - 当我们用完 Cortex M3 上的内存时会发生什么

c - fprintf() 与 fwrite() 的速度

c - 使用 time.h 的奇怪 CLOCKS_PER_SEC 值

c++ - fwrite 因段错误而失败

c - 函数或宏定义使用哪一个

c - 当其中一个函数/宏在代码中时,Keil 创建 'faulty' hex 文件

c - 函数声明的宏不起作用