博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
串口编程
阅读量:6326 次
发布时间:2019-06-22

本文共 4080 字,大约阅读时间需要 13 分钟。

串口编程:

#define DEV_GPS_NAME "/dev/ttyS1"#define GPS_BAUD_RATE 9600int speed_arr[] = {B115200,B38400, B19200, B9600, B4800, B2400, B1200, B300,        B38400, B19200, B9600, B4800, B2400, B1200, B300};int name_arr[] = {115200,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);  printf("ispeed  =%lu ospeed=%lu\r\n",cfgetispeed(&Opt),cfgetospeed(&Opt));  for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++)   {        if  (speed == name_arr[i])        {            printf("set_speed i =%d\r\n",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");            tcgetattr(fd, &Opt);            printf("after ispeed  =%lu ospeed=%lu\r\n",cfgetispeed(&Opt),cfgetospeed(&Opt));            return;        }        tcflush(fd,TCIOFLUSH);    }}/***  设置串口数据位,停止位和效验位*@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 -1;    }    printf("options flag %x\r\n", options.c_cflag);    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 -1;    }    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 -1;    }    /* 设置停止位*/    switch (stopbits)    {        case 1:            options.c_cflag &= ~CSTOPB;            break;                    case 2:            options.c_cflag |= CSTOPB;            break;                    default:            fprintf(stderr,"Unsupported stop bits\n");            return -1;    }        /* 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  TCIFLUSH*/    if (tcsetattr(fd,TCSANOW,&options) != 0)    {        perror("SetupSerial 3");        return -1;    }    printf("after options flag %x\r\n", options.c_cflag);    return 0;}static int OpenAndSetGpsDev(void){    g_GpsFp = fopen(DEV_GPS_NAME,"r+");    if (NULL == g_GpsFp)    {        perror("Open ttyS1 failed!");        return -1;    }      g_GpsFd = fileno(g_GpsFp);        if (g_GpsFd > 0)    {        set_speed(g_GpsFd,GPS_BAUD_RATE);    }    else    {        perror("Can't Open Serial Port!");        fclose(g_GpsFp);        return -1;    }    if (set_Parity(g_GpsFd,8,1,'N') == -1)    {        perror("Set Parity Error");        fclose(g_GpsFp);        g_GpsFd = 0;        return -1;    }        return 0;}

转载于:https://www.cnblogs.com/hehehaha/p/6332328.html

你可能感兴趣的文章
1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
查看>>
QC的OTA参考手册学习--第一篇
查看>>
初始java白盒测试--junit的使用
查看>>
redis持久化
查看>>
docker 1 为什么要使用docker
查看>>
牛客网上的最后一位
查看>>
常用Slider及Gallery
查看>>
lucene_03_索引的增删改查
查看>>
IText&Html2canvas js截图 绘制 导出PDF
查看>>
Maximum GCD (stringstream)题解
查看>>
HDU 3374 String Problem(最大最小表示+KMP)题解
查看>>
WindowManage与Window的在Activity的一点小应用
查看>>
#1036 – Table ‘* ‘ is read only
查看>>
Annotation(注解)介绍
查看>>
校门外的树2
查看>>
杭电2085--核反应堆(打表)
查看>>
杭电3785--寻找大富翁
查看>>
ASP.NET请求过程-从源码角度研究MVC路由、Handler、控制器
查看>>
BASE64编码解码
查看>>
Flask总结
查看>>