当前位置: 技术问答>linux和unix
奇怪的串口通信问题,请高手指教
来源: 互联网 发布时间:2016-02-16
本文导语: linux下串口发送和接收,发送0~255共256个数据,接收到的数据是:0 1 2 3 4 5 6 7 8 9 10 10 11 12 10 14 15 16。。。。。255,也就是说接收数据10和13时发生错误。而程序与运行在windows下的串口调试助手通信时,发...
linux下串口发送和接收,发送0~255共256个数据,接收到的数据是:0 1 2 3 4 5 6 7 8 9 10 10 11 12 10 14 15 16。。。。。255,也就是说接收数据10和13时发生错误。而程序与运行在windows下的串口调试助手通信时,发送和接收正常。
请高手指点原因,谢谢。
请高手指点原因,谢谢。
|
如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下:
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
options.c_oflag &= ~OPOST; /*Output*/
详情请参考:
http://www.ibm.com/developerworks/cn/linux/l-serials/index.html
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
options.c_oflag &= ~OPOST; /*Output*/
详情请参考:
http://www.ibm.com/developerworks/cn/linux/l-serials/index.html
|
10是换行符号,13是回车符号,串口通常接终端,通常是行模式,这样就会进行回车换行的转换(比如在终端的键盘上输入回车在屏幕上显示的时候会插入一个换行符号,也就是说会把回车转换为换行+回车),所以用串口传数据时,通常需要把串口设置为原始模式(RAW MODE).
|
这个是回车、换行导致的问题
设置c_iflag和c_oflag,将OPOST,INLCR,ICRNL等相关标志位去掉
具体请参考:http://industry.ccidnet.com/art/322/20060414/506801_1.html
设置c_iflag和c_oflag,将OPOST,INLCR,ICRNL等相关标志位去掉
具体请参考:http://industry.ccidnet.com/art/322/20060414/506801_1.html
|
转译了,建议参考《APUE》第18章“终端I/0”