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 操作
我尝试向闪存写入一个值,最初我将 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 操作