OpenEdv-开源电子网

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

求大神解决,内部FLASH写入和读取数据出现的问题

[复制链接]

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
发表于 2013-10-19 22:14:27 | 显示全部楼层 |阅读模式

为什么写入内部FLASH的数据和读出的数据怎么不一样啊
MAG_1[73][0至24] MAG_1[74][0至24] MAG_1[75][0至24]  MAG_1[76][0至24]
这些都不要对请大神看下程序有什么问题啊

 u8 key_mag;                   //矩阵键盘
 int x1,y1,x2,y2,x10,y10,x20,y20;
 int h=0;
 int v=0;
 int hh=0;
 int vv=0;
 int xx,yy;
 int num_mag1=1;
 int num_mag2=1;
 int i_magd,j_magd,i_magr,j_magr;
 #define FLASH_SAVE_ADDR  0X08070000     
///////////////////////////////////////////////////////////////////////////////
  u16 MAG_1[100][25];       //
///////////////////////////////////////////////////////////////////////////////
   void mag1(void)
   {
        LCD_Clear(WHITE);
        POINT_COLOR=BLACK;
  LCD_DrawRectangle(2,2,318,238);
  LCD_DrawLine(78,22,318,22);        //横线
  LCD_DrawLine(2,46,318,46);        //横线
  LCD_DrawLine(47,62,318,62);        //横线
  LCD_DrawLine(2,78,318,78);        //横线
  LCD_DrawLine(47,94,318,94);        //横线
  LCD_DrawLine(2,110,318,110);    //横线
  LCD_DrawLine(47,126,318,126);    //横线
  LCD_DrawLine(2,142,318,142);    //横线
  LCD_DrawLine(47,158,318,158);    //横线
  LCD_DrawLine(2,174,318,174);    //横线
  LCD_DrawLine(47,190,318,190);    //横线
  LCD_DrawLine(2,206,318,206);    //横线
  LCD_DrawLine(47,222,318,222);    //横线
  LCD_DrawLine(47,2,47,238);        //竖线
  LCD_DrawLine(78,2,78,238);        //竖线
  LCD_DrawLine(118,22,118,238);    //竖线
  LCD_DrawLine(158,22,158,238);    //竖线
  LCD_DrawLine(198,22,198,238);    //竖线
  LCD_DrawLine(238,22,238,238);    //竖线
  LCD_DrawLine(278,22,278,238);    //竖线
  OINT_COLOR=BLUE;
  Show_Str(4,6,200,14,"目的地",14,1);
  Show_Str(11,26,200,14,"编号",14,1);
  Show_Str(50,6,200,14,"行进",14,1);
  Show_Str(50,26,200,14,"方向",14,1);
  Show_Str(50,47,200,14,"前进",14,1);
  Show_Str(50,63,200,14,"后退",14,1);
  Show_Str(50,79,200,14,"前进",14,1);
  Show_Str(50,95,200,14,"后退",14,1);
  Show_Str(50,111,200,14,"前进",14,1);
  Show_Str(50,127,200,14,"后退",14,1);
  Show_Str(50,143,200,14,"前进",14,1);
  Show_Str(50,159,200,14,"后退",14,1);
  Show_Str(50,175,200,14,"前进",14,1);
  Show_Str(50,191,200,14,"后退",14,1);
  Show_Str(50,207,200,14,"前进",14,1);
  Show_Str(50,223,200,14,"后退",14,1);
  Show_Str(145,4,200,14,"分岔点编号",14,1);
   }
/////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////
   void mag(int display_mag)
   {   
 u16 datatemp[100][25];  //数据读取
 STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,2500);
  for(i_magd=0;i_magd<100;i_magd++)
  {
   for(j_magd=0;j_magd<25;j_magd++)
   {
    MAG_1[i_magd][j_magd]=datatemp[i_magd][j_magd];
    }
   }
//////////////////////////////////////////////////////////////////////// 
 mag1();
 while(display_mag==5)
 { 

  key_mag=keyboard_Scan(); //矩阵键盘键值
  if(key_mag==4|key_mag==6|key_mag==10|key_mag==11|key_mag==12)
  {
   display_mag=key_mag;
   goto end;
  }
//////////////////////////////////////////////////////////////////////////////////////////////////////
  if(key_mag==32) //向下
  {
   num_mag1++;
   if(num_mag1<=12)hh++;
   else
   {hh=hh+2;}
   if(num_mag1>12)
   {h++;num_mag1=12;}
   if(h>44)
   {h=44;}
   if(hh>99)hh=99;
  }
  if(key_mag==26) //向上
  {
   num_mag1--;
   if(num_mag1>=1)hh--;
   else
   {hh=hh-2;}
   if(num_mag1<1)
   {h--;num_mag1=1;}
   if(h<0)
   {h=0;}
   if(hh<0)hh=0;
  }
  if(key_mag==33) //向右
  {
   num_mag2++;
   vv++;
   if(num_mag2>6)
   {v++;num_mag2=6;}
   if(v>19)
   {v=19;}
   if(vv>24) vv=24;
  }
  if(key_mag==31)    //向左
  {
   num_mag2--;
   vv--;
   if(num_mag2<1)
   {v--;num_mag2=1;}
   if(v<0)
   {v=0;}
   if(vv<0) vv=0;
  }

 

  if(key_mag==27) //下翻页
  {
   num_mag1=num_mag1+11;
   if(num_mag1>12)
   {h=h+6;num_mag1=12;}
   if(h>44)
   {h=44;}
   hh=2*h+11;
   if(hh>99)hh=99;
  }
  if(key_mag==21) //上翻页
  {
   num_mag1=num_mag1-11;
   if(num_mag1<1)
   {h=h-6;num_mag1=1;}
   if(h<0)
   {h=0;}
   hh=(2*h+11)-11;
   if(hh<0)hh=0;
  }
 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////
  for(i_magr=2*h;i_magr<(2*h+12);i_magr++)
  {
   for(j_magr=v;j_magr<(v+6);j_magr++)
   {
    if(MAG_1[i_magr][j_magr]==0|MAG_1[i_magr][j_magr]!=1|MAG_1[i_magr][j_magr]!=2|MAG_1[i_magr][j_magr]!=3) LCD_Fill(39+4+40*(j_magr-v+1),31+1+16*(i_magr-2*h+1),77-4+40*(j_magr-v+1),45-1+16*(i_magr-2*h+1),WHITE);
    if(MAG_1[i_magr][j_magr]==1) Show_Str(95+40*(j_magr-v),47+16*(i_magr-2*h),200,14,"左",14,1);
    if(MAG_1[i_magr][j_magr]==2) Show_Str(95+40*(j_magr-v),47+16*(i_magr-2*h),200,14,"中",14,1);
    if(MAG_1[i_magr][j_magr]==3) Show_Str(95+40*(j_magr-v),47+16*(i_magr-2*h),200,14,"右",14,1);
    }
   }
/////////////////////////////////////////////////////////////////////////////////////////////////////
  //if(39+40*num_mag2<79) goto end;
  //if(31+16*num_mag1<47) goto end;
  x1=(39+40*num_mag2);
  y1=(31+16*num_mag1);
  x2=(77+40*num_mag2);
  y2=(45+16*num_mag1);

  LCD_ShowxNum(12,54,1+h,3,16,0);
  LCD_ShowxNum(12,86,2+h,3,16,0);
  LCD_ShowxNum(12,118,3+h,3,16,0);
  LCD_ShowxNum(12,150,4+h,3,16,0);
  LCD_ShowxNum(12,182,5+h,3,16,0);
  LCD_ShowxNum(12,214,6+h,3,16,0);

  LCD_ShowxNum(85,27,1+v,3,16,0);
  LCD_ShowxNum(125,27,2+v,3,16,0);
  LCD_ShowxNum(165,27,3+v,3,16,0);
  LCD_ShowxNum(205,27,4+v,3,16,0);
  LCD_ShowxNum(245,27,5+v,3,16,0);
  LCD_ShowxNum(285,27,6+v,3,16,0);


  if(x1!=x10|x2!=x20|y1!=y10|y2!=y20) LCD_Fill(x10,y10,x20,y20,WHITE);
  LCD_Fill(x1,y1,x2,y2,GRAY);
  if(key_mag==23|key_mag==24)   MAG_1[hh][vv]=0;//删除
  else if(key_mag==13)          MAG_1[hh][vv]=1;//左
  else if(key_mag==14)          MAG_1[hh][vv]=2;//中
  else if(key_mag==15)          MAG_1[hh][vv]=3;//右
  LCD_ShowxNum(220,4,hh,3,16,0);
  LCD_ShowxNum(260,4,vv,3,16,0);
  LCD_ShowxNum(300,4,MAG_1[hh][vv],2,16,0);
  x10=x1;
  y10=y1;
  x20=x2;
  y20=y2;
///////////////////////////////////////////////////////////////////////////////////////////////////// 
  if(key_mag==25)   //数据存储
  {
    LCD_Fill(79,79,237,157,WHITE);//清除局部屏
    Show_Str(96,112,200,14,"开始写入数据....",14,1);   
    STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)MAG_1,2500);
    delay_ms(10000);
    Show_Str(96,112,200,14,"  数据写入完成  ",14,1);//提示传送完成
    delay_ms(10000);
    mag1();
  }
/////////////////////////////////////////////////////////////////////////////////////////////////////
  end:{}
 }
   }

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-19 22:54:11 | 显示全部楼层
在哪个开发板测试的?
你单个数据写入读取有没有问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-10-19 23:12:02 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
单个的读写都没有问题
一直到mag_1[59][24]都没有问题啊
超过这个就存储不进去了啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-19 23:15:18 | 显示全部楼层
回复【3楼】龙胜阳子:
---------------------------------
建议直接JTAG跟踪一下,查看到这个位置的时候,对应地址的值,是怎么出问题的,确定下问题原因..
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-10-19 23:16:04 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
不会啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-19 23:17:22 | 显示全部楼层
回复【5楼】龙胜阳子:
---------------------------------
JTAG仿真不会啊??
有我们的开发板吧?
我们开发板有入门视频教程,jtag如何用的就有教你的.看下吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-10-19 23:18:20 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
当#define FLASH_SAVE_ADDR  0X0803f400 改为#define FLASH_SAVE_ADDR  0X08070000
的时候一个都存储不进去啊
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2013-10-19 23:18:59 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我用的战舰开发板3.5寸屏  开发板买了两套
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 17:19:31 | 显示全部楼层
回复【8楼】龙胜阳子:
---------------------------------
我回头测试下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-10 19:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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