您的位置 首页 编程

linux根底温习(7)串口使用开发

据通信的基本方式可分为并行通信与串行通信两种。· 并行通信是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适

据通讯的根本办法可分为并行通讯与串行通讯两种。

· 并行通讯是指运用多条数据传输线将一个材料的各位一起传送。它的特点是传输速度

快,适用于短距离通讯,但要求传输速度较高的运用场合。

· 串行通讯是指运用一条传输线将材料一位位地次序传送。特点是通讯线路简略,运用

简略的线缆就可完成通讯,降低成本,适用于远距离通讯,但传输速度慢的运用场合。

串口设置详解

本节首要解说设置串口的首要办法。

如前所述,设置串口中最根本的包含波特率设置,校验位和中止位设置。串口的设置主

要是设置struct termios结构体的各成员值,如下所示:

#include

struct termio

{

unsigned short c_iflag; /* 输入形式标志 */

unsigned short c_oflag; /* 输出形式标志 */

unsigned short c_cflag; /* 操控形式标志*/

unsigned short c_lflag; /*本地形式标志 */

unsigned char c_line; /* line discipline */

unsigned char c_cc[NCC]; /* control characters */

};

在这个结构中最为重要的是c_cflag,经过对它的赋值,用户能够设置波特率、字符巨细、

数据位、中止位、奇偶校验位和硬件流控等。别的c_iflag 和c_cc 也是比较常用的标志。在

此首要对这3 个成员进行具体阐明。

c_cflag支撑的常量称号

CBAUD 波特率的位掩码

B0 0波特率(抛弃DTR)

B1800 1800波特率

B2400 2400波特率

B4800 4800波特率

B9600 9600波特率

B19200 19200波特率

B38400 38400波特率

B57600 57600波特率

B115200 115200波特率

EXTA 外部时钟率

EXTB 外部时钟率

CSIZE 数据位的位掩码

CS5 5个数据位

CS6 6个数据位

CS7 7个数据位

CS8 8个数据位

CSTOPB 2个中止位(不设则是1个中止位)

CREAD 接纳使能

PARENB 校验位使能

PARODD 运用奇校验而不运用偶校验

HUPCL 最终封闭时挂线(抛弃DTR)

CLOCAL 本地连接(不改动端口一切者)

LOBLK 块作业操控输出

CNET_CTSRTS 硬件流操控使能

c_iflag支撑的常量称号

INPCK 奇偶校验使能

IGNPAR 疏忽奇偶校验过错

PARMRK 奇偶校验过错掩码

ISTRIP 除掉奇偶校验位

IXON 发动出口硬件流控

IXOFF 发动进口软件流控

IXANY 答应字符重新发动流控

IGNBRK 疏忽中止状况

BRKINT 当产生中止时发送SIGINT信号

INLCR 将NL映射到CR

IGNCR 疏忽CR

ICRNL 将CR映射到NL

IUCLC 将高位状况映射到低位状况

IMAXBEL 当输入太长时回复ECHO

c_cc 支撑的常量称号

VINTR 中止操控,对应键为CTRL+C

VQUIT 退出操作,对应键为CRTL+Z

VERASE 删去操作,对应键为Backspace(BS)

VKILL 删去行,对应键为CTRL+U

VEOF 坐落文件结束,对应键为CTRL+D

VEOL 坐落行尾,对应键为Carriage return(CR)

VEOL2 坐落第二行尾,对应键为Line feed(LF)

VMIN 指定了最少读取的字符数

VTIME 指定了读取每个字符的等候时间

串口操控函数

Tcgetattr 取特点(termios结构)

Tcsetattr 设置特点(termios结构)

cfgetispeed 得到输入速度

Cfgetospeed 得到输出速度

Cfsetispeed 设置输入速度

Cfsetospeed 设置输出速度

Tcdrain 等候一切输出都被传输

tcflow 挂起传输或接纳

tcflush 刷清未决输入和/或输出

Tcsendbreak 送BREAK字符

tcgetpgrp 得到前台进程组ID

tcsetpgrp 设置前台进程组ID

[color=#ff0000]完好的串口装备模板,有用!把常用的选项在函数里边列出,可大大便利用户的调试运用[/color]

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

struct termios newtio,oldtio;

/*保存测验现有串口参数设置,在这里假如串标语等犯错,会有相关的犯错信息*/

if ( tcgetattr( fd,oldtio) != 0)

{

perror(SetupSerial 1);

return -1;

}

bzero( newtio, sizeof( newtio ) );

/*过程一,设置字符巨细*/

newtio.c_cflag |= CLOCAL | CREAD;

newtio.c_cflag = ~CSIZE;

/*设置中止位*/

switch( nBits )

{

case 7:

newtio.c_cflag |= CS7;

break;

case 8:

newtio.c_cflag |= CS8;

break;

}

/*设置奇偶校验位*/

switch( nEvent )

{

case ‘O’: //奇数

newtio.c_cflag |= PARENB;

newtio.c_cflag |= PARODD;

newtio.c_iflag |= (INPCK | ISTRIP);

break;

case ‘E’: //偶数

newtio.c_iflag |= (INPCK | ISTRIP);

newtio.c_cflag |= PARENB;

newtio.c_cflag = ~PARODD;

break;

case ‘N’: //无奇偶校验位

newtio.c_cflag = ~PARENB;

break;

}

/*设置波特率*/

switch( nSpeed )

{

case 2400:

cfsetispeed(newtio, B2400);

cfsetospeed(newtio, B2400);

break;

case 4800:

cfsetispeed(newtio, B4800);

cfsetospeed(newtio, B4800);

break;

case 9600:

cfsetispeed(newtio, B9600);

cfsetospeed(newtio, B9600);

break;

case 115200:

cfsetispeed(newtio, B115200);

cfsetospeed(newtio, B115200);

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/297822.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部