完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我们知道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 条评论
20个回答
|
|
|
单个地址只能写入一次,而且需要擦除,再就是看一下这个写入地址,在flash分布中,是否有其他应用。
|
|
|
|
|
|
裸机单跑这个小程序,理论上是只能写入一次,我这么做只是想充分利用好flash的每个BIT,前几次写入也是成功的,只是后面有点问题 |
|
|
|
|
|
这个问题我在做STC单片机时也遇到,我也没分析出原因,但是我想办法把这个问题给避掉。
|
|
|
|
|
|
|
|
|
stm32L051K 自带2K eeprom 不能用?
|
|
|
|
|
|
flash操作要更省电,还更快,所以....还是用flash吧
|
|
|
|
|
|
又要节约flash的容量,又要省电...不好做... |
|
|
|
|
|
你能想到FLASH的这种特性,并对这种特性进行利用还是很厉害的。 |
|
|
|
|
|
ST单次写入的是双字节型的,理论是写入一次后,这一位就不会被写入了。
|
|
|
|
|
|
对于这个双字单元,我第一次写入0X0000 00FF,第二次再往这个地方写0x0000 FF FF 还是可以成功的,再写0x00FF FFFF 也是可以的,但是再写0xFFFF FFFF就会变成0xFFFF FF7F,就有点感觉逻辑错误的问题,应该是芯片内部的逻辑问题吧。写了段小代码,循环这么写不同的地址,写了几KB都是一样的结果 |
|
|
|
|
|
|
|
|
|
|
|
理论同一个地址只能写入一次。
|
|
|
|
|
|
我有点不大懂啊,不是说写的话,只能由1变0吗,那你怎么实现的在同一位置写入0b 0001之后,再次写入0b 0011(不知道楼主是不是这个意思),但是这样操作的话是不是使第二位由0写成1了吗?
|
|
|
|
|
|
学习ing。。。
|
|
|
|
|
脑洞大赛11 发表于 2019-2-22 10:09 这个我是这样理解的,理论上flash写入的时候只能从1变0,但是你用仿真器看到的,是0变1,这个逻辑是反的,但是不影响我们判断嘛,估计是芯片内部逻辑方面的问题。在MSP430F系列里面,flash格式以后就是0XFF,写入就只能从1变0,这个stm32格式化以后全部是0X00,只能0变1,不知道这样表述懂我的意思没有。或者你吧前面的话,理解成,stm32格式户以后只能0变1. 在我的这个测试里面,stm32格式化后全部是0x00,所以我的写入方式是可以的,只是出现了不可理解的结果 |
|
|
|
|
|
STM32格式化后也是全FF。这个可以用ISP软件擦除后,再读取出来看看。
|
|
|
|
|
|
|
|
|
|
|
Jazzye 发表于 2019-2-22 10:28 这个样子啊 那我理解了 我C8051系列的用的多一些,C8051擦除后就是0xFF还,没用过STM32的FLASH擦写。 |
|
|
|
|
|
其他芯片上碰到类似问题,你看看芯片是不是有ECC(Error Correcttion Code)的逻辑,如果有这个逻辑可能会导致你将Flash从0变成1时不通过。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2797 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2403 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2276 浏览 0 评论
2388 浏览 1 评论
1637 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:39 , Processed in 0.995317 second(s), Total 82, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2998