OpenEdv-开源电子网

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

有关串口数据接收字符串

[复制链接]

20

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1180
金钱
1180
注册时间
2018-9-11
在线时间
132 小时
发表于 2018-10-24 16:54:01 | 显示全部楼层 |阅读模式
10金钱
各位大佬,
我想实现串口接收数据后,将数据整合为字符串或者浮点型变量。
大概就是,用串口监控助手,发送 1.23456  开发板串口接收到后赋值给一个float型变量,这个float型变量的值就是1.23456

有没有大神给个思路,十分感谢!!

最佳答案

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

unsigned char *buff; float f_data; buff[0]=接收的数据1; buff[1]=接收的数据2; buff[2]=接收的数据3; buff[n]=接收的数据n; buff[n+1]=0x00; //结尾 f_data=atof(buff);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

133

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3863
金钱
3863
注册时间
2016-6-11
在线时间
710 小时
发表于 2018-10-24 16:54:02 | 显示全部楼层
本帖最后由 jxcrgt35 于 2018-10-25 15:30 编辑

unsigned char *buff; float f_data;   
buff[0]=接收的数据1;
buff[1]=接收的数据2;
buff[2]=接收的数据3;
buff[n]=接收的数据n;
buff[n+1]=0x00;  //结尾
f_data=atof(buff);
回复

使用道具 举报

4

主题

133

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3863
金钱
3863
注册时间
2016-6-11
在线时间
710 小时
发表于 2018-10-24 22:17:47 | 显示全部楼层
使用atof函数啊。
回复

使用道具 举报

20

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1180
金钱
1180
注册时间
2018-9-11
在线时间
132 小时
 楼主| 发表于 2018-10-25 09:36:18 | 显示全部楼层

关键串口每次只能接收一个字节,但我每次用串口监视软件发送的字节数是不一样的,怎么把接收到的一个个字节整合成一个字符串呢?
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6747
金钱
6747
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-10-25 10:57:00 | 显示全部楼层
接收用一个数组
回复

使用道具 举报

20

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1180
金钱
1180
注册时间
2018-9-11
在线时间
132 小时
 楼主| 发表于 2018-10-25 14:53:11 | 显示全部楼层

我目前是采用这种方法的,然后遇到了下一个问题,怎么把字符数组转成整形或者浮点型数据。。。

就是{“1”“.”“2”“3”}怎么转成1.23?
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-11-23
在线时间
6 小时
发表于 2018-11-23 23:35:08 | 显示全部楼层
我也想用串口每20ms读取陀螺仪的数据,然后不知道怎么将串口获得的数据转换成可以用于程序里面的变量,楼主解决了吗?可以分享一下吗?
回复

使用道具 举报

20

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1180
金钱
1180
注册时间
2018-9-11
在线时间
132 小时
 楼主| 发表于 2018-11-26 10:41:53 | 显示全部楼层
vuongnavy 发表于 2018-11-23 23:35
我也想用串口每20ms读取陀螺仪的数据,然后不知道怎么将串口获得的数据转换成可以用于程序里面的变量,楼主 ...

你好,我当时的问题是从串口接收到char型数组,然后转成float型变量,如果你遇到的也是这个问题的话可以参考一下我的解决方案,我把代码贴给你。

int char2int(uint8_t data4g[], int count)
{
        int i;
        int result=0;
        for(i=0;i<count;i++)
        {
                result=result*10+data4g-'0';
        }
        return result;
}

double char2float(uint8_t data4g[], int count)
{
        int i;
        int j;
        double result=0;
        for(i=0;i<count;i++)
        {
                if(data4g=='.')
        {
          j=i;
          continue;
        }
                result=result*10+data4g-'0';
        }
        result=result*pow(10.0,(j-count+1));
       
        return result;       
}

这两个就是把字符串转成整形或者浮点型数据。
回复

使用道具 举报

20

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1180
金钱
1180
注册时间
2018-9-11
在线时间
132 小时
 楼主| 发表于 2018-11-26 10:43:08 | 显示全部楼层
ichmarcel 发表于 2018-11-26 10:41
你好,我当时的问题是从串口接收到char型数组,然后转成float型变量,如果你遇到的也是这个问题的话可以 ...

这个count就是接收到的数组的长度,data4g就是把串口接收到的数据放进去
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-11-23
在线时间
6 小时
发表于 2018-11-26 23:19:24 | 显示全部楼层
ichmarcel 发表于 2018-11-26 10:43
这个count就是接收到的数组的长度,data4g就是把串口接收到的数据放进去

我明白了,谢谢楼主
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-2 01:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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