打印
[STM32F1]

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

[复制链接]
753|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有没有可能写坏了? ...

不覆盖。满足某些条件就记录一组。不覆盖。

使用特权

评论回复
5
dongnanxibei| | 2017-6-6 15:59 | 只看该作者
你要看页面可以放多少个16byte了。。然后设置个编号

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
123782568 + 1 赞一个!
6
123782568|  楼主 | 2017-6-8 09:41 | 只看该作者
解决了。我先删除16页,就在这16页上写。10k的擦写次数够用的 。一年最多百十次的擦写。谢谢,各位的回答。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

46

帖子

0

粉丝