你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L151C8t6 Flash擦除错误

[复制链接]
lixinle072 提问时间:2018-6-19 11:39 /
本帖最后由 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;
}


收藏 1 评论4 发布时间:2018-6-19 11:39

举报

4个回答
stm1024 回答时间:2018-6-19 12:10:32
本帖最后由 stm1024 于 2018-6-19 12:13 编辑

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

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

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蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版