OpenEdv-开源电子网

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

如何用f_write往SD卡里一次写2byte的数据

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
发表于 2016-9-5 16:11:30 | 显示全部楼层 |阅读模式
1金钱
程序里要把采集的温度数据写到SD卡里,温度数据已经放在temperature变量;
  u16 temperature;

  res=f_open (&fil,"0:/test.txt", FA_CREATE_ALWAYS|FA_WRITE);

  f_write (&fil,&temperature, sizeof(temperature)-1, &bww);
  
  f_close(&fil);
但是写到sd里的数据有问题,不是temperature变量里的内容,

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

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-9-5 16:15:10 | 显示全部楼层
temperature里面放的啥数据?你干嘛要用sizeof?
回复

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2246
金钱
2246
注册时间
2010-12-16
在线时间
202 小时
发表于 2016-9-5 16:17:37 | 显示全部楼层
文本操作使用 f_printf .
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
 楼主| 发表于 2016-9-5 16:29:11 | 显示全部楼层
GS1101923161 发表于 2016-9-5 16:15
temperature里面放的啥数据?你干嘛要用sizeof?

16bit的温度数据,我想把这个温度数据不断写到sd卡里,然后再在电脑里读出来,
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
 楼主| 发表于 2016-9-5 16:34:39 | 显示全部楼层
shihantu 发表于 2016-9-5 16:17
文本操作使用 f_printf .

        while(1)
        {       
                if(t%10==0)
                        {
                                SENSOR_Read_Data( &temperature, &humidity );
                                val_temp=temperature;
                                val_hum=humidity;
                                printf( "temperature: %g", val_temp/10 );
                                printf( " C\n" );
                                printf( "humidity: %g", val_hum/10);
                                printf( "%%\n" );
                               
                                tempp=(char)temperature>>8;
                                res=f_open (&fil,"0:/test.txt", FA_CREATE_ALWAYS|FA_WRITE);       
                 
                                f_printf (&fil,&tempp, sizeof(tempp)-1, &bww);
               
                                f_close(&fil);
                        }
                delay_ms( 200 );
                t++;
      }
这样直接写不进去了
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
 楼主| 发表于 2016-9-5 16:35:54 | 显示全部楼层
shihantu 发表于 2016-9-5 16:17
文本操作使用 f_printf .

那个temperature里放的是16bit的温度数据
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-9-5 16:57:10 | 显示全部楼层
kk12138 发表于 2016-9-5 16:29
16bit的温度数据,我想把这个温度数据不断写到sd卡里,然后再在电脑里读出来,

竟然知道要写入16bit的数据,为何不直接设置写入2byte,还是用sizeof
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
 楼主| 发表于 2016-9-5 17:05:33 | 显示全部楼层
GS1101923161 发表于 2016-9-5 16:57
竟然知道要写入16bit的数据,为何不直接设置写入2byte,还是用sizeof

f_write(&fil,&temperature, 2, &bww);
这样写进去sd'卡里只有一个0,程序里是想2s写一次,连续写数据实现不了
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-9-5 17:12:09 | 显示全部楼层
kk12138 发表于 2016-9-5 17:05
f_write(&fil,&temperature, 2, &bww);
这样写进去sd'卡里只有一个0,程序里是想2s写一次,连续写数据实 ...

你写入是个16进制数,你用文本文件的形式打开,能看到个0很正常,除非你写入的是个字符串,想查看16进制数是否写入成功,你应该用程序去读取它,然后打印出来才对。还有,在进行16进制的数据读写时,先用个普通的字符串做下读写测试,如果没问题,再进行16进制数的读写。
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
 楼主| 发表于 2016-9-5 17:43:55 | 显示全部楼层
GS1101923161 发表于 2016-9-5 17:12
你写入是个16进制数,你用文本文件的形式打开,能看到个0很正常,除非你写入的是个字符串,想查看16进制 ...

多谢指点,现在已经可以读到正确的数据了,但是那个温度值每次只写一次,我是想把那个f_write放到一个循环里,2s写一次数据进去,这样那个txt文件里能存一段时间内的多个数据,求赐教这样的话该怎么实现,感谢!
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-9-6 08:49:04 | 显示全部楼层
kk12138 发表于 2016-9-5 17:43
多谢指点,现在已经可以读到正确的数据了,但是那个温度值每次只写一次,我是想把那个f_write放到一个循 ...

那就一直写啊,反正你每个数据的长度都是固定的,读取的时候可以都读出来,然后每2个字节算一个数据,就行了。还有个方法,就是可以将16进制数据转换成字符串的形式写入txt中,然后每个数据直接以一个特殊的字符做间隔符,比如空格或逗号啥的,这样可以防止在16进制的情况下因数据写入错误而导致数据位移,提高数据存储的正确率,当然,如果你想直接在16进制数的后面加个分隔符,我建议不要这么做,因为你很难保证这个数据和间隔符不会一样。
回复

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2246
金钱
2246
注册时间
2010-12-16
在线时间
202 小时
发表于 2016-9-6 23:53:41 | 显示全部楼层
kk12138 发表于 2016-9-5 16:35
那个temperature里放的是16bit的温度数据

f_printf (&fil,"temp = %d", temperature);
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

23

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2015-1-25
在线时间
83 小时
发表于 2016-11-28 11:28:52 | 显示全部楼层
楼主,我遇到一个问题,就是  把USART_RX_BUF[20]={7b 00 01  00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 7d}里面都是16进制的数据,0X全部省略写了,写入的时候不能写入,但是写入如USART_RX_BUF[20]={“abcdefg”}字符的形式就可以,请问你遇到这个问题了么?怎么解决的呢

谢谢
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-11-28 12:11:39 | 显示全部楼层
neuangel 发表于 2016-11-28 11:28
楼主,我遇到一个问题,就是  把USART_RX_BUF[20]={7b 00 01  00 00 01 01 01 00 01 00 00 00 00 00 00 00  ...

0x是C语言的标准为什么要省略?
回复

使用道具 举报

23

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2015-1-25
在线时间
83 小时
发表于 2016-11-28 15:27:57 | 显示全部楼层
yyx112358 发表于 2016-11-28 12:11
0x是C语言的标准为什么要省略?

我在写这个帖子的时候省略了。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 13:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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