⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.c

📁 linux中串口通信程序。 有两个文件
💻 C
字号:
#include     <stdio.h>      /*±ê׌ÊäÈëÊä³ö¶šÒå*/#include     <stdlib.h>     /*±ê׌º¯Êý¿â¶šÒå*/#include     <unistd.h>     /*Unix±ê׌º¯Êý¶šÒå*/#include     <sys/types.h>  /**/#include     <sys/stat.h>   /**/#include     <fcntl.h>      /*ÎÄŒþ¿ØÖƶšÒå*/#include     <termios.h>    /*PPSIXÖÕ¶Ë¿ØÖƶšÒå*/#include     <errno.h>      /*ŽíÎóºÅ¶šÒå*//***@brief  ÉèÖÃŽ®¿ÚÍšÐÅËÙÂÊ*@param  fd     ÀàÐÍ int  Žò¿ªŽ®¿ÚµÄÎÄŒþŸä±ú*@param  speed  ÀàÐÍ int  Ž®¿ÚËÙ¶È*@return  void*/#define TRUE 1#define FALSE 0#define MAX_MESSAGE 100int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,    B38400, B19200, B9600, B4800, B2400, B1200, B300,};int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300,    38400,  19200,  9600, 4800, 2400, 1200,  300,};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);    }}/***@brief   ÉèÖÃŽ®¿ÚÊýŸÝλ£¬Í£Ö¹Î»ºÍЧÑéλ*@param  fd     ÀàÐÍ  int  Žò¿ªµÄŽ®¿ÚÎÄŒþŸä±ú**@param  databits ÀàÐÍ  int ÊýŸÝλ   ȡֵ Ϊ 7 »òÕß8**@param  stopbits ÀàÐÍ  int ֹͣλ   ȡֵΪ 1 »òÕß2**@param  parity  ÀàÐÍ  int  ЧÑéÀàÐÍ È¡ÖµÎªN,E,O,,S*/int set_Parity(int fd,int databits,int stopbits,int parity){    struct termios options;    if ( tcgetattr( fd,&options)  !=  0) {        perror("SetupSerial 1");        return(FALSE);    }    options.c_cflag &= ~CSIZE;    switch (databits) { /*ÉèÖÃÊýŸÝλÊý*/    case 7:        options.c_cflag |= CS7;        break;    case 8:        options.c_cflag |= CS8;        break;    default:        fprintf(stderr,"Unsupported data size\n");        return(FALSE);    }    switch (parity) {    case 'n':    case 'N':        options.c_cflag &= ~PARENB;   /* Clear parity enable */        options.c_iflag &= ~INPCK;     /* Enable parity checking */        break;    case 'o':    case 'O':        options.c_cflag |= (PARODD | PARENB);  /* ÉèÖÃÎªÆæÐ§Ñé*/         options.c_iflag |= INPCK;             /* Disnable parity checking */        break;    case 'e':    case 'E':        options.c_cflag |= PARENB;     /* Enable parity */        options.c_cflag &= ~PARODD;   /* ת»»ÎªÅŒÐ§Ñé*/          options.c_iflag |= INPCK;       /* Disnable parity checking */        break;    case 'S':    case 's':  /*as no parity*/        options.c_cflag &= ~PARENB;        options.c_cflag &= ~CSTOPB;        break;    default:        fprintf(stderr,"Unsupported parity\n");        return(FALSE);    }    /* ÉèÖÃֹͣλ*/       switch (stopbits) {    case 1:        options.c_cflag &= ~CSTOPB;        break;    case 2:        options.c_cflag |= CSTOPB;        break;    default:        fprintf(stderr,"Unsupported stop bits\n");        return(FALSE);    }    /* Set input parity option */    if (parity != 'n')        options.c_iflag |= INPCK;    options.c_cc[VTIME] = 150; // 15 seconds    options.c_cc[VMIN] = 0;    tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */    if (tcsetattr(fd,TCSANOW,&options) != 0) {        perror("SetupSerial 3");        return(FALSE);    }    return(TRUE);}/***@breif Žò¿ªŽ®¿Ú*/int OpenDev(char *Dev){    int fd = open( Dev, O_RDWR );         //| O_NOCTTY | O_NDELAY    if (-1 == fd) { /*ÉèÖÃÊýŸÝλÊý*/        perror("Can't Open Serial Port");        return -1;    } else        return fd;}int SendData(int fd,char *str){    //auto add the crlf    char strbuf[1000];    strcpy(strbuf, str);    strcat(strbuf, "\r\n");    write(fd, strbuf, strlen(strbuf));    //printf("Send: <%s>\n", strbuf);}/***@breif 	main()*/int main(int argc, char **argv){    int fd;    int nread;    char buff[512];    char bufftemp[512];    char *dev ="/dev/ttyS0";    fd = OpenDev(dev);    if (fd>0)        set_speed(fd,9600);    else {        printf("Can't Open Serial Port!\n");        exit(0);    }    if (set_Parity(fd,8,1,'N')== FALSE) {        printf("Set Parity Error\n");        exit(1);    }/*    while (1) {        int count =0;        while (1)         {            nread = 0;            nread = read(fd,bufftemp,MAX_MESSAGE);            memcpy(&buff[count],bufftemp,nread);            count+=nread;            if(count ==MAX_MESSAGE)                break;            else if(count>MAX_MESSAGE)            {                printf("strange! receive > send \n");                break;            }                }        //printf("\nLen %d\n",nread);        buff[count]='\0';        printf("\r\nRecv: <%s>\n",buff);    }*/    while (1)     {        memset(buff,0x0, MAX_MESSAGE);        if((nread = read(fd,buff,MAX_MESSAGE))>0)        {           buff[nread]='\0';            printf("\r\nRecv: <%s>\n",buff);        }    }    close(fd);    exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -