串口通信

#include
#include
#include
#include
#include
#include
#include
#include
#include

int speed_arr[] = {B115200,B57600,B38400, B19200, B9600, B4800, B2400, B1200, B300};
int name_arr[] = {115200,57600,38400, 19200, 9600, 4800, 2400, 1200, 300};
//set up the speed
void set_speed(int fd, int speed)
{
    int i;
    int status;
    struct termios Opt;
    tcgetattr(fd, &Opt);
    for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++)
    {
        if (speed == name_arr[i])
        {
            tcflush(fd, TCIOFLUSH);
            cfsetispeed(&Opt, speed_arr[i]);
            cfsetospeed(&Opt, speed_arr[i]);
            status = tcsetattr(fd, TCSANOW, &Opt);
            if (status != 0)
                perror("tcsetattr fd1");
            return;
        }
        tcflush(fd,TCIOFLUSH);
    }
    printf("this is ok\n");
}
// Set up the databits    stopbits   parity
int set_Parity(int fd,int databits,int stopbits,int parity)
{
    struct termios options;
    if ( tcgetattr( fd,&options) != 0)
    {
        perror("SetupSerial 1");
        return -1;
    }
    options.c_cflag &= ~CSIZE;
    switch (databits)
    {
        case 7:
            options.c_cflag |= CS7;
            break;
        case 8:
            options.c_cflag |= CS8;
            break;
        default:
        printf("Unsupported data size\n");
        return -1;
    }
    switch (parity)
    {
        case 'n':
        case 'N':
            options.c_cflag &= ~PARENB;
            options.c_iflag &= ~INPCK;
            break;
        case 'o':
        case 'O':
            options.c_cflag |= (PARODD | PARENB);
            options.c_iflag |= INPCK;
            break;
        case 'e':
        case 'E':
            options.c_cflag |= PARENB;
            options.c_cflag &= ~PARODD;
            options.c_iflag |= INPCK;
            break;
        case 'S':
        case 's':
            options.c_cflag &= ~PARENB;
            options.c_cflag &= ~CSTOPB;
            break;
        default:
        printf("Unsupported parity\n");
        return -1;
    }
    switch (stopbits)
    {
        case 1:
            options.c_cflag &= ~CSTOPB;
            break;
        case 2:
            options.c_cflag |= CSTOPB;
            break;
        default:
        printf("Unsupported stop bits\n");
        return  -1;
    }
    if (parity != 'n')
    options.c_iflag |= INPCK;
    options.c_cc[VTIME] = 150; // 15 seconds
    options.c_cc[VMIN] = 0;
    tcflush(fd,TCIFLUSH);
    if (tcsetattr(fd,TCSANOW,&options) != 0)
    {
        printf("SetupSerial 3");
        return -1;
    }
    return 0;

}
//open the Serial ports
int OpenDev(char *Dev)
{
    int fd = open( Dev, O_RDWR );
    if (-1 == fd)
    {
        printf("Can't Open Serial Port");
        return -1;
    }
    else    
    return fd;
}
main(int argc,char*argv[])
{
    
    int ch;
    int fd;
    int nread;
          char buff[512];
    char Serial_ports[20];
    int databits=0,stopbits=0,parity=0;
    memset(Serial_ports,0,sizeof(Serial_ports));
    char *ok="/dev/ttyUSB0";
    strcpy(Serial_ports,ok);
    databits=8;
    stopbits=1;
    parity     ='n';
    printf("input this format   : \n"  
             "Serial ports                        -s    /dev/ttyUSB0\n"
            " databits                           -d    8\n"
            " stopbits                           -t    1\n"
            " parity                             -p    n\n");
    printf("\n\n\n\n\n");
    while((ch = getopt(argc,argv,"sdtp"))!= -1)
    {
        switch(ch)
        {
            case 's':
                strcpy(Serial_ports,optarg);
                break;
            case 'd':
                databits =optarg[0]-48;
                break;
            case 't':
                stopbits =optarg[0]-48;
                break;
            case 'p':
                parity =optarg[0];
                break;
            default:
                printf("cao\n");
                break;
        }
    }
    fd=OpenDev(Serial_ports);
    if(fd<0)
        return ;
    set_speed(fd,115200);
    set_Parity(fd,databits,stopbits,parity);
    while(1)
    {
        sleep(1);
        nread = read(fd,buff,512);
        //buff[nread+1]='\0';
        printf("\n%s",buff);
        if(strcmp(buff,"HELLO WEBEE   ") == 0)
            printf("ok");
        //printf("%d\n",strlen("HELLO WEBEE   "));
        memset(buff,0,sizeof(buff));
        
        
        
        
    }
    printf("ok\n");
        
        
}

我的串口一直发的信号是HELLO WEBEE  所以我写的接受测试能不能收到,成功收到。

love 钓鱼竿

你可能感兴趣的:(学习,串口通信,串口接收)