Linux串口设置
Linux串口是连接许多外围设备的重要接口,因此掌握linux串口的设置十分的重要。Linux串口设置主要分为四步: 第一:打开需要使用的串口设备 第二:获取该串口设备的属性 第三:根据应用设置该串口的属性 第四:将设置生效第一步:打开串口设备fd = open(serialDev,O_RDWR | O_NOCTTY)
·
Linux串口是连接许多外围设备的重要接口,因此掌握linux串口的设置十分的重要。 Linux串口设置主要分为四步:
第一:打开需要使用的串口设备
第二:获取该串口设备的属性
第三:根据应用设置该串口的属性
第四:将设置生效
第一步:打开串口设备
fd = open(serialDev,O_RDWR | O_NOCTTY);
//第一个参数为打开的串口设备名
//第二个参数为打开设备的方式,O_RDWR以读写方式打开,O_NOCTTY该设备端口不成为该程序的控制终端
第二步:获得串口设备的属性
#include <termios.h>
struct termios oldtio,newtio;
int tcgetattr(int fd,struct termios *termios_p)
第三步:设置串口(关键)
3.1 设置波特率
struct termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); /*设置为19200Bps*/
cfsetospeed(&Opt,B19200);
3.2 设置数据位
struct termios options;
tcgetattr( fd,&options);
switch (databits)
{
case 6:options.c_cflag |= CS6; break;//6位数据位
case 7:options.c_cflag |= CS7; break;//7位数据位
case 8:options.c_cflag |= CS8; break; //8为数据位
}
3.3 设置停止位
struct termios options;
tcgetattr( fd,&options);
switch (stopbits)
{
case 1:options.c_cflag &= ~CSTOPB;break;//每个字符1个停止位
case 2:options.c_cflag |= CSTOPB;break;//每个字符2个停止位
}
3.4 设置奇偶校验
struct termios options;
tcgetattr( fd,&options);
options.c_cflag &= ~PARENB;//关闭奇偶校验
options.c_iflag &= ~INPCK;
options.c_cflag |= (PARODD | PARENB); //设置为奇效验
options.c_iflag |= INPCK;
options.c_cflag |= PARENB;//设置为偶校验
options.c_cflag &= ~PARODD;
options.c_iflag |= INPCK;
3.5 设置标准模式和非标准模式
标准模式一般就是系统默认的模式,在标准模式下用户的输入一般要按下enter键后,用户的输入才会被应用程序接收到,并且用户按的回车键自动会转换为换行符。但是英语程序要求终端一有数据就能立即响应,而不是等到用户按下enter键的话,就得设置为为标准模式。
struct termios options;
tcgetattr(fd,&options);
options.c_lflag&= ~(ICANON | ECHO | ECHOE | ISIG);//设置为非标准模式,输入在终端不显示,不启用组合按键
在非标准模式下用户可以设置成串口一旦有数据就程序就立即可读
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 0;
第四步:使设置生效
当程序设置好串口的配置后必须使其生效才能使用,但是每次开机后,配置会恢复到默认值。
tcsetattr(fd,TCSAFLUSH,&options);
TCSANOW: 不等数据传输完毕就立即改变属性
TCSADRAIN: 等待所有数据传输结束才改变属性
TCSAFLUSH: 清空输入输出缓冲区才改变属性
Linux串口设置实例
fd = open(serialDev,O_RDWR | O_NOCTTY);
if(fd<0)
{
printf("can not open the serialDev\n");
return -1;
}
tcflush(fd,TCIFLUSH);//刷新
tcgetattr(fd,&newtio);//获得原先串口配置
cfsetispeed(&newtio,B38400);//设置输入的波特率为38400
cfsetospeed(&newtio,B38400);//设置输出的波特率为38400
newtio.c_cflag |= CS8; //8位数据位,1位停止位
newtio.c_cflag &= ~CSTOPB;
newtio.c_cflag &= ~PARENB; //无奇偶校验
newtio.c_oflag &= ~(OPOST); //关闭输出
newtio.c_lflag &= ~(ISIG|ECHO|IEXTEN); //关闭组合按键,关闭回显
newtio.c_iflag &= ~(INPCK|BRKINT|ICRNL|ISTRIP|IXON |INLCR);
newtio.c_iflag |=IGNCR; //忽略接受到回车符
if(tcsetattr(fd,TCSAFLUSH,&newtio)<0)//使设置生效
{
printf("tcsetattr failed!\n");
return -1;
}
更多推荐
已为社区贡献5条内容
所有评论(0)