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);
我用库的,这样没问题
[解决办法]
#define FLASHADDRSTART 0x0800FC00 //63K
#define FLASHADDREND 0x08010000 //64K
//定义页的大小
#ifdef STM32F10X_HD //大容量产品 flash>=256K
#define FLASH_PAGE_SIZE ((u16)0x800)//2K
#elif STMF10X_LD // 小中容量产品, flash <256K
#define FLASH_PAGE_SIZE ((u16)0x400)//1K
vu32 NbrOfPage = 0x00;
u32 EraseCounter = 0x00, Address = 0x00;
volatile FLASH_Status FLASHStatus;
boolen writeFlash(UCHAR* str,UINT len)
{
FLASH_Unlock();
NbrOfPage = ( FLASHADDREND - FLASHADDRSTART ) / FLASH_PAGE_SIZE;
FLASH_ClearFlag(FLASH_FLAG_BSY
[解决办法]
FLASH_FLAG_EOP
[解决办法]
FLASH_FLAG_PGERR
[解决办法]
FLASH_FLAG_WRPRTERR);
FLASHStatus = FLASH_COMPLETE;
for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
{
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部分吗?为什么不用这个存储点东西?