请教,怎样对STM32FARM中Flash的某一位擦除?

[复制链接]
8595|18
 楼主| qiang6091 发表于 2009-3-19 16:44 | 显示全部楼层 |阅读模式
    想把数据分块存储在Flash中,想单独对Flsh中某一部分进行擦除和写入,而不是对整个业擦除。 
    看了Flash.c文件中的选择擦除函数,没看懂什么意思,这个函数没有指定擦除地址竟然能实现擦除。
    有高手遇到过这类问题吗? 
香水城 发表于 2009-3-19 16:48 | 显示全部楼层

只能对STM32的Flash按页擦除,或对整个Flash区进行整体擦除

不可以对页长度以下的任何单位进行单独擦除。
 楼主| qiang6091 发表于 2009-3-19 16:50 | 显示全部楼层

擦除

哦,我看了LPC2138的资料,好像只能对扇区擦除
可是Flash.c文件中有对Byte进行擦除的函数
 楼主| qiang6091 发表于 2009-3-19 16:51 | 显示全部楼层

怎么改其中一个

如果我有5个数存储在一个业里边,要改其中一个怎么办呢?
香水城 发表于 2009-3-19 17:27 | 显示全部楼层

对于Flash存储器的内容,只能进行擦除和写入操作,不能修改

而且擦除操作也是按页进行的,不可能按字节擦除。任何一家的Flash都是如此。

需要按字节擦除的功能,请选用EEPROM。
 楼主| qiang6091 发表于 2009-3-20 08:36 | 显示全部楼层

好的

谢谢,看来STM32是在误导用户
 楼主| qiang6091 发表于 2009-3-20 08:39 | 显示全部楼层

还是想不通

在FLASH_CR寄存器中确实有对BIT擦除的设置。
香水城 发表于 2009-3-20 09:31 | 显示全部楼层

FLASH_CR寄存器中哪里有对BIT擦除的设置?

Flash存储器只能按页擦除或整片擦除,这是基本常识,怎么能说STM32在误导用户?

请把认为误导用户的段落贴出来,我们一起讨论一下。下图是Flash_CR寄存器的说明,你认为哪里误导了?
 楼主| qiang6091 发表于 2009-3-20 09:56 | 显示全部楼层

位5 OPTER

位5不是有擦除选择字节的设置吗
 楼主| qiang6091 发表于 2009-3-20 09:58 | 显示全部楼层

FLASH.c

在flash.c文件中也有相应的函数。
香水城 发表于 2009-3-20 10:38 | 显示全部楼层

选择字节是一个区域,而不是一个BIT

即使误解也应该理解为多BYTE的操作,而不是对BIT的操作。

 楼主| qiang6091 发表于 2009-3-20 10:42 | 显示全部楼层

您的意思是?

您的意思是说可以对多个个BYTE进行擦除吗?
具体怎么操作呢?
香水城 发表于 2009-3-20 10:43 | 显示全部楼层

手册中其它关于选择字节的说明

下图显示选择字节是一个区域:



下图显示这个区域具体包含哪些内容:




如果一定要咬文嚼字,我们可以把它写成“选择字节区”,谢谢!
香水城 发表于 2009-3-20 11:01 | 显示全部楼层

关于12楼的问题,请看下面手册的第2.3.5节

 楼主| qiang6091 发表于 2009-3-20 11:20 | 显示全部楼层

哦,明白了

原来是对选择字节设置。
多谢了
王紫豪 发表于 2009-3-20 12:08 | 显示全部楼层

变通一下,先读出来(页),在更改,再擦,然后再写

 楼主| qiang6091 发表于 2009-3-20 12:09 | 显示全部楼层

我已经按照楼上的方法做了,多谢

ak64 发表于 2014-12-11 13:57 | 显示全部楼层
lulin121 发表于 2015-12-5 21:56 | 显示全部楼层
先复制出来,再全部擦除,再重新写入是可以,但是这期间如果断电的话,有可能导致所有的数据吊事,这就让我们不得不编写更多额外的代码来确保数据不会丢失,或尽可能不会丢失
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

124

帖子

0

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