使用串口中断函数收到实际单片机发来的数据总是错
问题描述:我采用了串口中断的方式,来从单片机取得数据。之前使用串口助手调试,一切正常。具体写法见附件里的serial_RECV_Even.vi。
但是当连接到实际单片机时,有几位十六进制字符串总是错误。
然后当我使用串口助手,连接单片机时读数正常。
然后我把labvIEW的读串口方式,改成轮询(附件Serial_RECV_Poll.vi),这次连接实际单片机也正常。请问为什么?波特率,停止位,校验位全都检查过了,全都与单片机一致。但是当轮询时间太长的时候,仍然会有个别读数错误的时候。这个时候采用回调函数,也就是用MSCOMM控件,利用VB里的串口中断。
1.请问这三种方式,为啥第一种Vsia wait on 函数总读数错误,第二种轮询方式(poll.vi)有时候会读错数,而第三种方式基本上就是和串口助手一样,总是正确。这三种方式, 使用上有什么要注意的?
2.Vsia wait on 函数,我看帮助翻译里:“事件类型”可以选择“串口中断”,也就是等待串口中断事件产生。这个是不是中断等待函数?和VB里的MSCOMM控件里的串口中断有啥本质区别?Labview到底能不能实现本质上的中断方式响应串口?而不是轮询? 如果都是中断方式,为啥第一种方式总出错?
附件里是压缩rar文件,不让上传,所以把扩展名改成了jpg。自己改成rar扩展名,即可解压缩,里面有三种对应的串口查询方式。
请高手详细分析一下,这三种方式的本质和运行机制,以及适用范围,和注意事项。网上查了很多次,没有答案,故而发帖。谢谢!