串行设备:读取8N1的作品,但写一个字节失败【JAVA教程】

!
也想出现在这里? 联系我们
信息

串行设备:读取8N1的作品,但写一个字节失败,第1张

概述串行设备:读取8N1的作品,但写一个字节失败

在我的程序中,我从串口设备(linux,8N1)读取没有任何问题。 但在这种情况下,我想写出一个字节,我没有得到任何的界面。 我假设我的串行输出设置是错误的。 但是,如何设置c_oflag的方法并不多

我的代码:

#define TTYDEVICE \”/dev/ttyS0\” #define BAUdratE B9600 int openSerialDevice(const char* devTTY,struct termios oldTio) { //—-< Open serial device >———————————- int fileDescriptor; // fd = open(\”/dev/ttyS0\”,O_RDWR | O_NOCTTY | O_NDELAY); fileDescriptor = open(devTTY,O_RDWR | O_NOCTTY); //fileDescriptor = open(devTTY,O_RDWR | O_NOCTTY /*| OPOST*/); if (fileDescriptor == -1) { perror(\”Error while opening serial interface occurred!\”); return -99; } // set new parameters to the serial device struct termios newtio; bzero(&newtio,sizeof(newtio)); newtio.c_cflag = BAUdratE | CRTSCTS | CS8 | CLOCAL | CREAD; // set to 8N1 newtio.c_cflag &= ~PARENB; newtio.c_cflag &= ~CStopB; newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; newtio.c_iflag = IGNPAR; // output mode to //newtio.c_oflag = 0; newtio.c_oflag |= OPOST; /* set input mode (non-canonical,no echo,…) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] = 10; /* inter-character timer 1 sec */ newtio.c_cc[VMIN] = 0; /* blocking read Disabled */ tcflush(fileDescriptor,TCIFLUSH); if (tcsetattr(fileDescriptor,TCSANow,&newtio)) { perror(\”Could not set the serial settings!\”); return -99; } //—-< / Open serial device >———————————- return fileDescriptor; } int ACK[1] = { 6 }; int main() { // old termios to restablish struct termios oldTIO; // filedescriptor int fd; fd = openSerialDevice(TTYDEVICE,oldTIO); if ((fd == -1) | (fd == -99)) { perror(\”Could not open TTY-Device. Exit on failure!\”); return EXIT_FAILURE; } write(fd,ACK,1); // Problem !! return 0: }

现在,如果我使用

屏幕/ dev / ttyS1 9600 8n1

XPembedded式启动时,串行端口计数器会点击

如何与USB 3G调制解调器通信?

C ++ linux(Ubuntu)正确写入串行(对于Arduino)

在linux下伪造串行通信

PHP串行不工作

valIDation/ dev / ttyS0上出现的内容。 我什么也看不见 如果我用Docklight 1.8进行嗅探的话也是一样。

有什么build议么? 谢谢

如何让Java在linux中使用串口?

串口读取c,使用WinAPI函数; WaitCommEvent失败

串行通信C ++ Readfile()

无限循环从串口接收

除非Arduino GUI串行监视器打开,否则不能回显到Arduino串行端口

你如何验证什么都没有出来?

您可以尝试放弃RTSCTS,然后重试。 事实上,如果你想从tty层的干扰最小,你应该设置你的终端为原始的,使用这个:

cfmakeraw(&newtio);

您正在给write() ACK的数据参数,这是一个指向int的指针。 这可能不是你的意思。 根据您所在计算机的字节顺序 ,这意味着write()将“看到”包含字符{ 6,0 } 6,0 { 6,0 } (little-endian)或{ 0,6 } 0,6 { 6,0 }的缓冲区(大端)。 这假设sizeof (int) == 4是真的,根据需要调整其他大小,问题依然存在。

你应该很可能使缓冲区unsigned char 。 另外,如果你的电话是这样的:

int wrote = write(fd,sizeof ACK); printf(\”Wrote %d bytesn\”,wrote);

你会得到直接的反馈。 你应该测试这样的东西,看看写实际上是成功的。

激活的硬件流控制(CRTSCTS)是write()被阻塞的原因,最后在串行输出中没有出现任何信息。

谢谢!

代码捕捉工作:

int openSerialDevice(const char* devTTY,O_RDWR | O_NOCTTY /*| OPOST*/); if (fileDescriptor == -1) { perror(\”Error while opening serial interface occurred!\”); return -99; } // set new parameters to the serial device struct termios newtio; fcntl(fileDescriptor,F_SETFL,0); // set everything to 0 bzero(&newtio,sizeof(newtio)); // again set everything to 0 bzero(&newtio,sizeof(newtio)); newtio.c_cflag |= BAUdratE; // Set Baudrate first time newtio.c_cflag |= CLOCAL; // Local line – do not change \”owner\” of port newtio.c_cflag |= CREAD; // Enable receiver newtio.c_cflag &= ~ECHO; // disable echoing of input characters newtio.c_cflag &= ~ECHOE; // set to 8N1 newtio.c_cflag &= ~PARENB; // no parentybyte newtio.c_cflag &= ~CStopB; // 1 stop bit newtio.c_cflag &= ~CSIZE; // Mask the character size bits newtio.c_cflag |= CS8; // 8 data bits // output mode to newtio.c_oflag = 0; //newtio.c_oflag |= OPOST; // Set teh baudrate for sure cfsetispeed(&newtio,BAUdratE); cfsetospeed(&newtio,BAUdratE); newtio.c_cc[VTIME] = 10; /* inter-character timer */ newtio.c_cc[VMIN] = 0; /* blocking read until */ tcflush(fileDescriptor,TCIFLUSH); // flush pending data // set the new defined settings if (tcsetattr(fileDescriptor,&newtio)) { perror(\”Could not set the serial settings!\”); return -99; } //—-< / Open serial device >———————————- return fileDescriptor; }

总结

以上是内存溢出为你收集整理的串行设备:读取8N1的作品,但写一个字节失败全部内容,希望文章能够帮你解决串行设备:读取8N1的作品,但写一个字节失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞86 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容