STM32
直播中

王强

7年用户 1356经验值
私信 关注
[问答]

STM32L476先用仿真器擦除FLASH后在程序中写不成功怎么解决?

STM32L476写FLASH必须是64位(8字节)写,也就是double WORD,而且要先把要写的字节部分擦除掉。

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

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

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

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

可能有的网友没看明白我要做什么,简言之就是程序代码区域有一片连续的8字节,共64比特,全是0xFF的区域进行修改,存储想要的数据。

回帖(2)

韩刚龙

2024-3-29 10:37:42
IAP的时候,擦除,烧写用记程序时,发现有连续的FF,比如这里8个字节的FF,就跳过不写。后续在程序中改写就没问题。可能L4的FLASH有点不同。
举报

飞毛腿452

2024-3-29 11:13:47
首先,确保你使用的仿真器和编程工具支持对STM32L476芯片的编程操作。

接下来,尝试以下解决方案:

1. 确认你的写入操作是否正确:在写入FLASH之前,确保正确设置FLASH的写入保护和实际的写入地址。确保你的写入操作按照正确的顺序进行,并且确保擦除操作完成后再进行写入操作。

2. 检查编程步骤的顺序:确保你的编程步骤按照正确的顺序进行。例如,先擦除FLASH,然后写入数据的顺序是正确的。

3. 确保字节对齐:确保你的写入操作符合芯片要求的字节对齐要求。根据你提供的信息,STM32L476芯片需要进行64位(8字节)的写入,所以请确保你的写入操作符合这个要求。

4. 检查编程参数和地址:仔细检查你的编程参数和地址是否正确。确保你传入的参数和地址与要写入的数据一致。

5. 尝试使用其他编程工具:如果你使用的编程工具一直遇到问题,可能是工具本身的问题。尝试使用其他编程工具或者芯片厂商推荐的编程工具来尝试写入操作。

6. 查看编程工具的日志或错误消息:查看编程工具的日志或错误消息,看看是否有更具体的错误信息。这可能有助于你定位问题所在。

7. 检查芯片的写入保护位设置:在某些情况下,芯片的写入保护位可能被设置为保护某些区域不被写入。请确保你已经正确配置写入保护位,以允许写入操作。

如果以上解决方案无法解决你的问题,请提供更多的详细信息,如具体的代码片段、错误消息等,以便更好地帮助你解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分