当前位置: 技术问答>linux和unix
【求助】关于串口通信
来源: 互联网 发布时间:2017-05-26
本文导语: 小弟初学Linux串口编程,用Qt写了个串口收发程序。 现在出现一下问题: 1. 程序在arm板子上运行,与PC上的串口调试工具通信,arm发给PC 调试工具显示乱码。 2. PC发给arm 数据显示正常,但有时候PC发一次数据,arm...
小弟初学Linux串口编程,用Qt写了个串口收发程序。
现在出现一下问题:
1. 程序在arm板子上运行,与PC上的串口调试工具通信,arm发给PC 调试工具显示乱码。
2. PC发给arm 数据显示正常,但有时候PC发一次数据,arm会分两次接受。
3. 试着将程序重新编译在虚拟机上运行,并与arm通信,结果同上。并且arm发的是字符串,每发4个长度的字符串,虚拟机收到一个长度,且数值都是-1或-2。(如arm发字符串“7894”,虚拟机read函数返回1,且值为-1或-2)。
arm板子是 S3C2416 linux2.6 QT4.7.0
以下是串口相关代码:
初始化:
发送:
现在出现一下问题:
1. 程序在arm板子上运行,与PC上的串口调试工具通信,arm发给PC 调试工具显示乱码。
2. PC发给arm 数据显示正常,但有时候PC发一次数据,arm会分两次接受。
3. 试着将程序重新编译在虚拟机上运行,并与arm通信,结果同上。并且arm发的是字符串,每发4个长度的字符串,虚拟机收到一个长度,且数值都是-1或-2。(如arm发字符串“7894”,虚拟机read函数返回1,且值为-1或-2)。
arm板子是 S3C2416 linux2.6 QT4.7.0
以下是串口相关代码:
初始化:
fd = open(dir, O_RDWR | O_NOCTTY);
if(fd == -1)
perror("open");
struct termios Opt;
tcgetattr(fd, &Opt);
save = Opt;
Opt.c_cflag &= ~PARENB;
Opt.c_cflag &= ~CSTOPB;
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS8;
// Opt.c_cflag |= CRTSCTS;
Opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
Opt.c_oflag &= ~OPOST; /*Output*/
cfsetispeed(&Opt,B115200); /*设置为115200Bps*/
cfsetospeed(&Opt,B115200);
tcsetattr(fd,TCSANOW,&Opt);
发送:
QString text = ui->lineEdit->text();
QByteArray tmp = text.toLatin1();
char *txt = tmp.data();
qDebug()