lixinle072 发表于 2018-6-19 11:39:55

STM32L151C8t6 Flash擦除错误

本帖最后由 lixinle072 于 2018-6-19 11:41 编辑

以下是我的擦除用的函数,用的库是STM32_USB-FS-Device_Lib_V4.0.0,擦除地址0x0801FF00;
返回的错误代码是FLASH_ERROR_PROGRAM



uint8_t flashErasePage(uint32_t addr) {
    uint8_t status = 1;

    if (addr < FLASH_BASE || (addr >= (FLASH_BASE + 1024 * FLASH_SIZE))) return 1;//非法地址

    //确保是页地址
    addr = addr & 0xFFFFFF00;

    FLASH_Unlock();

    status = FLASH_ErasePage(addr);
    if (status == FLASH_COMPLETE) {
      status = 0;
    }

    FLASH_Lock();

    return status;
}


stm1024 发表于 2018-6-19 12:10:32

本帖最后由 stm1024 于 2018-6-19 12:13 编辑


你的首地址有点问题啊?一页是2K,你可以看到首地址末尾是000或者800,0x0801FF00似乎不是一个合规的首地址吧?要不你试试0x0801F000看看?然后 addr = addr & 0xFFFFFF00;也要相应地修改一下。

lixinle072 发表于 2018-6-19 15:24:02

本帖最后由 lixinle072 于 2018-6-19 15:29 编辑

你好!我的MCU是STM32L151C8t6,这芯片的Flash是256一页的,当然我也去试过地址是0x0800F000去擦除,一样是失败。

lixinle072 发表于 2018-6-19 21:01:37

还有人可以帮帮看看吗?

lixinle072 发表于 2018-6-20 21:25:08

问题解决了,查到出错时FLASH->SR寄存器OPTVERR位被置1了,也不知道是什么原因置1的。擦除前清除一下标志位就可以成功擦除以及读写数据了。
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_OPTVERRUSR);
页: [1]
查看完整版本: STM32L151C8t6 Flash擦除错误