Flash页擦除时,只擦了页的一部分?

[复制链接]
 楼主| xiepengchenghn 发表于 2012-3-2 16:11 | 显示全部楼层 |阅读模式
我需要预留一部分Flash保存从上位机发送下来的程序,发现一个奇怪的现象。为什么在对最后一页擦除时,只擦了这一页的一部分?如图所示:
flash.jpg
几块板子都是这样,对已经擦除成FF的区域可以写入数据。对其他AA的区域却不行。请教下为什么?
还有几个相关问题搭车请教
1.STM32的程序代码是按照从低地址的Flash开始存放的吗?看.map文件似乎是这样的。
2.如果代码占据了很大的空间,那我在程序中对Flash擦除,是否有可能擦除自己的代码?
谢谢
香水城 发表于 2012-3-2 16:28 | 显示全部楼层
擦除后状态寄存器的值是什么?

另:
1. 一般的编译器似乎是这样安排的,但这完全取决于编译器,不是必须一定要从低地址的Flash开始存放。
2. 有这种可能性。
 楼主| xiepengchenghn 发表于 2012-3-2 16:43 | 显示全部楼层
2# 香水城

读回来的状态为0。我用memory窗口去查看这个寄存器地址处的值时,发现为AA,用变量gDebug = FLASH->CR;去读取后,发现是0
所以我怀疑是编译器查看功能的问题,然后我再把进行写操作的Flash地址的数据读回到变量里,发现写成功了,但是用memory去查看,发现也是AA。
严重怀疑是mdk本身的问题。

谢谢香主的及时解答。
我还想请教下,在option中将片上flash配置为两个区域,
QQ截图20120302164050.jpg
如何指定将所有代码放入一个区域?
是否需要将每个文件进行如下图这样的指定:
QQ截图20120302164209.jpg
香水城 发表于 2012-3-2 16:57 | 显示全部楼层
你应该在结束擦除Flash的时候,马上读状态寄存器的内容;最好是通过在程序中监视状态寄存器的内容来判断什么时候擦除结束。

我没做过具体操作,没法回答代码存放区域的问题。
 楼主| xiepengchenghn 发表于 2012-3-2 20:07 | 显示全部楼层
4# 香水城

就是在调用擦除的函数后,马上读的状态寄存器
香水城 发表于 2012-3-3 10:39 | 显示全部楼层
关键的是—— 通过在程序中监视状态寄存器的内容来判断什么时候擦除结束。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

267

帖子

1

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