OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6025|回复: 10

flash 模拟eeprom

[复制链接]

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
发表于 2013-7-13 11:15:08 | 显示全部楼层 |阅读模式
原子大哥,我现在在做flash 模拟eerom测试,做了一个简单的测试例子,可是不能成功写入数据,我找了很久(包括对照例程)都没有找到问题出在哪里,希望大哥能帮帮忙,指点指点,谢谢。我的测试例子代码如下:(使用的是FLASH大小为256K,keil4编程工具)
#include"stm32f10x.h"
#include "flash.h"
#include “LED.h”

#define FLASH_BASE_ADDR  0X08000000
#define FLASH_SAVE_ADDR  0X08070000

/*程序所需的固件库文件已经加到工程中*/
u16 STMFLASH_ReadHalfWord(u32 faddr)
{
 return *(vu16*)faddr;
}

void delay(void)
{
  u32=254;
  for(;i>65535;i--);
}
int main(void)
{
  u16 value;
 
 LED_INIT();//指示灯的初始化
  
 FLASH_Unlock();
 FLASH_ErasePage(FLASH_BASE_ADDR);
 value=STMFLASH_ReadHalfWord(FLASH_BASE_ADDR);
if(value==0)
{
  GPIO_SetBits(GPIOC,GPIO_Pin_9);//指示灯亮
}
else
   {return 0;}
delay();
delay();
delay();
GPIO_ResetBits(GPIOC,GPIO_Pin_9);//指示灯熄灭
FLASH_ProgramHalfWord(FLASH_SAVE_ADDR ,0x06);
delay();
delay();
value=0;
value=STMFLASH_ReadHalfWord(FLASH_SAVE_ADDR );
if(value==6)
{
   GPIO_SetBits(GPIOC,GPIO_Pin_9);//指示灯亮
}

FLASH_Lock();//上锁

 return 0;
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-7-13 11:55:56 | 显示全部楼层
"#define FLASH_SAVE_ADDR  0X08070000"

不会吧...     16进制 "70000" = 458752(10进制)

458752/1024 = 448 K  ,   你将会从第448K的地方开始写入资料...

问题你说你用的FLASH大小才  256K ,   已经写到外太空去啦~~~~~
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-13 14:02:08 | 显示全部楼层
哦,那我改改。
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-13 14:08:23 | 显示全部楼层
原子大哥,我现在将这个保存地址写作"#define FLASH_SAVE_ADDR  0X08020000,测试也不能够成功,我的测试代码其它地方有错误吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-13 14:14:05 | 显示全部楼层
其他貌似没问题,你直接用我们的例程试试吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-13 14:44:40 | 显示全部楼层
我刚刚使用了例程了,现在可以使用了。对了,原子大哥我还有各问题需要请教你一下。使用模拟的eeprom存储变量,变量的声明是直接是声明为普通的变量(如:u32 value=12;),还是有特定的格式。我这次要存储几百个这样的变量,比是一次性存储所有的变量,是在程序运行期间存储和读取各个变量。存储这些变量的地址,应该如何定义阿?是直接定义一个地址来存储,还是有其它的办法?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-13 19:02:11 | 显示全部楼层
回复【6楼】catbal:
---------------------------------
几百个,怎么会这么多?
定义成数组吧.然后直接将数组存起来,或者定义成结构体.最好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-15 15:41:11 | 显示全部楼层
谢谢,我去试试。
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-16 19:31:27 | 显示全部楼层
你好,原子大哥。我今天测试了一下模拟的eeprom,使用结构体操作,没能成功。我想用正点原子的那个例程。大致思路是:为每一个变量指定写入的地址,但是在写每一个变量值之前,需擦除。我每次写入的后再写入新的数据的时候,先前的内容没有了,是擦除操作擦出了的。我可以怎么做可以避免把先前的写的内容擦除呢?希望大哥能够指点指点,谢谢。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-16 21:34:52 | 显示全部楼层
回复【9楼】catbal:
---------------------------------
你的flash模拟eeprom代码是用的我们的么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
507
金钱
507
注册时间
2014-1-24
在线时间
103 小时
发表于 2014-7-16 11:04:38 | 显示全部楼层
回复【6楼】catbal:
---------------------------------
请问哈你是怎么解决的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 07:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表