stm32的flash按32bit写入,对应位只能由1变0

2019-07-14 14:03发布

我们知道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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
fantasyo老时光
1楼-- · 2019-07-15 05:08
Jazzye 发表于 2019-2-22 08:47
又要节约flash的容量,又要省电...不好做...

你能想到FLASH的这种特性,并对这种特性进行利用还是很厉害的。
TOPCB
2楼-- · 2019-07-15 07:54
ST单次写入的是双字节型的,理论是写入一次后,这一位就不会被写入了。
Jazzye
3楼-- · 2019-07-15 13:25
 精彩回答 2  元偷偷看……
Jazzye
4楼-- · 2019-07-15 15:01
fantasyo老时光 发表于 2019-2-22 08:53
你能想到FLASH的这种特性,并对这种特性进行利用还是很厉害的。

要被电能逼疯了
TOPCB
5楼-- · 2019-07-15 20:13
理论同一个地址只能写入一次。
脑洞大赛11
6楼-- · 2019-07-16 01:08
我有点不大懂啊,不是说写的话,只能由1变0吗,那你怎么实现的在同一位置写入0b 0001之后,再次写入0b 0011(不知道楼主是不是这个意思),但是这样操作的话是不是使第二位由0写成1了吗?

一周热门 更多>