STM32F030系列如何连续擦写On-Chip flash?

How to Write & Erase On-Chip flash Continuously in STM32F030 family?

我尝试向闪存写入一个值,最初我将 0x0000 写入我在代码中提到的位置,它已成功写入,但之后我无法覆盖或擦除其中的数据 position.So 第一次我可以成功写入闪存,但之后我无法在该位置写入/擦除数据。可能是什么问题?我也固定了内存堆栈图像。


  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
  }

Memory stack -Debug

我找到了问题的答案,问题是 Flash 可以处理“0000”或 "FFFF" 两个值,因此只有当该位置的值为 "FF" 如果它的“00”用户将无法写入它,除非该位置是 Erased.In 我的情况是我将“00”写入该位置,所以我无法用不同的值再次写入该位置。

前面的评论中有人告诉我们 Flash 可以处理 1000 write/erase cycles.its 是的,所以最好利用整个扇区 (1 kB) 写入一次,如果 1 kB 是 over.By 这样做 STM32 可以处理更多的 Flash 操作