Linux 下 串口收发的常见问题

http://merfesyt.bokee.com/3977962.html

氧气的小木屋

 

Linux 下 串口收发的常见问题

                                      

 

1、虚拟机下使用串口的方法
使用vmwave,默认串口设备是没有添加的,通过vmwave将设备加入即可正常使用串口。虚拟机串口打开后,可能会占用windows下的串口。另外,虚拟机的串口收发比正常的速度的确要慢许多。


2、消除Linux串口收发的一些规则

Linux 串口收发有许多模式,如:

(1) 接收返回模式: 如果串口没有接收到数据,read()函数不返回。

(2) 数据接收/n才返回接收的数据,否则read()函数返回0

(3) 特殊字符解析问题,部分特殊字符接收/发送时,会被屏蔽或者转义。如发送0x0A 接收变为0x0A 0x0A ,0x0D被屏蔽等。

(4) 接收反馈:如串口接收到数据,立即将该数据发送出去。

(上面是我遇到的一些问题,可能表述不很清楚,呵呵。如果用于收发txt文件,一般不大注意。)


3、解决问题的方法是,消除这些默认规则

关键是struct termios 的参数影响。


structtermios{
tcflag_tc_iflag;/**//*输入模式旗标*/
tcflag_tc_oflag;/**//*输出模式旗标*/
tcflag_tc_cflag;/**//*控制模式旗标*/
tcflag_tc_lflag;/**//*区域模式旗标*/
cc_tc_line;/**//*行控制(linediscipline)*/
cc_tc_cc[NCCS];/**//*控制特性*/
};

 

由于研究不深,如果要消除所有上面的规则,我是如下处理的


structtermiosoptions;

串口打开方式:


open(“dev/ttyS0”,O_RDWR|O_NOCTTY|O_NDELAY);

消除收发模式规则:

 


options.c_lflag=0;
options.c_oflag=0;
options.c_iflag=0;


消除字符屏蔽规则:

 

 

options.c_cc[VINTR] = 0;/**//*Ctrl-c*/
options.c_cc[VQUIT] =0;/**//*Ctrl-*/
options.c_cc[VERASE] = 0;/**//*del*/
options.c_cc[VKILL]=0;/**//*@*/
options.c_cc[VEOF]=0;/**//*Ctrl-d*/
options.c_cc[VTIME]=1;/**//**/
options.c_cc[VMIN]=0;/**//**/
options.c_cc[VSWTC]=0;/**//*''*/
options.c_cc[VSTART]=0;/**//*Ctrl-q*/
options.c_cc[VSTOP]=0;/**//*Ctrl-s*/
options.c_cc[VSUSP]=0;/**//*Ctrl-z*/
options.c_cc[VEOL]=0;/**//*''*/
options.c_cc[VREPRINT]=0;/**//*Ctrl-r*/
options.c_cc[VDISCARD]=0;/**//*Ctrl-u*/
options.c_cc[VWERASE]=0;/**//*Ctrl-w*/
options.c_cc[VLNEXT]=0;/**//*Ctrl-v*/
options.c_cc[VEOL2]=0;/**//*''*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值