OpenEdv-开源电子网

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

求教如何通过FATFS向SD卡TXT中写入传感器数据(十三位二进制,剩余高三位无意义)

[复制链接]

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
发表于 2016-6-3 10:19:32 | 显示全部楼层 |阅读模式
10金钱
我向txt中写字符串或者定义好的数组就可以,但AccValue[]数组装载传感器的输出值,就有问题,txt中要不是空白,要不是乱码

        uint16_t AccValue[3];

        f_mount(0,&fs);

        res = f_open(&fnew, "0:accfile.txt", FA_CREATE_ALWAYS | FA_WRITE );
       
        for (index = 0; index < BLOCK_SIZE; index++)
        {
               
                        f_lseek(&fnew,fnew.fsize);
                        res = f_write(&fnew, AccValue, sizeof(AccValue), &bw);
                        f_sync(&fnew);
        }
       
        f_close(&fnew);

void Get_AccValue(void)  //装载AccValue数组,只贴了一部分示意
{

        if((GravityData.Xout&0xF000) ==0x0000)
        {
                temp = GravityData.Xout;
                AccValue[0] = (uint32_t)temp *38;
        }
        else
        {
                GravityData.Xout -= 1;
                GravityData.Xout = ~GravityData.Xout;
                temp = GravityData.Xout;
                AccValue[0] = (uint32_t)temp *38;
        }
}


最佳答案

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

各位分离,在转换成ASCII码就行了。//十三位二进制,最大值是8191,即4位十进制即可表示 uint8_t buf[7] = "0000\r\n"; //对数据进行分离,并转换成ASCII码的0~9字符 buf[0] = AccValue/1000%10 + '0';[/backcolor] buf[1] = AccValue/100%10[/backcolor] [/backcolor]+ '0'[/backcolor];[/backcolor] buf[2] = AccValue/10%10[/backcolor] [/backcolor]+ '0'[/backcolor];[/backcolor] buf[3] = AccValue%10[/backcolor] [/ ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-6-3 10:19:33 | 显示全部楼层
本帖最后由 adlu 于 2016-6-3 10:33 编辑

各位分离,在转换成ASCII码就行了。//十三位二进制,最大值是8191,即4位十进制即可表示
uint8_t buf[7] = "0000\r\n";
//对数据进行分离,并转换成ASCII码的0~9字符
buf[0] = AccValue/1000%10 + '0';
buf[1] = AccValue/100%10 + '0';
buf[2] = AccValue/10%10 + '0';
buf[3] = AccValue%10 + '0';
f_lseek(&fnew,fnew.fsize);
res = f_write(&fnew, buf, 6, &bw);
f_sync(&fnew);

回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 10:22:42 | 显示全部楼层
temp类型为uint16_t,这里贴的老代码,写错了
回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 10:29:44 | 显示全部楼层
adlu 发表于 2016-6-3 10:25
各位分离,在转换成ASCII码就行了。

学习C语言和32时间不长,请教下大概是要怎么转换呢
回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 10:34:34 | 显示全部楼层
adlu 发表于 2016-6-3 10:19
各位分离,在转换成ASCII码就行了。//十三位二进制,最大值是8191,即4位十进制即可表示
uint8_t buf[7] = ...

请问为什么取余后要加一个'0'呢
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-6-3 10:36:48 | 显示全部楼层
郝洋 发表于 2016-6-3 10:34
请问为什么取余后要加一个'0'呢

'0' = 0x30 = 48
是字符0在ASCII码中的位置。
回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 10:38:22 | 显示全部楼层
adlu 发表于 2016-6-3 10:36
'0' = 0x30 = 48
是字符0在ASCII码中的位置。

。。。为啥要加字符0的位置进去啊,是ASC转换格式吗
回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 10:45:29 | 显示全部楼层
adlu 发表于 2016-6-3 10:19
各位分离,在转换成ASCII码就行了。//十三位二进制,最大值是8191,即4位十进制即可表示
uint8_t buf[7] = ...

而且各位分离不应该是16个数吗
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-6-3 10:45:39 | 显示全部楼层
郝洋 发表于 2016-6-3 10:38
。。。为啥要加字符0的位置进去啊,是ASC转换格式吗

先验证一下我提供的方法是否可行。
你先试一下,把要写入的变量AccValue固定为1234,应该可以在文件中得到1234。
在此基础上,你再将'0'改为'A',应该在文件中得到BCDE。

慢慢体会吧。
回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 11:02:58 | 显示全部楼层
adlu 发表于 2016-6-3 10:45
先验证一下我提供的方法是否可行。
你先试一下,把要写入的变量AccValue固定为1234,应该可以在文件中得 ...

谢谢!我明白了!
回复

使用道具 举报

4

主题

18

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-1
在线时间
7 小时
 楼主| 发表于 2016-6-3 11:46:46 | 显示全部楼层
adlu 发表于 2016-6-3 10:19
各位分离,在转换成ASCII码就行了。//十三位二进制,最大值是8191,即4位十进制即可表示
uint8_t buf[7] = ...

成功了!谢谢你!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 13:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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