ST意法半导体
直播中

张丽

7年用户 1461经验值
私信 关注
[问答]

如何在不使用hard-coddding的情况下获取扇区中内存blovk的首地址?

我有以下结构要写入内存:
```
#define FLASH_CONFIG_START_ADDR ((uint32_t) 0x080E0000)
#define FLASH_CONFIG_END_ADDR ((uint32_t) 0x080E0040)
联合 NVRAM {
配置_t 配置;
uint8_t 数据[512];
}开发NVRAM;
```
我用这段代码写入内存
```
uint32_t l_address = FLASH_CONFIG_START_ADDR;
uint8_t l_index = 0x00;
l_address = FLASH_CONFIG_START_ADDR;
HAL_FLASH_Unlock();
FLASH_Erase_Sector(FLASH_SECTOR_11, VOLTAGE_RANGE_1);
while (l_address < FLASH_CONFIG_END_ADDR)
如果 (HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, l_address,
DevNVRAM.data[l_index]) == HAL_OK) {
l_index += 1;
l_地址 += 1;
}
HAL_FLASH_Lock();
```
然后我只是从同一个内存块中读取。
```
l_address = FLASH_CONFIG_START_ADDR;
l_index = 0x00;
while (l_address < FLASH_CONFIG_END_ADDR) {
DevNVRAM.data[l_index] = *(uint8_t*) l_address;
l_index += 1;
l_地址 += 1;
}
```
问题是下面的,当我读完整个扇区后,数据变得不一样了,特别是,它被零填充了。代码有什么问题?
PS 如何在不使用 hard-coddding 的情况下获取扇区中内存 blovk 的首地址?








回帖(1)

傅姁妮

2023-1-4 12:10:21
问题出在地址声明中。它实际上是 0x81C000(在 st-link 实用程序中查看)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分