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

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

[复制链接]
ccschen 提问时间: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的区域进行修改,存储想要的数据。
收藏 评论8 发布时间:2020-4-11 23:31

举报

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

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

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

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

所属标签

相似问题

官网相关资源

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