繁体   English   中英

寻找linux串口的测试程序

[英]Looking for test program for linux serial port

我试图从Windows将程序移植到linux。

问题是我无法成功设置波特率(代码可以在下面看到)

我在连接到串口的电缆上安装了示波器。 使用Windows版本我可以在25微秒的时间看到一个模式但是使用linux版本我可以在250微秒的时间看到相同的模式,告诉我信息是正确的,但它发送的速度很慢。

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

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

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

我已经尝试了3个星期,已经完成了数百个串口教程,并且是一个Linux noob,我现在在做什么都迷失了。

    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");

所以,我知道这个问题是很久以前发布的,但我认为你有一个倒退的停止位。 如果要设置一个停止位,则必须执行以下操作:

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

如果你想将一个Windows串口程序移植到linux,我建议你先迁移到Boost.Asio库 - 这包括一个串口的跨平台接口。 你可以在Windows下使用它,然后知道代码可以在Linux上运行。

原因是从Windows移动到Linux串行端口时可能存在软件问题。 例如,握手协议(RTS / CTS,DTE / DSE)可以在两者之间变化。

对于这个一开始,看看我的答案在这里 如果你想要完整的源代码,那么看看github

此外,这个问题列出了各种串口嗅探器,可以帮助确定究竟发生了什么。

标准工具setserial怎么样? 您可以使用它设置设备参数(输入/输出可以通过设备文件完成)。 源代码可用,因此您可以查看它是如何实现的。

你可以尝试:

getty ttyS0 115200 vt100

并查看您的窗口上是否显示登录提示。 一旦您使用默认波特率,请尝试更改波特率。

getty ttyS0 9600 vt100

看看它是否仍然有效。 但是你可能需要做root才能做这样的事情。 你还可以删除fcntl电话吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM