编程Linux串行时序

时间:2016-04-21 21:21:23

标签: c++ linux

我目前正在尝试编写一个通过串口获取值的小程序,并将其显示在屏幕上。我已经阅读了几个指南,主要是Link

现在我遇到了一些麻烦,我认为是时机,所以我写了两段小代码,看看我是否可以缩小问题范围。

这里发布的代码是一个发件人和一个收件人,发件人只输出11:22,收件人应该收到这个并出现在屏幕上。现在它有点这样做,但是我得到了很多空行,还有一些跳过的字母。 我想由于缺乏知识,我可能会遗漏一些基本的东西:)

请参阅以下代码: 请注意,这是非常粗糙的&从gvim那里试图复制和粘贴的男人搞砸了.. :)

接收器:

#include <iostream>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>

#include <errno.h>
#include <termios.h>
#include <stdio.h>


using namespace std;
int main()
{

int fd;          //desc for serial port.

char in[20];    //Char array for data from serial port



struct termios options;


tcgetattr(fd,&options);

cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);

options.c_cflag |= (CLOCAL | CREAD);


options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
//options.c_cc[VMIN] = 5;


tcsetattr(fd,TCSANOW,&options);

fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);



if (fd == -1)
{
    cout << "Could not open port." << endl;
}
else
fcntl(fd,F_SETFL,0);



while(1){





read (fd, in,sizeof in);


cout << in << endl;



}








}

发信人:         (与上述相同)

    int main()
     {

    int fd;
    struct termios options;


    tcgetattr(fd, &options);
    cfsetispeed(&options, B19200);
    cfsetospeed(&options, B19200);

    options.c_cflag |= (CLOCAL | CREAD);

    options.c_cflag &= ~PARENB;
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;
    options.c_cflag |= CS8;
    options.c_oflag |=OPOST;

    tcsetattr(fd,TCSANOW, &options);

    fd = open("/dev/ttyS0",O_RDWR | O_NOCTTY | O_NDELAY);

    if (fd == -1)   
    {
    cout << "Cannot open port" << endl;
    }                       
    else                            
    fcntl(fd,F_SETFL,0);                    





  while(1){                                                              

    write(fd,"11:22\n",6);                                                                  
    usleep(1000); //Have a little break between the messages.. Prob not neceserry.
    }                                                                                               

}

0 个答案:

没有答案