STM32L476写FLASH必须是64位(8字节)写,也就是double WORD,而且要先把要写的字节部分擦除掉。 问题来了,先把整片用仿真器擦除掉,程序中先定义一个64位的静态变量常数0xFFFFFFFFFFFFFFFF,保证在FLASH中的位置是8字节对齐的位置,下载程序,然后在这个位置FLASH_TYPEPROGRAM_DOUBLEWORD,结果报编程错误,然后是字节对齐错误,编程步骤顺序错误。 芯片最后几K的空间用来做参数存储的,是完全能正常读写的,先擦除,再写入完全没问题。现在也做一个测试,先用仿真器把整片擦除,然后将写参数部分的擦除代码屏蔽,编译,下载进去,直接写参数,也报编程错误,然后是字节对齐错误,编程步骤顺序错误。 L476用库函数擦除后是0xFF,用仿真器擦除后也是0xFF,没区别啊,难道芯片内部能检测写之前有无擦除动作?仔细检查了的,写之前各种错误标志也清空了的。 有什么窍门或没注意到的地方? 可能有的网友没看明白我要做什么,简言之就是程序代码区域有一片连续的8字节,共64比特,全是0xFF的区域进行修改,存储想要的数据。 |
stm32l476ret6 sai主时钟没有波形输出。
STM CUBE AI错误导入onnx模型报错
L433单片机的SPI3,在从模式,开接收中断情况下的问题
stm32L476部分电脑读不到驱动
AN2867的晶振布局问题
STM32L431KBU6 可能为引脚焊接不良问题
STM32L476 DFSDM 时钟配置
STM32L476 HAL_FLASHEx_Erase() 问题
L432ADC量程一半的数值异常
STLINK-V3MODS多路桥接
写了个BOOT LOADER,通过BOOT LOADER把APP写入,上电运行,也不行。
用仿真器将 BOOT 和 APP都写入,上电,可以得到想要的效果,然后通过BOOT更新APP后,也得不到想要的结果。
没有加密,现在只是对ID运算后写入FLASH,现在说的加密是说对ID运算后写入空白地方(连续64比特,要写的位置是0xFFFFFFFFFFFFFFFF也算是擦除后的状态)。将两种不同下载方式下载进去的软硬件,运行后,读出,比较,ST LINK UTILITY下载的,要写的地方达到了要的效果。
已经解决,IAP的时候,擦除,烧写用记程序时,发现有连续的FF,比如这里8个字节的FF,就跳过不写。后续在程序中改写就没问题。可能L4的FLASH有点不同。