怎么写&在STM32F030系列中连续擦除片上闪存?

时间:2017-11-19 03:03:35

标签: flash arm embedded stm32 keil

我尝试将值写入闪存,最初我将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
  }

Memory stack -Debug

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案,问题是Flash可以处理2个值" 0000"或" FFFF"因此,只有当该位置的值为" FF"时,用户才能写入该位置。如果它的" 00"除非该位置被删除,否则用户将无法写入。在我的情况下,我写了" 00"到那个位置,所以我无法再次使用不同的值写入该位置。

之前的评论有人告诉我,闪存可以处理1000次写入/擦除循环。这样就可以更好地利用整个扇区(1 kB)进行一次写入,如果1 kB结束则擦除。通过这样做,STM32可以处理更多Flash操作