簡體   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