Stm32F103C8T8 - 擦除闪存时出错

时间:2017-01-24 16:01:40

标签: flash stm32

我使用flash来保存数据,但有时候在擦除Flash时会发生错误,我不明白为什么?

感谢您的帮助!抱歉我的英文

我的程序大小:30,46千字节。

这是我的功能:

#define FLASH_PAGE_ADDR   0x08010000

uint16_t Mydata = 2345;

void WriteData(void)
{
    FLASH_Unlock(); 
    FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR\
    |FLASH_FLAG_WRPRTERR);
    FLASH_ErasePage(FLASH_PAGE_ADDR);
    FLASH_ProgramHalfWord(FLASH_PAGE_ADDR+2, Mydata);
}

2 个答案:

答案 0 :(得分:1)

你的芯片有64kB的闪存,所以试图擦除一个不存在的页面(闪存启动后启动64kB)并不是最好的选择。尝试这样做也可以删除闪存的 FIRST 页面,删除中断向量和部分正在运行的应用程序。

答案 1 :(得分:-1)

设备stm32F103C8T8包含64Kb闪存。

 Ordering information scheme

内存布局如下:

Memory map

对于您的设备,闪存实际上是 0x08000000-0x0800FFFF ,因为您有64Kb变体。该内存将是我们的第一个页面(又名扇区)的闪存。您的设备有64页,每页大小为1Kb。您只能删除整页。有关闪存模块组织的信息,请参见下图:

flash module organization

在您的示例中,您告诉设备开始从 0x08010000 中删除。根据上面给出的信息,这当然是不可能的(因为这个位置没有内存)。我建议您更改位置,使其定位到有效页面(盯着页面的开头):

#define FLASH_PAGE_4_ADDR   0x08001000

确保在删除时没有从那个位置执行,从那时起,当然,你的程序会崩溃。

另外,请考虑查看用于擦除的函数的返回值。他们可以告诉你一些重要的事情。