2019-07-18 02:21发布
ShuiMoLise 发表于 2015-11-4 19:15 如果传感器发送的数据没有问题,估计还是程序有问题,程序周期性发生错误。你传感器发过来的数据帧有帧头帧尾吗,没有的话容易发生这种错误,尤其是数据帧是由多个字节组成,而且没有帧头帧尾的时候。你波特率别太高,太高的话虽然传输速度快了,但是容易受到干扰,如果非要用这么高波特率,要加校验,简单的如奇偶校验 。 ...
ShuiMoLise 发表于 2015-11-5 22:20 关于校验应该是要你自己编程计算 第二位+第三位=第四位。 关于接收数据,我们都是,延时个50或100ms然后一次性读取缓冲区所有字节然后转成字节数组,添加到移位寄存器,然后搜索帧头,截取6个字节,然后看看帧尾是不是ff,是的话就校验一下,没问题就计算温度值 ...
最多设置5个标签!
还有一个问题,我不启用终止符的话,假设设定一次串口读取六个字节,数据总是先收到AA,然后收到后面的五位,就这样分两次收到,甚至有时候分四次收到。但是我如果启用终止符的话(默认的0xA),就是一次收到六个字节的全部的数据(如:AA01 09B1 BBFF ,24.81℃),但是数据里面可能会出现终止字符0A,这时候就会出现问题,换成其他终止符也不行,因为都有肯能出现的。说明一下,第五位BB是校验位,是第二三四位的和(不知道这在串口中该设置成哪种校验位吗?);第二位01代表正,00代表负。
关于接收数据,我们都是,延时个50或100ms然后一次性读取缓冲区所有字节然后转成字节数组,添加到移位寄存器,然后搜索帧头,截取6个字节,然后看看帧尾是不是ff,是的话就校验一下,没问题就计算温度值
谢谢!我也有延时蛮长时间,也是一次读取缓冲区所有然后转换为字节数组,然后用索引数组,直接提取第二三四位进行计算。校验我可以实现,但是关键是如果某次校验发现数据不对,想用上一次的代替,或者直接舍去进行下次循环读取串口然后计算。现在关键点就在这里,不知该如何实现这个比较去掉不正确的值。
还有一个问题,我不启用终止符的话,假设设定一次串口读取六个字节,数据总是先收到AA,然后收到后面的五位,就这样分两次收到,甚至有时候分四次收到。但是我如果启用终止符的话(默认的0xA),就是一次收到六个字节的全部的数据(如:AA01 09B1 BBFF ,24.81℃),但是数据里面可能会出现终止字符0A,这时候就会出现问题,换成其他终止符也不行,因为都有肯能出现的。说明一下,第五位BB是校验位,是第二三四位的和(不知道这在串口中该设置成哪种校验位吗?);第二位01代表正,00代表负。
一周热门 更多>