串口设置(波特率、数据位、校验位、停止位) 您所在的位置:网站首页 串口校验工具有哪些 串口设置(波特率、数据位、校验位、停止位)

串口设置(波特率、数据位、校验位、停止位)

2023-12-27 11:24| 来源: 网络整理| 查看: 265

串口终端设备的接口属性如下:

struct termios { tcflag_t c_cflag; //控制标志 tcflag_t c_iflag; //输入标志 tcflag_t c_oflag; //输出标志 tcflag_t c_lflag; //本地标志 tcflag_t c_cc[NCCS];//控制字符 }

其中定义类型如下:

typedef unsigned int tcflag_t;

需要包含的头文件 下面介绍一下各个标志的选项

控制标志c_cflag:

波特率相关:

标志说明标志说明CBAUD波特率位屏蔽B48004800 位/秒B00 位/秒(挂起)B96009600 位/秒B110100 位/秒B1920019200 位/秒B134134 位/秒B5760057600 位/秒B12001200 位/秒B115200115200 位/秒B24002400 位/秒B460800460800 位/秒

数据位相关:

标志说明CSIZE数据位屏蔽CS55 位数据位CS66 位数据位CS77 位数据位CS88 位数据位

停止位相关:

标志说明CSTOPB2 位停止位,否则为 1 位

校验位:

标志说明PARENB进行奇偶校验PARODD奇校验,否则为偶校验

其他:

标志说明CREAD启动接收HUPCL最后关闭时断开CLOCAL忽略调制调解器状态行

输入标志c_iflag:

标志说明标志说明INPCK打开输入奇偶校验IXOFF启用/停止输入控制流起作用IGNPAR忽略奇偶错字符IGNBRK忽略BREAK条件PARMRK标记奇偶错字符INLCR讲输入的NL转换为CRISTRIP剥除字符第八位IGNCR忽略CRIXON启用/停止输出控制流起作用ICRNL将输入的CR转换为NL

输出标志c_oflag:

标志说明BSDLY退格延迟屏蔽OLCUC将输出的小写字符转换为大写字符CMSPAR标志或空奇偶性ONLCR将 NL 转换为 CR-NLCRDLYCR 延迟屏蔽ONLRETNL 执行 CR 功能FFDLY换页延迟屏蔽ONOCR在 0 列不输出 CROCRNL将输出的 CR 转换为 NLOPOST执行输出处理OFDEL填充符为 DEL,否则为 NULLOXTABS将制表符扩充为空格OFILL对于延迟使用填充符

本地标志c_lflag:

标志说明标志说明ISIG启用终端产生的信号NOFLSH在中断或退出键后禁用刷清ICANON启用规范输入IEXTEN启用扩充的输入字符处理XCASE规范大/小写表示ECHOCTL回送控制字符为(char)ECHO进行回送ECHOPRT硬拷贝的可见擦除方式ECHOE可见擦除字符ECHOKEKill 的可见擦除ECHOK回送 kill 符PENDIN重新打印未决输入ECHONL回送 NLTOSTOP对于后台输出发送 SIGTTOU

控制字符组:

标志说明标志说明VINTR中断VEOL行结束VQUIT退出VMIN需读取的最小字节数VERASE擦除VTIME与“VMIN”配合使用,是指限定的传输或等待的最长时间VEOF行结束

示例代码:

#include #include #include #define TRUE 1 #define FALSE (-1) int serialAttr(int baudrate, int databit, char paritybit, int stopbit); int main(void) { serialAttr(9600, 8, 'N', 1); return 0; } int serialAttr(int baudrate, int databit, char paritybit, int stopbit) { int fd; fd = open("/dev/ttyx",O_RDWR | O_NOCTTY); //读写方式打开;不作为控制终端 if(fd == -1) { return FALSE; } /*更改波特率*/ int status; struct termios opt; tcgetattr(fd,&opt);//获取终端参数 tcflush(fd,TCIOFLUSH);//刷清输入输出缓存 cfsetispeed(&opt,baudrate);//设置输入的波特类 cfsetospeed(&opt,baudrate);//设置输出的波特类 /*数据位、停止位、校验位*/ opt.c_cflag |= (CLOCAL | CREAD); opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);//原始模式,输入数据不经处理 opt.c_oflag &= ~OPOST; //原始输出 opt.c_iflag &= ~(BRKINT | ICRNL | ISTRIP | IXON); opt.c_cflag &= ~CSIZE; //数据位清零 switch (databit) //数据位 { case 7: opt.c_cflag |= CS7;break; case 8: opt.c_cflag |= CS8;break; default: fprintf(stderr,"Unsupported data size\n"); return (FALSE); } switch (paritybit) //校验位 { case 'n': case 'N': opt.c_cflag &= ~PARENB; // 不校验 opt.c_iflag &= ~INPCK; //关闭输入奇偶校验 opt.c_iflag &= ~(ICRNL|IGNCR); opt.c_lflag &= ~(ICANON ); //不规范输入 break; case 'o': //奇校验 case 'O': opt.c_cflag |= PARENB; //进行奇偶校验 opt.c_cflag |= PARODD; //奇校验,否则为偶校验 opt.c_iflag |= INPCK; //打开输入奇偶校验 break; case 'e': //偶校验 case 'E': opt.c_cflag |= PARENB; // 进行奇偶校验 opt.c_cflag &= ~PARODD; //偶校验 opt.c_iflag |= INPCK; //打开输入奇偶校验 break; case 'S': case 's': /*as no parity*/ opt.c_cflag &= ~PARENB; //不进行奇偶校验 opt.c_cflag &= ~CSTOPB; //1 位停止位 break; default: fprintf(stderr,"Unsupported parity bit\n"); return (FALSE); } switch (stopbit) //停止位 { case 1: opt.c_cflag &= ~CSTOPB;break; //1 位停止位 case 2: opt.c_cflag |= CSTOPB;break; //2 位停止位,否则为 1 位 default: fprintf(stderr,"Unsupported stop bit\n"); return (FALSE); } opt.c_cc[VTIME] = 150; // 等待数据到达的分秒数(秒的 1/10 为分秒) opt.c_cc[VMIN] = 0; // read 调用期望返回的最小字节数 tcflush(fd,TCIFLUSH); // 刷清输入缓存区 if (tcsetattr(fd,TCSANOW,&opt) != 0) //TCSANOW:不等数据传输完毕就立即改变属性。 { perror("Setup serial port fail\n"); return FALSE; } else { return TRUE; } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有