擦除后无法写入闪存

时间:2015-02-13 11:05:07

标签: c memory arm stm32 flash-memory

所以我在擦除后不能直接写入内部闪存。如果在写操作之前没有擦除操作,那么我可以。关于为什么的任何想法?

编程功能返回'成功写入'值,但在查看内存时,不会写入任何数据。这是代码:

uint32_t pageAddress = 0x08008000;
uint16_t buffer = 0xAAAA;

HAL_FLASH_Unlock();
FLASH_PageErase(pageAddress);
HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, pageAddress, buffer);
HAL_FLASH_Lock();

我已经尝试在擦除和编程之间锁定内存,在这些操作之间造成延迟,但这并没有帮助。

1 个答案:

答案 0 :(得分:7)

问题是当FLASH_PageErase()被调用时设置的FLASH-> CR寄存器中的PER位在其结束时不被清除。在闪存仍然未锁定时清除此位允许在此之后运行闪存上的其他操作。

STM文档对此无话可说。