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

2023-05-16

用串口传输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 就行了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用串口传输float类型数据 的相关文章

随机推荐