你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助!stm32的flash这样用貌似有点问题

[复制链接]
yangsangelaile 提问时间:2016-1-6 12:53 /
本帖最后由 yangsangelaile 于 2016-1-6 12:57 编辑

我们知道stm32的flash是按32bit写入的,对应位只能由1变0,要反过来只有通过片、块、段擦除:有个对时间和电能都要求极度严格的应用里面,我按这个流程这样来写入flash的数据:
启动-解锁flash
写入0b 0001,
上锁-关机
启动
写入0b 0011,
关机
启动
写入0b 0111
关机
以此类推写入(有点像写正字计数的道理,中间还有逻辑判断的过程不表)
0b1111
0b11111
0b111111
0b1111111
就是这个样子,理论上来说,flash只能由1变0,不能反过来,所以按照我的方法每次往高位的bit写入的时候是不影响低位已经写入的bit位的.
但是我在程序里面发现,前面几次都能正常运行,但是当已经写入到0xf的时候,下次本应该写入0x1f,却写入失败了,无效,通过SW调试接口看到这个flash地址上的数据根本就没变化!再往下写入0x3f的时候却变成了0x7f。。。我的程序找个空白地方,单独写入任何数据都没问题。还有,调试的时候jlink供电,不缺电
换过机器各种代码,发现问题应该就在这个flash的控制上面,这里跪求对stm32精通的大大出来解释一些这种现象的原因了
MCU是stm32L051K8
调试环境是 keil MDK-ARM 5.17+jlink
收藏 1 评论19 发布时间:2016-1-6 12:53

举报

19个回答
yangsangelaile 回答时间:2016-1-6 13:01:08
重要的事情,再说一遍,真的很缺电和时间,这样做就是为了减少flash擦除的时间,避免使用eeprom的电能消耗,不用32bit来计数,是为了尽量节约flash.
回答时间:2016-1-6 13:39:00
单个地址只能写入一次,而且需要擦除,再就是看一下这个写入地址,在flash分布中,是否有其他应用。
yangsangelaile 回答时间:2016-1-6 14:51:54
安 发表于 2016-1-6 13:39
单个地址只能写入一次,而且需要擦除,再就是看一下这个写入地址,在flash分布中,是否有其他应用。 ...

裸机单跑这个小程序,理论上是只能写入一次,我这么做只是想充分利用好flash的每个BIT,前几次写入也是成功的,只是后面有点问题
yanhaijian 回答时间:2016-1-6 15:29:21
这个问题我在做STC单片机时也遇到,我也没分析出原因,但是我想办法把这个问题给避掉。
zhangdaijin 回答时间:2016-1-6 15:38:37
xmshao 回答时间:2016-1-6 15:49:56
stm32L051K 自带2K eeprom 不能用?
yangsangelaile 回答时间:2016-1-6 16:39:28
xmshao 发表于 2016-1-6 15:49
stm32L051K 自带2K eeprom 不能用?

flash操作要更省电,还更快,所以....还是用flash吧
yangsangelaile 回答时间:2016-1-6 16:41:15
yanhaijian 发表于 2016-1-6 15:29
这个问题我在做STC单片机时也遇到,我也没分析出原因,但是我想办法把这个问题给避掉。 ...

又要节约flash的容量,又要省电...不好做...
yanhaijian 回答时间:2016-1-6 16:47:16
yangsangelaile 发表于 2016-1-6 16:41
又要节约flash的容量,又要省电...不好做...

你能想到FLASH的这种特性,并对这种特性进行利用还是很厉害的。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版