我尝试将值写入闪存,最初我将0x0000写入我在代码中提到的位置,但是之后我无法覆盖或擦除该位置的数据。所以我第一次成功写入Flash,但之后我无法在该位置写入/擦除数据。可能会出现什么问题?我也固定了内存堆栈映像。
uint32_t pageAddress = 0x08008000;
uint16_t buffer = 0xdddd; // data buffer
HAL_HAL_StatusTypeDef status;
while(1)
{
HAL_FLASH_Unlock(); // unlock the flash memory in ST
//FLASH_PageErase(pageAddress);
status=HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, pageAddress,
buffer);
HAL_FLASH_Lock(); // Flash memory locked
}
答案 0 :(得分:0)
我找到了问题的答案,问题是Flash可以处理2个值" 0000"或" FFFF"因此,只有当该位置的值为" FF"时,用户才能写入该位置。如果它的" 00"除非该位置被删除,否则用户将无法写入。在我的情况下,我写了" 00"到那个位置,所以我无法再次使用不同的值写入该位置。
之前的评论有人告诉我,闪存可以处理1000次写入/擦除循环。这样就可以更好地利用整个扇区(1 kB)进行一次写入,如果1 kB结束则擦除。通过这样做,STM32可以处理更多Flash操作