STM32F429 FLASH如何实现掉电保存数据啊

2019-07-21 06:43发布

STM32目前刚在学,试了下原子的程序只有按键按下去读和写,没有掉电保存,一时无从下手,求高手帮忙,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
尹林
1楼-- · 2019-07-21 08:23
 精彩回答 2  元偷偷看……
szczyb1314
2楼-- · 2019-07-21 11:50
写进flash就实现掉电保护了啊,上电读出来就行。
gdqxp
3楼-- · 2019-07-21 16:50
尹林 发表于 2018-12-12 10:54
楼主,按键按下去能读和写,没有掉电保存,说明这个数据是存储在SRAM里面的,这个数据并没有写进flash。原 ...

谢谢啊,我研究了下原子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个函数一点用也没有,不知道哪里错了,我想要掉电后保存频率和占空比,
gdqxp
4楼-- · 2019-07-21 17:54
szczyb1314 发表于 2018-12-12 11:25
写进flash就实现掉电保护了啊,上电读出来就行。

高手我想请教,原子哥的
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);
gdqxp
5楼-- · 2019-07-21 20:33
szczyb1314 发表于 2018-12-12 11:25
写进flash就实现掉电保护了啊,上电读出来就行。

还在吗?能帮我看下吗?我查了很多资料flash掉电保存要擦除后再写,我的代码是给定一个地址和随便先写一个数值进flash,每次读这个数值,但是没有一点效果
gdqxp
6楼-- · 2019-07-21 22:13
 精彩回答 2  元偷偷看……

一周热门 更多>