我想使用RS232端口与我的电脑通信。 我可以打开“/ dev / ttyS0”并使用write()函数写入数据,但是我无法使用read()从“dev / ttyS0”中读取正确的数据。 read()函数读取不必要的数据。请告诉我如何解决这个问题?
#include <stdio.h> #include <string.h> #include <fcntl.h> #include <termios.h> #include <unistd.h> int main() { int n = 0,fd = 0,bytes = 0; char buffer[10]; struct termios term; fd = open("/dev/ttyS0",O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open"); return; } else { fcntl(fd,F_SETFL,0); perror("Port"); } tcgetattr(fd,&term); cfsetispeed(&term,B115200); cfsetospeed(&term,B115200); term.c_cflag |= (CLOCAL | CREAD); term.c_cflag &= ~PARENB; term.c_cflag &= ~CSTOPB; term.c_cflag &= ~CSIZE; term.c_cflag |= CS8; term.c_cflag &= ~CRTSCTS; term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); term.c_iflag &= ~(IXON | IXOFF | IXANY); term.c_oflag &= ~OPOST; term.c_cc[VMIN] = 0; term.c_cc[VTIME] = 10; tcsetattr(fd,TCSANow,&term); printf("Enter the string...n"); scanf("%s",buffer); write(fd,buffer,sizeof(buffer)); perror("write"); // fcntl(fd,FNDELAY); sleep(1); bytes = read(fd,sizeof(buffer)); perror("read"); buffer[bytes] = ' '; printf("Bytes : %dn",bytes); printf("%sn",buffer); memset(buffer,' ',10); }
Linux串行端口:缺lessinput数据
最简单的方法来实现Com端口terminal。 (Windows,C)
Linux串口读取 – 我可以改变input缓冲区的大小吗?
在Windows上Pyserial的非阻塞/繁忙等待使用:如何实时监控多个串行端口?
为什么input和输出波特率总是一样的?
Python ImportError:没有名为serial的模块
无法使用串行电缆debugging内核驱动程序
用户模式TCP堆栈通过有损串行链路进行重传
等待COM端口上的数据?
串口在linux下写/读
正如我已经在这里回答以下代码运作良好。 你有没有尝试改变串口线? 您确定您正在使用串行DB9连接器的引脚2和引脚3吗?
int main() { int n = 0,bytes = 0; char ch = 0; char buffer[128],*bufPtr; int nBytes = 0,tries = 0,x = 0; struct termios term; fd = open("/dev/ttyUSB0",0); perror("Port"); } if (n = tcgetattr(fd,&term) == -1) { perror("tcgetattr"); return; } if (n = cfsetispeed(&term,B115200) == -1) { perror("cfsetispeed"); return; } if (n = cfsetospeed(&term,B115200) == -1) { perror("cfsetospeed"); return; } term.c_cflag |= (CLOCAL | CREAD); term.c_cflag &= ~PARENB; term.c_cflag &= ~CSTOPB; term.c_cflag &= ~CSIZE; term.c_cflag |= CS8; term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); term.c_iflag &= ~(IXON | IXOFF | IXANY); term.c_cflag &= ~CRTSCTS; term.c_oflag &= ~OPOST; if (n = tcsetattr(fd,&term) == -1) { perror("tcsetattr"); return; } char stringToSend[128]; printf("Enter the string...n"); scanf("%s",stringToSend); size_t len = strlen(stringToSend) +1 ; write(fd,stringToSend,len); perror("write"); size_t receivedBytes = 0; bytes = 0; memset(buffer,0x00,sizeof(buffer)); while (receivedBytes<len) { bytes = read(fd,&buffer[receivedBytes],sizeof(buffer)-1); perror("read"); if (bytes > 0) receivedBytes += bytes; } printf("Bytes : %d and data: %sn",receivedBytes,buffer); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。