Linux串口通信编程
1.串口介绍
linux操作系统对串行口提供了很好的支持,linux系统中串口设备被当做一个字符设备处理。
linux系统后在/dev目录下有若干个ttySx(x代表从0开始的正整数)设备文件。ttyS0对应第一个串口,也就是Windows系统下的串口设备COM1.
2.串口操作方法
操作串口的方法与文件类似,可以使用与文件操作相同的的方法打开和关闭串口、读写。以及使用select()函数监听串口。
不同的是,串口是一个字符设备,不能使用fseek()之类的文件定位函数。此外串口是个硬件设备,还可以设置串口设备的属性。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> //UNIX标准函数定义
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> //文件控制定义
#include <termios.h> //PPSIX终端控制定义
#include <errno.h> //错误号定义int main()
{int fd;fd = open("/dev/ttyS0", O_RDWR);if(fd == -1){perror("open ttyS0");return 0;}printf("Open ttyS0 OK!\n");close(fd);return 0;
}
3.串口属性设置
串口的基本属性,包括波特率、数据位、停止位、奇偶检验等参数。linux系统通常使用termios结构存储串口参数,该结构在termios.h头文件定义如下:
struct termios
{tcflag_t c_iflag; /* input modes 输入模式标志*/ //unsigned short == tcflag_ttcflag_t c_oflag; /* output modes */tcflag_t c_cflag; /* control modes */tcflag_t c_lflag; /* local modes 本地模式标志*/unsigned char c_line; /*线路规则*/unsigned cahr c_cc[NCCS]; /* special characters 控制字*/};
4.termios.h头文件为termios结构提供了一组设置的函数
int tcgetattr(int fd, struct termios *termios_p); //读取串口的参数设置
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p); //设置指定串口的参数
参数说明:fd:指向已打开的串口设备句柄
termious_p:指向存放串口参数的termios结构首地址。
optional_actions:指定参数什么时候起作用:TCSANOW表示立即生效;TCSADRAIN表示在fd上所有的输出都被传输后生效;TCSAFLUSH表示所有引用fd对象的数据都在输出后生效
int tcsendbreak(int fd, int duration); //传送连续的0值比特流,持续一段时间。
int tcdrain(int fd); //函数会等待直到所有写入fd引用对象的输出都被传输。如果终端未使用异步串行数据传输,tcsendbreak()函数什么都不做
int tcflush(int fd, int queue_selector); //函数丢弃要写入引用的对象但是尚未传输的数据,或者收到但是尚未读取的数据,取决与参数queue_selector的值
int tcflow(int fd, int action); //函数挂起fd引用对象上的数据传输或接受,取决于action的值
speed_t cfgetispeed(const struct termios *termios_p); //用来得到串口的输入速率
speed_t cfgetospeed(const struct termios *termios_p); //用来得到串口的输出速率, 返回值是speed_t类型的值,其取值及含义如下:
B0:波特率0bit/s B9600:波特率9600bit/s 波特率和通信距离是反比关系。
int cfsetispeed(struct termios *termios_p, speed_t speed); //用来设置串口的输入速率
int cfsetospeed(struct termios *termios_p, speed_t speed); //用来设置串口的输出速率 参数speed是要设置的波特率termios结构相关的函数,除cfgetispeed和cfgetospeed函数外,其他函数返回0表示执行成功,返回-1表示失败,并且设置全局变量errno提示:在linux串口编程实例中,都没有对termios结构的c_iflag成员做有效设置,在传输ASCII码时不会有问题,如果传输二进制数据就会遇到麻烦,比如0x0d、0x11、0x13数据会被丢掉,因为他们是关键字符,
如果不特别设置一下,他们会被当做控制字符处理掉。设置关闭ICRNL和IXON参数可以解决。
c_iflag &= ~(ICRNL | IXON);
Linux串口通信编程相关推荐
- 树莓派与电脑之间的串口通信编程
树莓派与电脑之间的串口通信编程 数据通信的三个方式介绍 单工通信 半双工通信 全双工通信 串口通信 编程步骤 数据通信的三个方式介绍 单工通信 只支持数据在一个方向上传输,又称为单向通信.如无线电广播 ...
- 用python实现串口通信编程
实现串口通信编程,需要使用到第三方库 pyserial. 下面是一个简单的示例代码: import serialser = serial.Serial("COM3", 9600)w ...
- 树莓派和电脑之间串口通信编程
目录 一.串口通信协议 1.先了解下全双工和半双工的区别 2.串口通信关注点 二.树莓派和电脑之间串口通信编程 1.初次使用树莓派串口编程,需要配置 2.串口通信相关的API (1)serialOpe ...
- VC串口通信编程-2
VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...
- C#中串口通信编程 收藏
C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...
- Visual C++串口通信编程---多线程异步方式
Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式. 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占 ...
- 单片机与PC机串口通信编程
单片机与PC机串口通信编程 实验目的 利用PROTUES仿真软件.串口调试助手.虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法. 实验目的 1.PROTUES仿真软件 ...
- C#上位机开发串口通信编程——倒计时器开发
C#上位机开发串口通信编程--倒计时器开发 一.介绍 这是我按照B站上的一个上位机开发视频教程开发的倒计时器开发,本来只有开始计时功能,没有停止计时功能,停止计时功能后面我自己添加了. 视频网址:C# ...
- STC系列芯片的串口通信编程
STC系列芯片的串口通信编程 本人使用的是基于STC15F2K60S2芯片的开发板. 开发板上有关串口通讯的有:TMOD(定时器寄存器).CSON(串口通信寄存器).PCON(开发板电源控制寄存器)以 ...
- MFC 串口通信编程
本篇文章主要介绍了"RS-232/RS-485/RS-422 接口简介与编程",主要涉及到RS-232/RS-485/RS-422 接口简介与编程方面的内容,对于RS-232/RS ...
最新文章
- windows系统杀掉explorer.exe进程后黑屏
- asn1学习笔记 约束
- vue样式 引入图片_详解Vue.js中引入图片路径的几种方式
- java常见不可变类_Java语言不可变类的诀窍
- getaway网关转发去前缀_为什么微服务一定要有网关?
- Processing绘制四边形
- 枚举类 - Java面向对象编程
- CodeForces - 1301F Super Jaber(bfs)
- 我的计算机专业作文800字,我家的电脑作文800字
- docx命令运行Java_使用Java将DOC文件转换为DOCX
- 用python祝福父亲节_父亲节给爸爸的祝福语微信48条
- Qt文档阅读笔记-对Style Plugin Example实例的解析
- Shell数值及字符串比较
- TX2Ubuntu16.04远程登录
- 一个北京妞儿写的经典的话,太现实了!
- Oracle学习——dmp文件(表)导入与导出
- 中文手机评论情感分类系列(三)
- 中望3D 2020 图层管理器(图层的设置+移动图层+复制图层)
- Android接收读取短信内容
- vue_按需引入elment、echarts和路由懒加载,减少打包体积
热门文章
- 《别闹了,费曼先生》1
- 安全bios手册(5)
- KEPServerEX V6轻松连接Wonderware InTouch
- JSP旅游景点网站系统myeclipse开发计算机程序web结构java编程网页源码
- 经营生鲜便利店的超级产品战略,盘点那些靠卖菜抢占社区的便利店
- 手机型号JSON数据
- 腾讯无线副总李颖:腾讯QQ游戏无线平台将亮相长城会
- Android获取百度网盘路径,百度网盘秒传链接生成和提取方法教程
- 163邮箱链接服务器失败是怎么回事,outlook邮箱添加163邮箱账户失败该怎么办?...
- 向量对矩阵列空间的投影_向量(阵列)处理和超标量处理器