and*_*y g 6 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();
Run Code Online (Sandbox Code Playgroud)
我已经尝试在擦除和编程之间锁定内存,在这些操作之间创建延迟,这没有帮助.
问题是FLASH-> CR寄存器中的PER位在调用FLASH_PageErase()时设置,在其结束时不会被清除.在闪存仍然未锁定时清除此位允许在此之后运行闪存上的其他操作.
STM文档对此无话可说.