[技术问答] 华大HC32F460芯片Flash操作遇到的问题

[复制链接]
 楼主| Aqst666 发表于 2021-5-9 16:05 | 显示全部楼层 |阅读模式
en_result_t EFM_SectorErase(uint32_t u32Addr)
{
    uint8_t u8tmp;
    uint16_t u16Timeout = 0u;
    en_result_t enRet = Ok;
    DDL_ASSERT(IS_VALID_FLASH_ADDR(u32Addr));
    EFM_ClearFlag(EFM_FLAG_WRPERR | EFM_FLAG_PEPRTERR | EFM_FLAG_PGSZERR |
                  EFM_FLAG_PGMISMTCH | EFM_FLAG_EOP | EFM_FLAG_RWERR);
    u8tmp = (uint8_t)M4_EFM->FRMC_f.CACHE;
    M4_EFM->FRMC_f.CACHE = Disable;
    EFM_ErasePgmCmd(Enable);
    EFM_SetErasePgmMode(SectorErase);

    *(uint32_t*)u32Addr = 0x12345678u;
    while(1ul != M4_EFM->FSR_f.RDY)
    {
        u16Timeout++;
        if(u16Timeout > 0x1000u)
        {
            enRet = ErrorTimeout;
        }
    }
    EFM_ClearFlag(EFM_FLAG_EOP);
    EFM_SetErasePgmMode(ReadOnly1);
    EFM_ErasePgmCmd(Disable);
    M4_EFM->FRMC_f.CACHE = u8tmp;
    return enRet;
}
单步运行到这句话 就会卡死  
   *(uint32_t*)u32Addr = 0x12345678u;


写256字节数据  会多出来四个字节
martinhu 发表于 2021-5-10 13:32 | 显示全部楼层
F460的扇区大小是8K,楼主看看是不是给的页擦除的地址不对?把代码区擦除了?
另外,多出4字节,应该是写操作代码的问题。
 楼主| Aqst666 发表于 2021-5-12 10:37 | 显示全部楼层
谢谢楼上大哥   已发现问题,原因是多写了一个校验数据,代码是抄的 没有理解透彻 感谢您的解答
单片小菜 发表于 2021-5-12 14:56 | 显示全部楼层
解决问题,就好办多了。
两只袜子 发表于 2021-5-12 16:50 | 显示全部楼层
哈哈,恭喜恭喜
huquanz711 发表于 2021-5-12 18:39 来自手机 | 显示全部楼层
感谢楼主的分享经验
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 返回顶部 返回列表