高级会员

- 积分
- 902
- 金钱
- 902
- 注册时间
- 2012-6-29
- 在线时间
- 39 小时
|

楼主 |
发表于 2013-7-22 15:19:02
|
显示全部楼层
原子大哥你好,我现在遇到了一个问题,还请原子大哥指点指点。我需要存入二百多个的数据,现在我现在为每一各变量都指定了以一个地址(以3各变量为例子,定义的三个地址分别是0x08010000,0x08010002,0x08010004),进行写操作的时候我按照解锁、擦写(页擦除)、上锁、读取。可是我在写入第二个变量的后,再去读第一个数据,数据不存在了,是被第二次写时擦除了,和才能补把先前写的数据,直接使用你们的例程可以吗,不能的话大概怎么修改一下阿?我的测试代码如下,请原子大哥帮帮忙。
#include "stm32f10x.h"
#define saveaddress1 0x08010000
#define saveaddress2 0x08010002
#define saveaddress3 0x08010004
u8 value1=123;
u8 value2=10;
u8 value3=90;
//读取指定地址中的内容
u16 STMFLASH_ReadHalfWord(u32 faddr)
{
return *(vu16*)faddr;
}
#if STM32_FLASH_WREN //如果使能了写 STM32_FLASH_WREN是1的宏定义
//从指定地址开始写入指定长度的数据
//WriteAddr:起始地址(此地址必须为2的倍数!!)
//pBuffer:数据
void STMFLASH_Write(u32 WriteAddr,u16 pBuffer)
{
FLASH_Unlock();
FLASH_ErasePage(WriteAddr);
FLASH_ProgramHalfWord(WriteAddr,pBuffer);
FLASH_Lock();//上锁
}
#endif
u16 va1,va2,va3;
int main(void)
{
STMFLASH_Write(saveaddress1,value1);
va1=STMFLASH_ReadHalfWord(saveaddress1);
STMFLASH_Write(saveaddress2,value2);
va2=STMFLASH_ReadHalfWord(saveaddress2);
va1=STMFLASH_ReadHalfWord(saveaddress1);
STMFLASH_Write(saveaddress3,value3);
va3=STMFLASH_ReadHalfWord(saveaddress3);
va2=STMFLASH_ReadHalfWord(saveaddress2);
va1=STMFLASH_ReadHalfWord(saveaddress1);
return 0;
} |
|