linux系统串口设置参数,linux 串口编程记录(一)串口参数设置

一些常用串口属性的设置方法。

设置流控制

termios_new.c_cflag &= ~CRTSCTS; //不使用流控制

termios_new.c_cflag |= CRTSCTS; //使用硬件流控制

termios_new.c_iflag |= IXON|IXOFF|IXANY; //使用软件流控制

屏蔽字符大小位

termios_new.c_cflag &= ~CSIZE;

设置数据位大小

termios_new.c_cflag |= CS8; //使用8位数据位

termios_new.c_cflag |= CS7; //使用7位数据位

termios_new.c_cflag |= CS6; //使用6位数据位

termios_new.c_cflag |= CS5; //使用5位数据位

设置奇偶校验方式

termios_new.c_cflag &= ~PARENB; //无奇偶校验

termios_new.c_cflag |= PARENB; //奇校验

termios_new.c_cflag &= ~PARODD;

termios_new.c_cflag |= PARENB; //偶校验

termios_new.c_cflag &= ~PARODD;

停止位

termios_new.c_cflag |= CSTOPB; //2位停止位

termios_new.c_cflag &= ~CSTOPB; //1位停止位

输出模式

termios_new.c_cflag &= ~OPOST; //原始数据(RAW)输出

控制字符

termios_new.c_cc[VMIN] = 1; //读取字符的最小数量

termios_new.c_cc[VTIME] = 1; //读取第一个字符的等待时间

关闭终端回显,键盘输入的字符不会在终端窗口显示。

#include

#include

#include

#include

int main(void)

{

struct termios ts,ots;

char passbuf[1024];

tcgetattr(STDIN_FILENO,&ts); /* STDIN_FILENO的值是1,表示标准输入的文件描述符 */

ots = ts;

ts.c_lflag &= ~ECHO; /* 关闭回终端回显功能*/

ts.c_lflag |= ECHONL;

tcsetattr(STDIN_FILENO,TCSAFLUSH,&ts); /* 应用新终端设置 */

fgets(passbuf,1024,stdin); /* 输入字符不会在终端显示 */

printf("you input character = %s/n",passbuf);

tcsetattr(STDIN_FILENO,TCSANOW,&ots); /* 恢复旧的终端设备 */

}

例子:串口参数设置函数

int Serial::SetPara(int serialfd,int speed,int databits , int stopbits ,int parity )

{

struct termios termios_new;

bzero( &termios_new, sizeof(termios_new));//等价于memset(&termios_new,sizeof(termios_new));

cfmakeraw(&termios_new);//就是将终端设置为原始模式

termios_new.c_cflag=BaudRate(speed);

termios_new.c_cflag |= CLOCAL | CREAD;   //  termios_new.c_iflag = IGNPAR | IGNBRK;

termios_new.c_cflag &= ~CSIZE;

switch (databits)

{

case 0:

termios_new.c_cflag |= CS5;

break;

case 1:

termios_new.c_cflag |= CS6;

break;

case 2:

termios_new.c_cflag |= CS7;

break;

case 3:

termios_new.c_cflag |= CS8;

break;

default:

termios_new.c_cflag |= CS8;

break;

}

switch (parity)

{

case 0:      //as no parity

termios_new.c_cflag &= ~PARENB;    //Clear parity enable

break;

case 1:

termios_new.c_cflag |= PARENB;     // Enable parity

termios_new.c_cflag &= ~PARODD;

break;

case 2:

termios_new.c_cflag |= PARENB;

termios_new.c_cflag |= ~PARODD;

break;

default:

termios_new.c_cflag &= ~PARENB;   // Clear parity enable

break;

}

switch (stopbits)// set Stop Bit

{

case 1:

termios_new.c_cflag &= ~CSTOPB;

break;

case 2:

termios_new.c_cflag |= CSTOPB;

break;

default:

termios_new.c_cflag &= ~CSTOPB;

break;

}

tcflush(serialfd,TCIFLUSH); // 清除输入缓存

tcflush(serialfd,TCOFLUSH); // 清除输出缓存

termios_new.c_cc[VTIME] = 1;   // MIN与 TIME组合有以下四种:1.MIN = 0 , TIME =0  有READ立即回传 否则传回 0 ,不读取任何字元

termios_new.c_cc[VMIN] = 1;  //    2、 MIN = 0 , TIME >0  READ 传回读到的字元,或在十分之一秒后传回TIME 若来不及读到任何字元,则传回0

tcflush (serialfd, TCIFLUSH);  //    3、 MIN > 0 , TIME =0  READ 会等待,直到MIN字元可读

return tcsetattr(serialfd,TCSANOW,&termios_new);  //    4、 MIN > 0 , TIME > 0 每一格字元之间计时器即会被启动 READ 会在读到MIN字元,传回值或

}

int Serial::BaudRate( int baudrate)

{

switch(baudrate)

{

case 0:

return (B2400);

case 1:

return (B4800);

case 2:

return (B9600);

case 3:

return (B19200);

case 4:

return (B38400);

case 5:

return (B57600);

case 6:

return (B115200);

default:

return (B9600);

}

}

原文:http://www.cnblogs.com/starsKing/p/6073253.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值