首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

stm32 flash 封存数据

2013-08-16 
stm32 flash 保存数据我用stm32的flash保存数据,在擦除的过程中,代码执行到这句就停了status FLASH_Wait

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部分吗?为什么不用这个存储点东西?

热点排行