@解析串口数据

串口初始化及配置

下面展示一些 串口相关初始化
/相关初始化/

pthread_t pSerial;
static const char *device = "/dev/ttyS1";
static int uartFd = 0;
int speed_arr[] = {B921600, B460800, B230400, B115200, B57600, B38400, B19200,B9600, B4800, B2400, B1200, B300,
};
int name_arr[] = {921600, 460800, 230400, 115200, 57600, 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 < (int)(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);}if (i == 12){printf("\tSorry, please set the correct baud rate!\n\n");}
}

/串口相关设置,停止位,校验位…/

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] = 1; // 15 secondsoptions.c_cc[VMIN] = 128;options.c_lflag &= ~(ECHO | ICANON);options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);options.c_oflag &= ~OPOST;options.c_cflag |= CLOCAL | CREAD;options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */if (tcsetattr(fd,TCSANOW,&options) != 0) {perror("SetupSerial 3");return (FALSE);}return (TRUE);
}

/打开串口/linux下查看串口 /dev/ttyS*

int OpenDev(const char *Dev)
{int fd = open( Dev, O_RDWR | O_NOCTTY | O_NDELAY);if (-1 == fd){perror("Can't Open Serial Port");return -1;} elsereturn fd;
}
*这里就是初始化串口一些信息调用以上的函数* __
void InitCom(const char *SeriName)
{//    pthread_t pSerial;uartFd = OpenDev(SeriName);if (uartFd > 0){set_speed(uartFd, 19200);if (set_Parity(uartFd,8,1,'N')== FALSE){fprintf(stderr, "Set Parity Error\n");close(uartFd);return;}pthread_create(&pSerial,NULL,ReadComData,NULL);}else{        printf("Open %s Falied!\r\n",device);return;}
}

串口数据的解析

*启动线程接收* __
void InitCom(const char *SeriName)
{//    pthread_t pSerial;uartFd = OpenDev(SeriName);if (uartFd > 0){set_speed(uartFd, 19200);if (set_Parity(uartFd,8,1,'N')== FALSE){fprintf(stderr, "Set Parity Error\n");close(uartFd);return;}pthread_create(&pSerial,NULL,ReadComData,NULL);/*线程函数在下面*/}else{        printf("Open %s Falied!\r\n",device);return;}
}

下面展示一些 接收串口数据解析

void * ReadComData(void *arg)
{printf("%s is running\r\n",__FUNCTION__);(void)arg;char buf[128];int rtn;int index = 0;char c;while(1){rtn = read(uartFd,&c,1);if(rtn > 0){/*接收到的数据开头为A*/if('A' == c){index = 1;buf[0] = c;}/*以换行结束,也就是在输入如:A123456\r,\r是在串口界面上输入发送信息的时候键盘上的回车*/else if('\r' == c){buf[index] = '\0';if('>' == buf[0]){printf("Recv data is:%s\r\n",buf);/**/}index = 0;}/*没找到继续找*/else{buf[index] = c;index++;if(index >= 128)index = 0;}}}return NULL;
}

linux C串口数据解析相关推荐

  1. Linux读取串口数据

    一.前言 最近项目中需要在Linux系统下读取串口数据,由于使用的Ubantu系统,开发工具是Qt Creator,所以首先在网上百度了一下,找到了几篇博客,大致内容上都差不多.由于使用的Qt4,其没 ...

  2. 远程定位gps linux,GPS(NMEA)数据解析

    一.GPS定位信息 设置好gps模式,启动gps,正常的话在gps通路有NMEA数据上报,如下: $GPGSV,3,1,11,01,62,130,42,07,61,201,43,11,72,075,2 ...

  3. linux下json数据解析,JSON数据解析 - iOS学习笔记_Linux编程_Linux公社-Linux系统门户网站...

    在之前的<iOS学习--xml数据解析(九)>http://www.linuxidc.com/Linux/2014-02/97020p9.htm 介绍了xml数据解析,这一篇简单介绍一下J ...

  4. linux下json数据解析,Linux下使用jq简单解析json的方法

    jq简介 jq 是一款命令行下处理 JSON 数据的工具.其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出 ...

  5. 基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现

    说明:此文章提供了一种基于TencentOS-tiny的串口数据解析思路及实现,感谢戴大神最初写的源码,这种思路同样可以实现AT框架.基于串口的GPS数据解析等等. 1. PM2.5传感器 本文使用的 ...

  6. python 3下对stm32串口数据做解析

    1.最近有个想做一个传感器数据实时显示的上位机,常规的数据打印太频繁了,无法直观的看出数据的变化. python下的上位机实现起来简单一点,网上找了一些python界面Tkinter相关资料和pyth ...

  7. Android(Linux)实时监控串口数据

    之前在做WinCE车载方案时,曾做过一个小工具TraceMonitor,用于显示WinCE系统上应用程序的调试信息,特别是在实车调试时,用于监控和显示CAN盒与主机之间的串口数据.因为需要抢占市场先机 ...

  8. Linux下串口编程遇 接收数据错误问题及原因

    近日在调试串口的时候发现,另一设备向我ARM板的串口发送0x0d,我接收之后变成了0x0a,这是问题一:另外当对方向我发送一串数据,如果其中有0x11,那么我总是漏收此数,这是问题二. 由于问题莫名其 ...

  9. jy61 树莓派_用Linux树莓派来读取JY61的串口数据

    简述 有很多的小伙伴说用Linux树莓派来读取JY61的串口数据不知道怎么操作.今天我和大家分享下我是从三个方面分享的.1.JY61和树莓派的连接方式及VNC的使用:2.下载到树莓派的程序是如何编写的 ...

最新文章

  1. Document对象内容集合
  2. java多线程 门闩_Java线程与并发编程实践----同步器(倒计时门闩,同步屏障)...
  3. React Fiber 原理介绍
  4. Ubuntu中配置SSH服务
  5. CMOS图像传感器——噪声模型
  6. 三、SpringBoot-application.properties配置文件和application.yml配置文件
  7. Java程序开发三步骤:编写、编译、运行
  8. nil,Nil,NULL,NSNull
  9. 有关 给Layout设置监听事件后,与Layout子控件的响应关系
  10. Matrix: android 中的Matrix (android.graphics.Matrix) (转)
  11. 造车梦又要“窒息”了?贾跃亭被美国认定骗局,收到退市警告!FF回应了......
  12. 苹果新Mac Pro生产线将从美国转至中国 会更便宜吗?
  13. 平面设计中应当注意的设计原则
  14. markdown首行空两格
  15. sql server数据库《音乐网站》项目歌曲管理模块
  16. MATLAB 线型图
  17. mysql odbc 免安装_MySQL免安装版配置
  18. java excel checkbox,使用Apache POI(Java)在XLSX中创建复选框
  19. 第26课时,实践4,定期存款利息计算器
  20. 347. Top K Frequent Elements

热门文章

  1. 如何在Mac上设置iMessage?
  2. 初步使用计算机ppt课件,《计算机应用基础教程》第13课:网页制作初步课件.ppt...
  3. WPF/Silverlight深蓝团队悄悄登陆了
  4. Unity小游戏——移动的小船船(船体在水面上晃动)
  5. 鬼谷子猜数问题 - 高三毕业以前最后一篇日志
  6. 男生必看的10部漫画
  7. H5初识,应用canvas实现一个简单的七巧板图形
  8. STM32 F4 存储结构
  9. TSrings 使用
  10. Java中的File类和IO流