打印

请问版主和各位达人,FLASH模拟EEPROM不对

[复制链接]
3763|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丫头101|  楼主 | 2011-10-12 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103的芯片,使用官方的例子 ,现在用的FLASH模拟EEPROM
现象:写入一个值读出来没有,看没写进去
原程序是官方的例子 没改动,也就没贴出来,我看了下EE_ReadVariable读的值 返回的是0001
恳请达人指点 谢谢大家



EEPROM 基地址
#define EEPROM_START_ADDRESS    ((u32)0x08010000)

//////main

ErrorStatus  HSEStartUpStatus;
FLASH_Status FlashStatus;
u16 VarValue = 0;
/* Virtual address defined by the user: 0xFFFF value is prohibited */
u16 VirtAddVarTab[NumbOfVar] = {0x5555, 0x6666, 0x7777};
u16 VADJ1,EepromTemp3,EepromTemp4;

int main(void)
{         
#ifdef DEBUG
  debug();
#endif
  /* System Clocks Configuration */
  RCC_Configuration();
  /* Unlock the Flash Program Erase controller */
  FLASH_Unlock();
  /* EEPROM Init */
  EE_Init();
EE_WriteVariable(VirtAddVarTab[1], 0x1000);
  EepromTemp4=EE_ReadVariable(VirtAddVarTab[1], &EepromTemp3);
  VADJ1 = EepromTemp3;
      FLASH_Lock();
  while (1);
}
沙发
丫头101|  楼主 | 2011-10-12 13:56 | 只看该作者
顶上去 小女谢谢了

使用特权

评论回复
板凳
airwill| | 2011-10-12 13:57 | 只看该作者
不知道楼主的是什么芯片?
看看这个:
#define EEPROM_START_ADDRESS    ((u32)0x08010000)
这个地址在 64K 以上了, 有没有超出你的芯片空间呢?

使用特权

评论回复
地板
xukong| | 2011-10-12 14:05 | 只看该作者
一个是地址空间有没有超出,还有一个就是Flash在写之前需要先进行页擦除操作,写入过一个后又需要重新进行页擦除操作,否则无法写入。

使用特权

评论回复
5
丫头101|  楼主 | 2011-10-12 14:26 | 只看该作者
是STM32F103VET6,我跟踪了下看 EE_VerifyPageFullWriteVariable 这里始终没有进到 if ((*(vu32*)Address) == 0xFFFFFFFF) { /* Set variable data */ FlashStatus = FLASH_ProgramHalfWord(Address, Data);始终没执行 我不知道为啥 ,工程在附件里,是官方的一个例子 我软件仿真跑了下 看的

STM32 FLASH eeprom.zip

221.46 KB

使用特权

评论回复
6
丫头101|  楼主 | 2011-10-12 14:49 | 只看该作者
继续等 谢谢各位

使用特权

评论回复
7
xukong| | 2011-10-13 09:46 | 只看该作者
大概看了一下你的代码,其实不用那么复杂,首先你分配一段空间用于模拟EEPROM(记着只能是整数页),然后直接用库函数里面的Flash读写就可以了,需要注意的就是写之前一定得进行页擦除操作(如果需要写入得数据超过一页,则需要擦除多页),写完后做一个状态标记,读是随时可以读的(当然是Flash解锁的情况),还有就是注意:Flash进行擦除操作的时候是整页擦除,且擦除后同一个地址空间只能写一次。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝