前段时间使用stm32f030C8做IAP功能,发现一个flash的异常情况,至今没有找到合理的解释。记录一下:
flash program的流程一般是:
- flash unlock
- flash erase page
- flash program
- flash lock
这种场景下,flash能够正常擦除后写入。
如果把流程改成
- flash unlock
- flash erase page
- flash lock
- 延时200ms
- flash unlock
- flash program
- flash lock
会发现flash能够被擦除,但是数据没有写入
20190829更新:通过对比flash的寄存器发现
在lock之后才清除CR中的PER操作,会导致CR中的PER没有清除成功。
在lock之前清除CR的PER之后,Flash擦写就正常了