[STM32F1] 请问下stm32的内部flash操作的问题。

[复制链接]
1010|5
 楼主| 123782568 发表于 2017-6-5 17:14 | 显示全部楼层 |阅读模式
本帖最后由 123782568 于 2017-6-5 17:17 编辑

我不要定时向flash里保存一组16字节的数据。但是我看了下stm32的操作flash。每次写flash好像都需要先擦除,而且需按页擦或块擦。要是这样的话,我每次保存这16字节的数据该如何操作呢。望高手指教!

//FLASH写入数据测试
void writeFlashTest(void)
{
    //1、解锁FLASH
  HAL_FLASH_Unlock();

    //2、擦除FLASH
    //初始化FLASH_EraseInitTypeDef
    FLASH_EraseInitTypeDef f;
    f.TypeErase = FLASH_TYPEERASE_PAGES;
    f.PageAddress = addr;
    f.NbPages = 1;
    //设置PageError
    uint32_t PageError = 0;
    //调用擦除函数
    HAL_FLASHEx_Erase(&f, &PageError);

    //3、对FLASH烧写
    HAL_FLASH_Program(TYPEPROGRAM_WORD, addr, writeFlashData);

    //4、锁住FLASH
  HAL_FLASH_Lock();
}

这个是从网上找到的例子,不知该如何该。我不可能每次存一组16字节的数据,就要把一页数据擦掉吧?

 楼主| 123782568 发表于 2017-6-5 17:14 | 显示全部楼层
这个例子是从网上找的,不知该如何改,请高手指教下吧
yklstudent 发表于 2017-6-5 17:21 | 显示全部楼层
数据覆盖吗?
不然你就写攒到一页的数据然后再一次性写好了,不过你考虑过FLASH有没有可能写坏了?
 楼主| 123782568 发表于 2017-6-6 08:42 | 显示全部楼层
yklstudent 发表于 2017-6-5 17:21
数据覆盖吗?
不然你就写攒到一页的数据然后再一次性写好了,不过你考虑过FLASH有没有可能写坏了? ...

不覆盖。满足某些条件就记录一组。不覆盖。
dongnanxibei 发表于 2017-6-6 15:59 | 显示全部楼层
你要看页面可以放多少个16byte了。。然后设置个编号

评分

参与人数 1威望 +1 收起 理由
123782568 + 1 赞一个!

查看全部评分

 楼主| 123782568 发表于 2017-6-8 09:41 | 显示全部楼层
解决了。我先删除16页,就在这16页上写。10k的擦写次数够用的 。一年最多百十次的擦写。谢谢,各位的回答。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部