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

STM32L476先用仿真器擦除FLASH后在程序中写不成功

[复制链接]
陳勝・呉広 提问时间:2020-4-11 23:31 /
STM32L476写FLASH必须是64位(8字节)写,也就是double WORD,而且要先把要写的字节部分擦除掉。

问题来了,先把整片用仿真器擦除掉,程序中先定义一个64位的静态变量常数0xFFFFFFFFFFFFFFFF,保证在FLASH中的位置是8字节对齐的位置,下载程序,然后在这个位置FLASH_TYPEPROGRAM_DOUBLEWORD,结果报编程错误,然后是字节对齐错误,编程步骤顺序错误。

芯片最后几K的空间用来做参数存储的,是完全能正常读写的,先擦除,再写入完全没问题。现在也做一个测试,先用仿真器把整片擦除,然后将写参数部分的擦除代码屏蔽,编译,下载进去,直接写参数,也报编程错误,然后是字节对齐错误,编程步骤顺序错误。

L476用库函数擦除后是0xFF,用仿真器擦除后也是0xFF,没区别啊,难道芯片内部能检测写之前有无擦除动作?仔细检查了的,写之前各种错误标志也清空了的。

有什么窍门或没注意到的地方?

可能有的网友没看明白我要做什么,简言之就是程序代码区域有一片连续的8字节,共64比特,全是0xFF的区域进行修改,存储想要的数据。
收藏 评论9 发布时间:2020-4-11 23:31

举报

9个回答
陳勝・呉広 回答时间:2020-4-12 14:12:00
刚才试了下,官方的L476 DISCO板子,先全片擦除,程序里面擦除部分的代码屏蔽掉,直接写,是没问题的,可能是我的程序那里设置没设置好,还在找原因。用CUBEMX生成的。
李康1202 回答时间:2020-4-13 09:49:28
顶一顶
陳勝・呉広 回答时间:2020-4-13 10:27:00
还没找到解决方法。毕竟这个8字节的变量在嵌入到FLASH程序中的,F系列,L1系列都可以。L4的就没对。按道理说要写的位置是处于擦除后的状态,也就是0xFF,字节位置是对齐的,直接写DOUBLE WORD是可以的。
陳勝・呉広 回答时间:2020-4-13 11:02:23
很奇怪的问题,先把程序下载进去,用ST LINK UTILITY直接修改这8个字节(0xFF)不得行,得把旁边其它的内容的修改后,这8个字节就可以被修改。现在真正有趣的来了,先把程序下载进去,把这8个字节旁边其它字节的内容修改后,断开仿真器,直接上电运行,再用仿真器连接,这8个字节就被程序修改成需要的内容了。
陳勝・呉広 回答时间:2020-4-13 12:42:25
单独用下载器下载后,程序里面能得到想要的结果,在线仿真却不行。

写了个BOOT LOADER,通过BOOT LOADER把APP写入,上电运行,也不行。

用仿真器将 BOOT 和 APP都写入,上电,可以得到想要的效果,然后通过BOOT更新APP后,也得不到想要的结果。
butterflyspring 回答时间:2020-4-16 11:55:20
先不加密,对比一下仿真器烧录和BOOT 烧录后是否所有的区域都一样,看看有没有发现
陳勝・呉広 回答时间:2020-4-17 08:18:16
butterflyspring 发表于 2020-4-16 11:55
先不加密,对比一下仿真器烧录和BOOT 烧录后是否所有的区域都一样,看看有没有发现 ...

没有加密,现在只是对ID运算后写入FLASH,现在说的加密是说对ID运算后写入空白地方(连续64比特,要写的位置是0xFFFFFFFFFFFFFFFF也算是擦除后的状态)。将两种不同下载方式下载进去的软硬件,运行后,读出,比较,ST LINK UTILITY下载的,要写的地方达到了要的效果。
李康1202 回答时间:2020-4-17 10:17:11
顶一顶
陳勝・呉広 回答时间:2022-3-1 17:32:58

已经解决,IAP的时候,擦除,烧写用记程序时,发现有连续的FF,比如这里8个字节的FF,就跳过不写。后续在程序中改写就没问题。可能L4的FLASH有点不同。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版