2019-07-21 06:43发布
尹林 发表于 2018-12-12 10:54 楼主,按键按下去能读和写,没有掉电保存,说明这个数据是存储在SRAM里面的,这个数据并没有写进flash。原 ...
szczyb1314 发表于 2018-12-12 11:25 写进flash就实现掉电保护了啊,上电读出来就行。
最多设置5个标签!
谢谢啊,我研究了下原子FLASH钟的函数,里面有
void STMFLASH_Unlock(void);
void STMFLASH_Lock(void);
u8 STMFLASH_GetStatus(void);
u8 STMFLASH_WaitDone(u16 time);
u8 STMFLASH_ErasePage(u32 paddr);
u8 STMFLASH_WriteHalfWord(u32 faddr, u16 dat);
u16 STMFLASH_ReadHalfWord(u32 faddr);
void STMFLASH_WriteLenByte(u32 WriteAddr,u32 DataToWrite,u16 Len);
u32 STMFLASH_ReadLenByte(u32 ReadAddr,u16 Len);
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite);
void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead);
这些,我自己写了如下函数
#define FLASH_SAVE_ADDR 0X08020000 //éèÖÃFLASH ±£′æμØÖ·(±ØDëÎażêy£¬ÇòÆäÖμòa′óóú±¾′úÂëËùÕ¼óÃFLASHμÄ′óD¡+0X08000000)
#define SAVEDATAID 0x68
u16 f,w;
void LoadParameter() //
{
u32 addrval= FLASH_SAVE_ADDR;
u32 tmpdat=0;//????
tmpdat=STMFLASH_ReadHalfWord(addrval);
if(SAVEDATAID!=tmpdat) return;//?????????????
f=0;w=0; //??f?w??
addrval++; //f?????
tmpdat=STMFLASH_ReadHalfWord(addrval);
f=(tmpdat<<8);
addrval++;
tmpdat=STMFLASH_ReadHalfWord(addrval);
f+=tmpdat;
addrval++; //w?????
tmpdat=STMFLASH_ReadHalfWord(addrval);
w=(tmpdat<<8);
addrval++;
tmpdat=STMFLASH_ReadHalfWord(addrval);
w+=tmpdat;
}
void SaveParameter()//??
{
u32 tmpdat=0;
u32 addrval=FLASH_SAVE_ADDR;
STMFLASH_ErasePage(FLASH_SAVE_ADDR);//????
STMFLASH_WriteHalfWord(addrval,SAVEDATAID);//??
delay_ms(1);
addrval++;
tmpdat=(f>>8);//????????f
STMFLASH_WriteHalfWord(addrval,tmpdat);
addrval++;
tmpdat=f;
delay_ms(1);
STMFLASH_WriteHalfWord(addrval,tmpdat);
delay_ms(1);
addrval++;
tmpdat=(w>>8); //????????
STMFLASH_WriteHalfWord(addrval,tmpdat);
delay_ms(1);
addrval++;
tmpdat=w;
STMFLASH_WriteHalfWord(addrval,tmpdat);
}
然后在主函数中调用这2个函数一点用也没有,不知道哪里错了,我想要掉电后保存频率和占空比,
高手我想请教,原子哥的
u8 STMFLASH_WriteHalfWord(u32 faddr, u16 dat);
u16 STMFLASH_ReadHalfWord(u32 faddr);
这2个写一位数可以的吧,如果是很多位就用下面这个对吗
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite);
void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead);
还在吗?能帮我看下吗?我查了很多资料flash掉电保存要擦除后再写,我的代码是给定一个地址和随便先写一个数值进flash,每次读这个数值,但是没有一点效果
一周热门 更多>