日期:2014-05-16  浏览次数:20550 次

看似简单的串口问题,竟出了问题!
用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内的