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:13 编辑
你的首地址有点问题啊?一页是2K,你可以看到首地址末尾是000或者800,0x0801FF00似乎不是一个合规的首地址吧?要不你试试0x0801F000看看?然后 addr = addr & 0xFFFFFF00;也要相应地修改一下。
本帖最后由 lixinle072 于 2018-6-19 15:29 编辑
你好!我的MCU是STM32L151C8t6,这芯片的Flash是256一页的,当然我也去试过地址是0x0800F000去擦除,一样是失败。
还有人可以帮帮看看吗? 问题解决了,查到出错时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]