串口通信的参数如何设置

接口/总线/驱动

1115人已加入

描述

  串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

  串口通信程序框图串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。

  串口是计算机上一种非常通用的设备通信协议。大多数计算机(不包括笔记本电脑)包含两个基于RS-232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。

  RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。

  通信协议

  1.波特率设置

    串口通信参数指的是波特率、数据位、奇偶校验位和停止位。对串口实现控制的时候同样要用到termio结构体。下面将结合具体的代码说明如何设置这些参数。

  2.数据位

  数据位指的是每字节中实际数据所占的比特数。要修改数据位可以通过修改termios结构体中c_cflag成员来实现。CS5、CS6、CS7和CS8分别表示数据位为5、6、7和8。值得注意的是,在设置数据位时,必须先使用CSIZE做位屏蔽。具体设置代码如下:

  #include //头文件定义

  #include

  #include 《 termios.h 》

  ……

  struct termios opt; /*定义指向termios 结构类型的指针opt*/

  。..。..。

  //获得串口指向termios结构的指针

  tcgetattr(fd, &Opt);

  …

  //屏蔽其他标志

  Opt.c_cflag&=~CSIZE;

  //将数据位修改为8bit

  Opt.c_cflag |=CS8;

  …

  //将修改后的termios数据设置到串口中

  tcsetattr(fd,TCANOW,&Opt);

  ……

  3.奇偶校验位

  奇偶校验可以选择偶校验、奇校验、空格等方式,也可以不使用校验。如果要设置为偶校验的话,首先要将termios结构体中c_cflag设置 PARENB标志,并清除PARODD标志。如果要设置奇校验,要同时设置termios结构体中c_cflag设置PARENB标志和PARODD标 志。如果不想使用任何校验的话,清除termios结构体中c_cflag的PARENB位。表6.12所示为设置奇偶校验的具体方法。

  表6.12 设置奇偶校验位

  设 置具 体 代 码

  无校验opt.c_cflag &= ~PARENB;

  奇校验opt.c_cflag |= (PARODD | PARENB);

  偶校验opt.c_cflag &= ~ PARENB;

  opt.c_cflag &= ~PARODD;

  空格opt.c_cflag &= ~PARENB;

  opt.c_cflag &= ~CSTOPB;

  下面给出将串口通信的奇偶校验设置为偶校验的例子,具体代码如下:

  #include //头文件定义

  #include

  #include 《 termios.h 》

  ……

  struct termios opt; /*定义指向termios 结构类型的指针opt*/

  ……

  //获得串口指向termios结构的指针

  tcgetattr(fd, &Opt);

  …

  opt.c_cflag &= ~ PARENB;

  opt.c_cflag &= ~PARODD;

  …

  //将修改后的termios数据设置到串口中

  tcsetattr(fd,TCANOW,&Opt);

  ……

  4.数据流控制

  数据流控制指是使用何种方法来标志数据传输的开始和结束。可以选择不使用数据流控制、使用硬件进行流控制和使用软件进行流控制。数据流控制设置如表6.13所示。

  表6.13 数据流控制设置

  设 置具 体 代 码

  不使用数据流控制opt.c_cflag &= ~CRTSCTS

  硬件opt.c_cflag |= CRTSCTS

  软件opt.c_cflag | = IXON|IXOFF|IXANY

  由于使用硬件流控制需要相应连接的电缆,常用的流控制方法还是使用软件进行流控制。下面给出了设置不使用数据流控制的相关代码:

  #include //头文件定义

  #include

  #include 《 termios.h 》

  ……

  struct termios opt; /*定义指向termios 结构类型的指针opt*/

  ……

  //获得串口指向termios结构的指针

  tcgetattr(fd, &opt);

  …

  opt.c_cflag &= ~CRTSCTS…

  //将修改后的termios数据设置到串口中

  tcsetattr(fd,TCANOW,&Opt);

  ……

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分