2019-07-21 06:43发布
尹林 发表于 2018-12-12 10:54 楼主,按键按下去能读和写,没有掉电保存,说明这个数据是存储在SRAM里面的,这个数据并没有写进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个函数一点用也没有,不知道哪里错了,我想要掉电后保存频率和占空比,
一周热门 更多>