请教linux下串口编程的几个问题,高手相助

请教linux下串口编程的几个问题,高手相助,第1张

串口,中断设定一般控制这几个参数就可以了: 1。波特率 -》一般串口设置成 ,你的终端可以输出讯息,这个参数应该没问题 2。奇偶校验 -》一般关闭 3。流控 -》 一般关闭 4。停止位 -》一般设置为无 5。有时候要设置数据位 -》

虚拟机中的串口连接可以采用两种方法。一种是指定虚拟机的串口连接到实际的COM上,例如开发机连接到COM1,目标机连接到COM2,然后把两个串口通过串口线相连接。另一种更为简便的方法是:在较高一些版本的VMware中都支持把串口映射到命名管道,把两个虚拟机的串口映射到同一个命名管道。例如,在两个虚拟机中都选定同一个命名管道 \\\pipe\com_1,指定target机的COM口为server端,并选择"The other end is a virtual machine"属性;指定development机的COM口端为client端,同样指定COM口的"The other end is a virtual machine"属性。对于IO mode属性,在target上选中"Yield CPU on poll"复选择框,development机不选。

int con=atoi(portstr);
unsigned char Port_file_name[30];
int fd0,rc;
struct termios ts0;
switch (con)
{ //选项O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信息将影响程序的执行
//O_NDELAY表示打开串口的时候,程序并不关心另一端的串口是否在使用中
case 1: fd0=open("/dev/ttyM0",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 2: fd0=open("/dev/ttyM1",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 3: fd0=open("/dev/ttyM2",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 4: fd0=open("/dev/ttyM3",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 5: fd0=open("/dev/ttyM4",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 6: fd0=open("/dev/ttyM5",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 7: fd0=open("/dev/ttyM6",O_RDWR | O_NOCTTY | O_NDELAY); break;
case 8: fd0=open("/dev/ttyM7",O_RDWR | O_NOCTTY | O_NDELAY); break;
default : fd0=open("/dev/ttyM0",O_RDWR | O_NOCTTY | O_NDELAY); break;
}

tcgetattr(fd0,&ts0);
bzero(&ts0,sizeof(struct termios));
switch (gytype)
{
case 1:{ts0c_cflag |= B300 | CS7 | CLOCAL | CREAD | PARENB ;
ts0c_cflag &= ~PARODD; // 转换为偶效验
ts0c_iflag |= INPCK; // Disnable parity checking
break; }
case 2:{ts0c_cflag |= B1200 | CS8 | CLOCAL | CREAD | PARENB ;
ts0c_cflag &= ~PARODD; // 转换为偶效验
ts0c_iflag |= INPCK; // Disnable parity checking
break;
}
case 3:{
ts0c_cflag |= B9600 | CS8 | CLOCAL | CREAD ;
ts0c_cflag &= ~PARENB; // Clear parity enable
ts0c_iflag &= ~INPCK; // Enable parity checking
break;
}
case 4:{ts0c_cflag |= B9600 | CS8 | CLOCAL | CREAD | PARENB ;
ts0c_cflag &= ~PARODD; // 转换为偶效验
ts0c_iflag |= INPCK; // Disnable parity checking
break;
}
}
ts0c_lflag &= ~ECHO;
ts0c_lflag &= ~ECHONL;
ts0c_iflag &= ~IXOFF;
ts0c_iflag &= ~IXON;
ts0c_cflag &= ~CSIZE;
switch (gytype)
{
case 1:{ts0c_cflag |= CS7 ; break;}
case 2:{ts0c_cflag |= CS8 ; break;}
case 3:{ts0c_cflag |= CS8 ; break;}
case 4:{ts0c_cflag |= CS8 ; break;}
}

ts0c_lflag &= ~ICANON; //如果设置使能规范输入,否则使用原始数据(本文使用)
ts0c_oflag &= ~ONLCR; //如果设置将NL转换成CR-NL后输出
ts0c_iflag &= ~INLCR; //如果设置将接收到的NL(换行)转换成CR(回车)。
ts0c_cc[VMIN] = 0; //最少可读数据
ts0c_cc[VTIME] = 0; //等待数据时间(10秒的倍数)
ts0c_cflag &= ~CSTOPB; //如果设置则使用两个停止位 ,如果取消则使用一个停止位
ts0c_iflag |= IGNBRK; //如果设置则忽略接收到的break信号
ts0c_lflag &= ~IEXTEN; //如果设置则启用实现自定义的输入处理
ts0c_lflag |= NOFLSH; //如果设置则禁止产生SIGINT,SIGQUIT和SIGSUSP信号时刷新输入和输出队列
switch (gytype)
{
case 1:{rc = cfsetospeed(&ts0,B300);break; }
case 2:{rc = cfsetospeed(&ts0,B1200);break; }
case 3:{rc = cfsetospeed(&ts0,B9600);break; }
case 4:{rc = cfsetospeed(&ts0,B9600);break; }
}
rc = tcsetattr(fd0,TCSAFLUSH,&ts0);
return fd0;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13507266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-21
下一篇 2023-08-21

发表评论

登录后才能评论

评论列表(0条)

保存