OpenEdv-开源电子网

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

从flash中读出的数据全为??

[复制链接]

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
发表于 2019-10-21 23:33:01 | 显示全部楼层 |阅读模式
20金钱
先用flash存放数据,后面读出来,可是读出来的全是??
                            //读24分钟,5s钟读一次,总共24*60/5*8=2304字节;
                            //存flash


                                                   //第一个通道今天的数据存到flash1_1单元
                                                   if(flash1_1[0]&&flash1_2[0]==0)
                                                   {       
                                                        if(addr1_1<0xff0000||addr1_1>=0xff0000+2304) addr1_1=0xff0000;                                                          
                                                        //读24分钟,5s钟读一次,总共24*60/5*8=2304字节;
                                                        W25QXX_Write(temp1+6,addr1_1,2);
                                                        addr1_1+=2;
                                                       
                                                        W25QXX_Write(temp1+9,addr1_1,2);
                                                        addr1_1+=2;               
                                                       
                                                        W25QXX_Write(hum1+6,addr1_1,2);               
                                                        addr1_1+=2;
                                                       
                                                        W25QXX_Write(hum1+9,addr1_1,2);                               
                                                        addr1_1+=2;
                                                         
                                                        if(addr1_1>=0xff0000+2304) //读完一天的数据了
                                                        {
                                                                flash1_1[0]=0;        //变成了昨天
                                                                flash1_1[1]=1;       
                                                                flash1_2[0]=1;        //变成了今天
                                                                flash1_2[1]=0;
                                                                addr1_2=0xff1000;        //从头开始
                                                        }



  读flash:
                                         //发送通道1昨天的数据
          else if(flag1_yes)
          {
           if(flash1_1[0]==0)         //昨天的数据存放在flash1_1中
                {
                 for(i=0;i<2304;)
                  {
                        W25QXX_Read(temp1+6,0xff0000+i,2);                                       
                        i+=2;
                        W25QXX_Read(temp1+9,0xff0000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+6,0xff0000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+9,0xff0000+i,2);                                       
                        i+=2;
                        for(j=0;j<14;j++)
                        {
                                USART_SendData(USART1,temp1[j]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);       
                        }                       
                        for(j=0;j<14;j++)
                        {       
                                USART_SendData(USART1, hum1[j]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }                               
                   }                               
                }
           else if(flash1_2[0]==0)        //昨天的数据存放在flash1_2中
                {
              for(i=0;i<2304;)
                  {
                        W25QXX_Read(temp1+6,0xff1000+i,2);                                       
                        i+=2;
                    W25QXX_Read(temp1+9,0xff1000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+6,0xff1000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+9,0xff1000+i,2);                                       
                        i+=2;
                    for(j=0;j<14;j++)
                        {
                           USART_SendData(USART1,temp1[j]);
                           while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);       
                    }               
                        for(j=0;j<14;j++)
                        {       
                                USART_SendData(USART1, hum1[j]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }                               
                   }
                }
                //只发送一次
                flag1_yes=0;         
          }
4ILFEPXG5`{~{DORG`%(2CK.png

最佳答案

查看完整内容[请看2#楼]

flash读取写入没有问题,是其他的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-21 23:33:02 | 显示全部楼层
lvdouboy0001 发表于 2019-10-23 21:30
求助,卡住好几天了

flash读取写入没有问题,是其他的问题
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-21 23:43:28 | 显示全部楼层
读取的是外部flash,从0xff0000~0xff10000开始是一个扇区,一个扇区可以存4096个字节,我只存了2304个字节,是一个温度管理的代码,实时读取的温度存到flash的一片扇区里面,存够2304个字节之后之后将实时温度存放到下一片扇区0xff1000,然后循环,用标志位判断是今天的数据还是昨天的数据,就是说开辟了两片扇区,0xff0000,和0xff1000,每片扇区附带标志位判断是今天还是昨天,显示今天的数据是没有问题的。
          //发送通道1今天的数据
          else if(flag1_tod)
          {
           if(flash1_1[0]) //今天的数据存放在flash1_1中
                {
                 for(i=0;i+0xff0000<addr1_1;)
                  {
                        W25QXX_Read(temp1+6,0xff0000+i,2);                                       
                        i+=2;
                        W25QXX_Read(temp1+9,0xff0000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+6,0xff0000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+9,0xff0000+i,2);                                       
                        i+=2;
                        for(j=0;j<14;j++)
                        {
                                USART_SendData(USART1,temp1[j]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);       
                        }                       
                        for(j=0;j<14;j++)
                        {       
                                USART_SendData(USART1, hum1[j]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }                               
                   }                               
                }
           else if(flash1_2[0])        //今天的数据存放在flash1_2中
                {
              for(i=0;i+0xff1000<addr1_2;)
                  {
                        W25QXX_Read(temp1+6,0xff1000+i,2);                                       
                        i+=2;
                    W25QXX_Read(temp1+9,0xff1000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+6,0xff1000+i,2);                                       
                        i+=2;
                        W25QXX_Read(hum1+9,0xff1000+i,2);                                       
                        i+=2;
                    for(j=0;j<14;j++)
                        {
                           USART_SendData(USART1,temp1[j]);
                           while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);       
                    }               
                        for(j=0;j<14;j++)
                        {       
                                USART_SendData(USART1, hum1[j]); //向串口 1 发送数据
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }                               
                   }
                }
                //只发送一次,也可以一直发送,加个判断,直到i=2304时就不发了
                flag1_tod=0;       
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-21 23:46:22 | 显示全部楼层
T1.png
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-22 22:55:23 | 显示全部楼层
哪位大佬帮帮忙
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-23 13:01:24 | 显示全部楼层
求助大佬
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2019-10-23 14:20:40 | 显示全部楼层
看看16进制是什么
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-23 18:38:20 | 显示全部楼层

是0x3F,就是ascii的问号
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-23 20:02:02 | 显示全部楼层
HELP,HELP,HELP
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
 楼主| 发表于 2019-10-23 21:30:31 | 显示全部楼层
求助,卡住好几天了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-10-24 01:57:52 | 显示全部楼层
简化代码测试下
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-12-20
在线时间
0 小时
发表于 2019-12-27 09:08:44 | 显示全部楼层
有W25M02GV例程么
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2019-12-10
在线时间
22 小时
发表于 2019-12-27 11:30:01 | 显示全部楼层
把串口助手16进制勾上
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 23:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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