前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux基础(串口编程)

Linux基础(串口编程)

作者头像
用户2617681
发布2019-08-08 16:11:58
12.8K0
发布2019-08-08 16:11:58
举报
文章被收录于专栏:秘籍酷

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

先来一段代码压压惊:

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

第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);

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档