看似简单的串口问题,竟出了问题!
用C编了一个串口的接收程序,外部设备一直在往串口写数据,所以串口只需要打开和读就可以了
这个看似简单的串口问题,竟出了问题!
接收的数据在超级终端上打印,打印出来的结果如下,大家帮我分析一下啊,谢谢
/—————————————结果————————————————————/
# ./recv
fd = 4
ready for sending command-------
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'
<'0'<'0'<'0'<'0'<'0'<'0'<'0'<'0'nread = 128
<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'~'<'?
<'?<'?<'?<'?<'?<'?<'~'<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?
<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?'<'?<'?
<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?
<'?<'?<' '<'?<''<'D'<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?<'?
/———————————————————————————————————/
程序代码如下:
另外一个问题是:sleep(1)的问题,怎么串口打开后需要延迟一段时间才能读到足够多的数据(比如256个)?
------解决方案--------------------应该不是波特率的原因.
在你打开串口并设置好后,串口开始接收数据,根据你的波特率,串口最快一秒钟也就接收3600个字节.即1ms接收3.6个字节左右,从你设置好串口到开始读取数据,由于没有其它操作也就1ms左右,即到你开始读取数据时,串口的缓冲区中有4个字节左右,即你能读取4-5个字节.你加入了sleep(1)后,到你读取数据时缓冲区中最多可能有3600个字节了,故你能读取够128个字节.
计算一下,你usleep(50)左右差不多就可以了.
------解决方案--------------------printf(" < '%c '",qq[i]) ;
改
printf(" < 0x%x",qq[i]) ;
打印16进制,去掉‘’
%c字符型的只能显示128内的