如何在C中删除多个闪存地址?
16lz
2021-01-22
I try to erase flash address in stm32l011k4. My code like that;
我尝试擦除stm32l011k4中的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;
}
}
Edit: But I want to erase bytes between 0x08080001 - 0x08080003. Not all sections. It's means "0x08080001, 0x08080002, 0x08080003" must be deleted but "0x08080000" must be remain.
编辑:但我想删除0x08080001 - 0x08080003之间的字节。不是所有部分。这意味着必须删除“0x08080001,0x08080002,0x08080003”,但必须保留“0x08080000”。
Any suggestion?
2 个解决方案
#1
2
The addresses are pointing to EEPROM, not flash.
地址指向EEPROM,而不是闪存。
You don't have to erase anything in EEPROM, just unlock it and write the new values.
您不必擦除EEPROM中的任何内容,只需将其解锁并写入新值即可。
However, in order to write a byte, you'd need a properly dereferenced pointer, an integer constant won't work.
但是,为了写一个字节,你需要一个正确的解引用指针,一个整数常量将不起作用。
#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;
...
更多相关文章
- 将字节列表转换为字节字符串
- Python学习之——Tcp/ip基础/IP地址/DNS/端口简介
- 【python coding 1:网络检测】ping本地文件里的ip地址
- python正则表达式匹配时间和IP地址
- Python——域名解析成IP地址
- 套接字错误“IP地址在其上下文中无效” - Python
- python中查看变量内存地址的方法
- CentOS 7下配置IP地址
- 如果后台的SVN服务器IP地址更改了,如何修改客户端的连接url呢?