所以我在擦除后不能直接写入内部闪存。如果在写操作之前没有擦除操作,那么我可以。关于为什么的任何想法?
编程功能返回'成功写入'值,但在查看内存时,不会写入任何数据。这是代码:
uint32_t pageAddress = 0x08008000;
uint16_t buffer = 0xAAAA;
HAL_FLASH_Unlock();
FLASH_PageErase(pageAddress);
HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, pageAddress, buffer);
HAL_FLASH_Lock();
我已经尝试在擦除和编程之间锁定内存,在这些操作之间造成延迟,但这并没有帮助。
答案 0 :(得分:7)
问题是当FLASH_PageErase()被调用时设置的FLASH-> CR寄存器中的PER位在其结束时不被清除。在闪存仍然未锁定时清除此位允许在此之后运行闪存上的其他操作。
STM文档对此无话可说。