本帖最后由 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; //操作失败
}
}
} |