metco88 发表于 2023-8-9 16:17

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

本帖最后由 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区域一切正常,没有发生错误了!至此应该就是这个坑了,可以结贴了{:lol:}
页: [1]
查看完整版本: AT32F403avgt7 擦除片2 Flash失败求解---问题已解决!