寻找linux串行端口的测试程序
Looking for test program for linux serial port
我正在尝试从windows移植一个程序到linux。
问题是我不能成功地设置波特率(下面可以看到这个代码)
我已经在连接到串行端口的电缆上设置了示波器。使用Windows版本,我可以在25微秒内看到一个模式,但使用Linux版本,我可以在250微秒内看到相同的模式,告诉我信息是正确的,但它正在发送它。
我已经尝试将波特率设置为几个不同的值,但我仍然在示波器上得到相同的东西。
我要找的是一个程序,它将在115200波特设置串行端口,标记奇偶校验,1个停止位和8个数据位,并发送一些东西,以便我可以在超级终端上看到它。用c++编写的程序就太棒了,因为这样我就可以把它和我的程序进行比较了。
我认为有一些东西以某种方式保持波特率设置在一定的值,如果我从别人那里得到一个确认工作的程序,我可以说它是linux的设置。我在不同的计算机上尝试过,但它们都以相同的方式配置了我们的sysadmin
我已经尝试了3个星期,做了几百个串口教程,作为一个linux新手,我现在不知道该怎么做。
idComDev[i] = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (idComDev[i] == -1)
{
perror("open_port: Unable to open /dev/ttyS0 - ");
ret = false;
}
else
{
fcntl(idComDev[i], F_SETFL, 0);
struct termios options;
tcgetattr(idComDev[i], &options); // get current settings
cfsetspeed(&options, B9600); // set baud rate
test = tcsetattr(idComDev[i], TCSANOW, &options);// save the settings
options.c_cflag &= ~CSIZE; // Mask the character size bits
options.c_cflag |= CS8; // 8 bit data
options.c_cflag &= ~PARENB; // set parity to no
options.c_cflag &= ~PARODD; // set parity to no
options.c_cflag |= CSTOPB; //set one stop bit
options.c_cflag |= (CLOCAL | CREAD);
options.c_oflag &= ~OPOST;
options.c_lflag &= 0;
options.c_iflag &= 0; //disable software flow controll
options.c_oflag &= 0;
tcsetattr(idComDev[i], TCSANOW, &options);// save the settings
printw("Seg %d = COM%hd",i,CommNo[i]);
if(test!= -1)
printw("test success");
如果您想将windows串行端口程序移植到linux,我建议您首先迁移到Boost。Asio库-它包括一个到串行端口的跨平台接口。您可以让它在Windows下工作,然后知道代码将在Linux上工作。
这样做的原因是,当从windows移动到linux串行端口时,可能会有软件以外的问题。例如,握手协议(RTS/CTS, DTE/DSE)可以在两者之间变化。
首先,看看我在这里的回答。如果你想要完整的源代码,请查看github。
此外,这个问题列出了各种串行嗅探器,可以帮助确定究竟发生了什么。
所以,我知道这个问题是很久以前发布的,但我认为你有你的停止位向后。如果你想设置一个停止位,你必须这样做:
options.c_cflag &= ~CSTOPB; //set one stop bit
Not this (what you had):
options.c_cflag |= CSTOPB; //This sets stop bits to 2, since 1 is the default.
我的来源:http://www.easysw.com/~迈克/串行/serial.html
标准工具setserial
如何?您可以用它来设置设备参数(然后可以通过设备文件来设置in-/output)。源代码是可用的,因此您可以查看它是如何实现的。
你可以试试:
getty ttyS0 115200 vt100
,看看登录提示是否出现在您的窗口上。一旦你让它在默认波特率下工作,试着改变波特率。
getty ttyS0 9600 vt100
看看它是否仍然有效。然而,您可能需要root才能做这样的事情。能否也删除fcntl调用?
- Qt Q串行端口未编程设备未关闭
- 在 linux c++ 中没有通过串行端口发送的数据
- 检查串行端口Linux中是否有传入数据(cbInQue for linux)
- 在不传输的情况下更改 Win32 中的串行端口波特率
- 增强 ASIO 和串行端口异步读取
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何将参数这些串行端口传递到函数中
- 从 C/C++ 访问 Android 中的串行端口
- Qt两个串行端口发送和接收
- 通过串行端口从GPS传感器读取
- 编写Chrome扩展程序以控制串行端口
- C++ - 在没有物理设备的情况下测试串行端口
- 使用com0com和hub4com创建和测试虚拟串行端口
- Unix 串行端口程序与 qt 崩溃
- boost::asio 调用了错误的串行端口处理程序
- Qt串行端口程序在另一个系统上运行时崩溃
- 正在测试串行端口应用程序
- Arduino和PC之间通过Usb串行端口(C++控制台应用程序)进行通信
- 寻找linux串行端口的测试程序
- 用C语言编写多线程串行端口程序