stm32 flash 保存数据
我用stm32的flash保存数据,在擦除的过程中,代码执行到这句就停了status = FLASH_WaitForLastOperation(ProgramTimeout);好想调用函数WaitForLastOperation(ProgramTimeout)都没有成功,因为连这个函数的第一句话都进不去。请大家帮忙指导指导。 stm32?flash保存数据
[解决办法]
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_BSY
[解决办法]
FLASH_FLAG_EOP
[解决办法]
FLASH_FLAG_PGERR
[解决办法]
FLASH_FLAG_WRPRTERR);
FLASHStatus = FLASH_ErasePage((uint32_t)&Storage);
{
FLASHStatus = FLASH_ErasePage(FLASHADDRSTART + (FLASH_PAGE_SIZE * EraseCounter));
}
if(FLASHStatus != FLASH_COMPLETE )//擦除不成功
{
return false;
}
Address = FLASHADDRSTART;
while((Address < FLASHADDREND ) && (FLASHStatus == FLASH_COMPLETE))
{
if(len == 0) break;
FLASHStatus = FLASH_ProgramWord(Address, *(u32*)str);
Address = Address + 4;
len-=4;
str+=4;
if(len < 4)
{
//由于是按字的写入方式,即一次性写入4个字节的数据
//所有后面剩余的(4-len%4)%4个字节的补零处理
FLASHStatus = FLASH_ProgramWord(Address, *(u32*)str);
break;
}
}
FLASH_Lock();
if(FLASHStatus != FLASH_COMPLETE)
{
return false;
}
else return true;
}
[解决办法]
我给他的擦除地址为8000 FBFF
这个地址是每个页的启始地址么?
我记得不是很清楚是不是必须用每个页的起始地址
但是,我擦除的时候给的是起始地址
[解决办法]
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP
[解决办法]
FLASH_FLAG_PGERR
[解决办法]
FLASH_FLAG_WRPRTERR);
FLASH_ErasePage(0x0803f000);
FLASH_ProgramHalfWord((0x0803f000 ),1);
FLASH_Lock();
[解决办法]
关键是别漏了FLASH_Unlock();
[解决办法]
内部的FLASH,还是外面扩展的FLASH?、
不是有BKP部分吗?为什么不用这个存储点东西?