gpt4 book ai didi

c++ - 求linux串口测试程序

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:56 24 4
gpt4 key购买 nike

我正在尝试将程序从 Windows 移植到 Linux。

问题是我无法成功设置波特率(代码如下)

我已经在连接到串行端口的电缆上设置了一个示波器。在 Windows 版本中,我可以在 25 微秒时看到一个模式,但在 Linux 版本中,我可以在 250 微秒时看到相同的模式,告诉我信息是正确的,但发送速度变慢了。

我已经尝试将波特率设置为几个不同的值,但我在示波器上得到的结果仍然相同。

我正在寻找的是一个程序,它可以将串口设置为 115200 波特、标记奇偶校验、1 个停止位和 8 个数据位,并通过线路发送一些东西,这样我就可以在 super 终端上看到它。用 c++ 编写的程序会很棒,因为如果它有效,我可以将它与我的程序进行比较。

我认为有一些东西可以将波特率设置在某个特定值,如果我从其他人那里得到一个确认可以工作的程序,我可以说它不是 linux 的设置。我在不同的计算机上尝试过,但我们的系统管理员都以相同的方式配置它们

我已经尝试了 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 库 - 这包括一个跨平台接口(interface)到您的串行端口。您可以在 Windows 下运行它,然后知道该代码将在 Linux 上运行。

这样做的原因是,从 Windows 转移到 Linux 串行端口时,可能存在软件问题以外的问题。例如,两者之间的握手协议(protocol)(RTS/CTS、DTE/DSE)可能有所不同。

首先,看看我的回答 here .如果您想要完整的源代码,请查看 github .

此外,这 question分类各种串行嗅探器,可以帮助确定到底发生了什么。

关于c++ - 求linux串口测试程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com