常用设置

9.1设置规范模式

规范模式是面向行的输入方式,输入字符被放入用于和用户交互可以编辑的缓冲区内,直接到读入回车或者换行符号时才结束。

可以通过如下方式来设置

option.c_lflag |= (ICANON | ECHO | ECHOE);

9.2设置原始输入模式

原始输入模式是没有处理过的,当接收数据时,输入的字符在它们被接收后立即被传送,使用原始输入模式时候,一般可以选择取消ICANON,ECHO,ECHOE和ISIG选项。

例如:

option.c_lflag &= ~(ICANON | ECHO | ECHOE);

=========================================================================

总结:上面的问题应该比较清楚了,就是在输入模式的设置上出了问题,默认的可能是行缓冲的,导致在接收串口的时候,串口会自行把数据存到缓冲里面,只有接收到回车、换行等结束标志后,才把数据一起送到内存,这样串口的read函数才能读到数据,也就会触发相应的标志(SIGIO)。所以,需要在对串口设置的时候,要设置为原始输入模式。                                                                              

#include<stdio.h>  
#include<stdlib.h>  
#include<unistd.h>  
#include<sys/types.h>  
#include<sys/stat.h>  
#include<fcntl.h>  
#include<termios.h>  
#include<errno.h>  
#include<string.h>

#define FALSE -1  
#define TRUE 0  
  
int bit_recv=0;

int uart_fd;

int speed_arr[] = { B57600, B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, };  
int name_arr[] = {57600,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);     
    }    
  }  
}  
  
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 */

options.c_lflag &= ~(ICANON|ECHO|ISIG);   /* Clear parity enable */  
            options.c_oflag &= ~OPOST;     /* 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;   
    tcflush(fd,TCIFLUSH);  
//    options.c_cc[VTIME] = 150;   
 //   options.c_cc[VMIN] = 0; /* Update the options and do it NOW */  
   
 if (tcsetattr(fd,TCSANOW,&options) != 0)     
    {   
        perror("SetupSerial 3");     
        return (FALSE);    
    }   
    return (TRUE);    
}  



int main(int argc, char *argv[])
{

int ret;

unsigned char Flag,ReadBuf[15];
/*鎵撳紑骞跺垵濮嬪寲涓插彛*/
uart_fd = open("/dev/ttyUSB4",O_RDWR);

if(uart_fd<0)
{
printf("error\n");
}

set_speed(uart_fd,57600);  
   if (set_Parity(uart_fd,8,1,'N') == FALSE)  {  
       printf("Set Parity Error\n");  
       exit (0);  
   }  
    
    
tcflush(uart_fd, TCIFLUSH) ;
SendDspCmd(Get_Image,uart_fd);
while(1)

linux 下串口的配置需要注意相关推荐

  1. Linux下串口的配置

    一.串口属性 (标题一部分内容摘录自原文地址) 1.termios结构体 串口属于终端设备,其接口属性用termios结构体来描述 struct termios {tcflag_t c_cflag/* ...

  2. linux练习 串口跟进程6,linux下串口测试程序

    linux下串口测试程序 通过简单的参数配置,执行文件+串口号+波特率 #include stdio.h #include stdlib.h #include unistd.h #include sy ...

  3. Linux 下串口编程(C++ 程序设计)

    串口通信是最简单的通信方式.即使在USB 非常流行的今天,依然保留了串行通信的方式.网络上已经有大量关于Linux下 C++ 串口编程的文章,但是我依然要写这篇博文.因为网络上的资料不是内容太多,就是 ...

  4. Linux下串口编程

    文章目录 串口 驱动 安装 设备文件 测试代码 编译运行 引用 串口 电平之类的就不说了,串口使用的一般包括rs232全双工,rs422四线全双工,rs485两线半双工,rs485四线全双工几种模式, ...

  5. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)

    博客园 首页 新随笔 联系 管理 订阅 <div class="blogStats"><!--done--> 随笔- 556  文章- 38  评论- 77 ...

  6. Linux下安装、配置PHP环境

    Linux下安装.启动MySQL :http://blog.csdn.net/wy3552128/article/details/8143686 Linux下安装.配置.启动Apache:http:/ ...

  7. Linux下svn搭建配置流程

    Linux下svn搭建配置流程     一.    源文件编译安装.源文件共两个,为: 1.   下载subversion源文件 subversion-1.6.1.tar.gz http://d136 ...

  8. Linux下,安装配置Weblogic

    Linux下,安装配置Weblogic 2009-03-20 15:03 一.安装配置JDK //如果应用不需要高版本的JDK的话,可以不单独安装JDK 1. 安装JDK # chmod a+x jd ...

  9. linux实验串行端口程序设计,Linux下串口编程心得(转)

    最近一段时间,需要完成项目中关于Linux下使用串口的一个部分,现在开帖记录过程点滴. 项目的要求是这样的,Qt应用程序主要完成数据采集和发送功能,一开始在google中海搜关键字"Qt串口 ...

最新文章

  1. /etc/profile ,/etc/bashrc ,~/.bash_profile,~/ .bashrc 区别与联系
  2. Android 获取标题栏的高度
  3. 程序员注意了!人社部“就业报告”:未来5年,这10个新职业有千万缺口
  4. java对象深入理解
  5. javascript二维数组转置_VBA数组拆分及维数的转换
  6. Julia程序设计3 数组1 创建、初始化、属性与访问
  7. 免费指纹浏览器破解方法之开源代码
  8. 开箱即用——用模板快速生成《客户意见反馈表》
  9. jQuery实现右上角点击后滑下来的竖向菜单
  10. System进程(pid=4)占用80端口的解决方案
  11. 第三次学JAVA再学不好就吃翔(part32)--方法重写
  12. Linux运维系统工程师系列---11
  13. linux将分区从目录上卸载,Linux CentOS 硬盘分区、格式化、挂载与卸载
  14. linux dbm数据库,Linux dbm遇到的一些问题
  15. 固实压缩文件容易损坏_请慎重使用固实压缩文件
  16. Ubuntu找不到wifi适配器问题及解决办法
  17. 关于示波器探头的输入容抗问题解决
  18. 微信群控系统源码的实现原理,核心源码实现,核心框架。
  19. 神了!有人用一个项目把23种设计模式与六大原则融会贯通了
  20. Scratch技巧—-使用克隆技术实现菜单按钮

热门文章

  1. Java 8中stream相关用法
  2. (十)装饰器模式详解(与IO不解的情缘)
  3. Tomcat——目录结构
  4. 一个IEEE论文LaTeX模板,可能较旧
  5. 分类模型的性能评估——以SAS Logistic回归为例(3): Lift和Gain
  6. 从源代码剖析Mahout推荐引擎
  7. Nginx模块开发入门
  8. VLFeat SLIC超像素分割(Cpp版)
  9. Sed教程(四):基本命令、特殊字符、字符串
  10. 2.4 编写第一个自动化脚本