无法写入 Flash | STM32 排错

/ 0评 / 0

长话短说:先擦后写。

最近在做一个课程设计 (which flopped but anyway). 需要向 Flash 写一些能够断电后保留的数据。

在 HAL 库的加持下,一切进行得都很顺利。但是有趣的事情是:如果向同一个 Flash 地址写入两次(或者以上),那么会写入失败,只有第一次写入的值是可用的。这影响了调试工作的进行(毕竟,你需要能够重置这些信息)。

Flash 的访问要求 8 字节对齐。这一点检查没有问题,毕竟只要搜索「Flash 无法写入」,大家的第一反应都是对齐访问问题。

Google 一圈没找到太多相关的内容。不过发现了一个 pattern: 所有的样例代码在写入函数中都会先擦除要被写入的 Page, 再进行写入。

这提示了:Flash 必须先被擦除,然后才能被写入。将重置信息部分改写为擦除对应的 Page 之后,问题解决。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Your comments will be submitted to a human moderator and will only be shown publicly after approval. The moderator reserves the full right to not approve any comment without reason. Please be civil.