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

求助!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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版