关于串口通信问题。
-
-
大核桃
- LV2工程师
-
| 2016-04-08 08:37:47
- 浏览量 865
- 回复:7
刚刚进入传感器生产企业,对51单片机的认识只限于天祥老师的10天学会单片机水平,关于串口通信问题有一些疑惑,希望传感器行业的朋友能够帮忙解答,如果有问的不明白的地方,希望各位朋友指出。非常感谢。
1,请问在串口通信中,数据包的帧头和帧尾(比如0x55,0xaa)是怎样加入到数据包的?是不是定义一个数组,将帧头和帧尾设置成0x55,0xaa,再将整个数组发送?在发送包含帧头帧尾的数据包时,是否需要在发送端发送时,即校验帧头帧尾?还是只需要在接收端校验帧头帧尾即可?
2,请问在串口通信中,如果需要发送如3.13这样的非整形数据,该如何实现?是由发送端进行处理,还是由接收端接收数据后再进行处理?
3,如果发送端发送3.13这种非整形数据包,如何处理数据包的校验和?
刚刚进入传感器生产企业,对51单片机的认识只限于天祥老师的10天学会单片机水平,关于串口通信问题有一些疑惑,希望传感器行业的朋友能够帮忙解答,如果有问的不明白的地方,希望各位朋友指出。非常感谢。
1,请问在串口通信中,数据包的帧头和帧尾(比如0x55,0xaa)是怎样加入到数据包的?是不是定义一个数组,将帧头和帧尾设置成0x55,0xaa,再将整个数组发送?在发送包含帧头帧尾的数据包时,是否需要在发送端发送时,即校验帧头帧尾?还是只需要在接收端校验帧头帧尾即可?
2,请问在串口通信中,如果需要发送如3.13这样的非整形数据,该如何实现?是由发送端进行处理,还是由接收端接收数据后再进行处理?
3,如果发送端发送3.13这种非整形数据包,如何处理数据包的校验和?
数据帧是建立一个数组,赋值后发送的,一个完整的通信协议,包括帧头,命令 功能码 数据位 校验码 帧尾数据组成,你把这些固定的0x55 0xAA填入固定的数组单元位置,然后发送数组就可以实现。
对于浮点数的处理,需要转换为整数存储,再接收端接收后,再转换为实数的。
楼主关于数据帧帧头和帧尾的理解是正确的,校验接收方检测就可以了,关于浮点数据的传输,楼主可以参考下这篇文档
2、浮点数据在单片机中都是32位数据,且是浮点数的编码。这样要是发多的话会很长时间,一种是转换成整型,根据你要的浮点精度来处理,*10、*100,在接收端再转成小数。
如果直接发浮点数的编码,你在接收端还要进行解码。
浮点数存储格式:http://blog.chinaunix.net/uid-23204219-id-1761337.html
3、这一点与第二点是相关的,校验和看你用什么方法,是CRC还是奇偶等等,由于浮点数还是以32位整型进行存储的,所以校验和也是按整型进行计算的。