擦除后无法写入闪存

Can't write to flash memory after erase

所以擦除后无法直接写入内部闪存。如果在写操作之前没有擦除操作,那么我可以。关于原因有什么想法吗?

编程函数returns'successful write'值,但是查看内存时,没有写入数据。这是代码:

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

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

我试过在擦除和编程之间锁定内存,在这些操作之间创建延迟,但没有帮助。

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

STM 文档对此无话可说。

您可以改用HAL_FLASHEx_Erase

uint32_t pageAddress = 0x0801FC00;
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t page_err;

EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = pageAddress;
EraseInitStruct.NbPages = 1;

uint32_t buffer = 0xC0FFEE;
HAL_FLASH_Unlock();
HAL_FLASHEx_Erase(&EraseInitStruct, &page_err);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, pageAddress, buffer);
HAL_FLASH_Lock();