首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找linux串口的测试程序

寻找linux串口的测试程序
EN

Stack Overflow用户
提问于 2011-10-17 17:13:03
回答 4查看 2.9K关注 0票数 0

我正在试着把一个程序从windows移植到linux。

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

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

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

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

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

我已经尝试了3个星期,并且已经做了数百个串口教程,作为一个linux新手,我不知道现在该做什么。

代码语言:javascript
复制
    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");
EN

回答 4

Stack Overflow用户

发布于 2011-10-17 19:46:13

如果你想把一个windows串口程序移植到linux上,我建议你首先迁移到Boost.Asio库--这包括一个到串口的跨平台接口。你可以让它在Windows下工作,然后知道代码在Linux上也能工作。

这样做的原因是,当从windows串行端口转移到linux串行端口时,可能存在软件以外的问题。例如,握手协议(RTS/CTS、DTE/DSE)可以在两者之间变化。

首先,看看我的答案here。如果你想要完整的源代码,可以看看github

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-11 07:48:47

所以,我知道这个问题很久以前就发布了,但我认为你的问题有点倒退了。如果你想设置一个停止位,你必须这样做:

options.c_cflag &= ~CSTOPB; //set one stop bit

不是这个(你所拥有的):

options.c_cflag |= CSTOPB; //This sets stop bits to 2, since 1 is the default.

我的资料来源:http://www.easysw.com/~mike/serial/serial.html

票数 1
EN

Stack Overflow用户

发布于 2011-10-17 17:27:49

标准工具setserial怎么样?您可以使用它设置设备参数(然后可以通过设备文件在-/output中进行设置)。源代码是可用的,所以您可以查看它是如何实现的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7791621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档