关于stm32 flash写入有两个疑问: 1. 是否每次写操作都需要擦除一个扇区?看到资料说,Flash写入只能由1改成0,因此先要擦除一个整个扇区才能写。 2. 我尝试用HAL_FLASH_Program去写一个代码段的地址时(0x0800194这样的),返回HAL_OK,但实际上没有写成功。在Keli memory区域可以直接修改,但是在代码里面修改不成功。这是为什么? 想通过IAP修改部分代码,实现用patch更新部分函数。求大神能指定一二。 |
在操作之前是否操作了unlock?如果没有操作,需要先解锁flash,再进行擦写。
1.必须擦除一个扇区,因为ST的擦除是按扇区的。 2.必须按照先解锁,再擦除,再写入的顺序。 ST有相当的例程,写入flash还是很简单的。参考一下固件库的例程吧
1、flash是只能由1变0,写之前需要擦除 2、不只是STM32,其他的flash也有最小操作单位,一般是扇区为单位,有4k 8k等等 3、对于STM32的flash写,需要按照先解锁,读出目标地址所在扇区的数据放在内存,直接修改内存的数据再擦除,再写入,注意地址要4字节对其 4、看看写之前的数据对不对
官方有文档可以参考: STM32_Flash_RM_CH_V6.rar (238.9 KB, 下载次数: 24) 2020-8-28 10:48 上传 点击文件名下载附件 下载积分: ST金币 -1
擦除一个扇区,解锁然后写入。。。
先擦除这个扇区或者块,然后解锁 就可以了
看使用哪个系列,少数系列是不需要先擦除的(比如L0系列)。具体可以参相关系列手册部分,内容很少的。 另外代码可以参考例程,每个系列都有相关配套的CUBE库和内部自带例程
谢谢各位的指点,我已经在真机(STM32L475)上擦写成功,只是Keli模拟器上(STM32F103)无法写成功。