Linux基础(串口编程)

Posted 秘籍酷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础(串口编程)相关的知识,希望对你有一定的参考价值。

虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。


先来一段代码压压惊:

Linux基础(串口编程)

上面的代码是使用串口的第一步,来解释下都是啥意思。来瞧瞧:


第21-22行,定义了一个用来配置串口属性的结构体:

struct termios serial;

bzero(&serial, sizeof(serial));


第24行,将串口设置为raw数据模式,即关闭掉字符回显、关闭输入输出时特殊的进度控制特殊字符,因为我们此时不需要使用串口来实现终端控制,因此这些功能都不需要:

cfmakeraw(&serial);


第25-26行,很简单,设置输入输出波特率。

cfsetispeed(&serial, B9600);

cfsetospeed(&serial, B9600);


第28-32行,设置串口控制属性(c_cflag),其中:

serial.c_cflag |= CLOCAL | CREAD; // 忽略调制解调器线路状态并使能接收器

serial.c_cflag &= ~CSIZE; // 使能字符尺寸

serial.c_cflag |= CS8; // 设置字符尺寸为CS8

serial.c_cflag &= ~PARENB; // 关闭奇偶校验

serial.c_cflag &= ~CSTOPB; // 关闭停止位


第33、36行,刷新掉接收到的数据并忽略掉他们:

tcflush(fd,TCIFLUSH);


第34-35行,设置非规范模式下的超时时长和最小字符数:

serial.c_cc[VTIME] = 10;

serial.c_cc[VMIN] = 1;


最后,将以上所有参数一股脑设置到对应的串口就行了:

tcsetattr(fd,TCSANOW,&serial);


当然,上面的 fd 就是系统中的某一个你想要设置的成上面那样的属性参数的串口,比如就拿粤嵌GEC210开发板来说,他有四个串口,其中第一个就已经被用于终端控制了,那我们可以打开第二个串口来设置:

int fd = open(“/dev/s3c2410_serial1”, O_RDWR | O_NOCTTY);


好了,今天就扯到这里,这几天都是代码的玩意儿,比较专业比较枯燥比较蒙圈,能看完的绝对都是真爱!成功的路上没有那么多舒服可言,就像粤嵌任老师说的,舒服都是留给死人的!


Linux基础(串口编程)
Linux基础(串口编程)


以上是关于Linux基础(串口编程)的主要内容,如果未能解决你的问题,请参考以下文章

linux的串口编程。read()读不出回车键

Linux系统编程四:串口编程,控制LED和蜂鸣器

Linux下串口编程

linux串口编程(c)

Linux下的串口编程

QT开发(五十)——QT串口编程基础