打印
[AT32F403/403A]

AT32F403avgt7 擦除片2 Flash失败求解---问题已解决!

[复制链接]
519|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
metco88|  楼主 | 2023-8-9 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 metco88 于 2023-8-10 09:56 编辑

AT32F403AVGT7芯片 擦除片2 Flash(即地址0x8080000以上空间时)返回错误,擦除写入片1 Flash 地址0x8000000-0x807ffff时正常,程序中分别判断地址区别开2个地址的寄存器操作,但是还是一直没成功,有哪位朋友有碰到过类似问题,求教...
u8 FLASH_Erase(u32 adr)
{
        if((adr>=0x08000000)&&(adr<=0x0807ffff))
        {
                FLASH->CTRL&=~(0X3F);        //从新设置模式
                FLASH->ADDR =adr;            //写入地址
          FLASH->CTRL|=1<<1;           //擦除模式
          FLASH->CTRL|=1<<6;           //启动擦除
          while(FLASH->STS&0x01);      //当前操作正在进行

                if(FLASH->STS&(1<<5))        //检查是否完成
                {
                        FLASH->STS|=(1<<5);        //清除完成标志
                        return 0;                  //操作成功
                }               
                else
                {
                        FLASH->STS=(1<<5);         //清除完成标志
                        return 1;                  //操作失败
                }  
        }
        else
        {
               
                FLASH->CTRL2&=~(0X3F);        //从新设置模式
          FLASH->CTRL2|=1<<1;           //擦除模式
          FLASH->ADDR2 =adr;            //写入地址
          FLASH->CTRL2|=1<<6;           //启动擦除
          while(FLASH->STS2&0x01);      //当前操作正在进行        
                if(FLASH->STS2&(1<<5))      
                {
                        FLASH->STS2|=(1<<5);        //清除完成标志
                        return 0;                 //操作成功
                }               
                else
                {
                        FLASH->STS2=(1<<5);         //清除完成标志
                        return 1;                 //操作失败
                }  
        }
}

使用特权

评论回复
沙发
metco88|  楼主 | 2023-8-10 09:55 | 只看该作者
困扰2天的问题终于找出原因了,咨询官方与技术群群主都让我试试官方BSP中例程或者按照官方库来写,随后发现使用官方库操作也是出现同样的情况 ,参考官方的说明资料FAQ0048 《AT32F4xx内部闪存页擦除注意事项 》似乎也没发现有提到这个问题,苦恼中。。。却不经意看到论坛有个帖子咨询能否片内2个Bank同时编程操作,于似乎想到了什么,从新调试已一遍,发现当Bank1擦除烧写完成后FLASH->CTRL中的FPRGM依然是置高处于闪存编程状态,当擦除Bank2时Bank1还是处于闪存编程状态,由于2片不能同时处于编程状态,所以到Bank2操作时发生了错误!   随即我在代码中切换到Bank2擦除前加清除FLASH->CTRL=0x00后,操作擦除Bank2区域一切正常,没有发生错误了!  至此应该就是这个坑了,可以结贴了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝