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