如何使用串口传输float类型数据

用串口传输float类型数据,比较难的就是数据进制的转化

模拟量比如说 角度 距离 速度 这些是10进制,

串口通信用的是16进制 , 数据一个字节一个字节进行传输。

在进行数据解析,数据帧提取时,要把数据从16进制转到10进制,

float 转 unsigned char :

在发送数据时,要把数据从10进制转到16进制,再通过usart串口(或其它外设)发送出去。

数据进制转化的方法有很多,我是用 float 数据 乘1000 再 强制类型转化为 int16 (16位整形数据), 再把这个 int16 转成 高八位、低八位 两个 unsigned char 数据 。源码如下:

#define BYTE0(dwTemp)  (*((char *)(&dwTemp)))
#define BYTE1(dwTemp)  (*((char *)(&dwTemp)+1))
#define BYTE2(dwTemp)  (*((char *)(&dwTemp)+2))
#define BYTE3(dwTemp)  (*((char *)(&dwTemp)+3))

//Float转 unsigned char :/
float  data =0.1235
int16_t  _temp ;
nnsigned char data_Low , data_High ;
  _temp = (int16_t)(  data  * 1000);
  data_High   =BYTE1(_temp);
  data_Low   =BYTE0(_temp);

在这里插入图片描述
在这里插入图片描述
如图。
关于那个宏定义,用来拆开取字节的,具体怎么样我也不会。

unsigned char转 Float :

在这里插入图片描述
((高八位<<8) |低八位 )*0.001 就行了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值