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串口通信编程相关推荐

  1. 树莓派与电脑之间的串口通信编程

    树莓派与电脑之间的串口通信编程 数据通信的三个方式介绍 单工通信 半双工通信 全双工通信 串口通信 编程步骤 数据通信的三个方式介绍 单工通信 只支持数据在一个方向上传输,又称为单向通信.如无线电广播 ...

  2. 用python实现串口通信编程

    实现串口通信编程,需要使用到第三方库 pyserial. 下面是一个简单的示例代码: import serialser = serial.Serial("COM3", 9600)w ...

  3. 树莓派和电脑之间串口通信编程

    目录 一.串口通信协议 1.先了解下全双工和半双工的区别 2.串口通信关注点 二.树莓派和电脑之间串口通信编程 1.初次使用树莓派串口编程,需要配置 2.串口通信相关的API (1)serialOpe ...

  4. VC串口通信编程-2

    VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...

  5. C#中串口通信编程 收藏

    C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...

  6. Visual C++串口通信编程---多线程异步方式

    Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式. 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占 ...

  7. 单片机与PC机串口通信编程

    单片机与PC机串口通信编程 实验目的 利用PROTUES仿真软件.串口调试助手.虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法. 实验目的 1.PROTUES仿真软件 ...

  8. C#上位机开发串口通信编程——倒计时器开发

    C#上位机开发串口通信编程--倒计时器开发 一.介绍 这是我按照B站上的一个上位机开发视频教程开发的倒计时器开发,本来只有开始计时功能,没有停止计时功能,停止计时功能后面我自己添加了. 视频网址:C# ...

  9. STC系列芯片的串口通信编程

    STC系列芯片的串口通信编程 本人使用的是基于STC15F2K60S2芯片的开发板. 开发板上有关串口通讯的有:TMOD(定时器寄存器).CSON(串口通信寄存器).PCON(开发板电源控制寄存器)以 ...

  10. MFC 串口通信编程

    本篇文章主要介绍了"RS-232/RS-485/RS-422 接口简介与编程",主要涉及到RS-232/RS-485/RS-422 接口简介与编程方面的内容,对于RS-232/RS ...

最新文章

  1. windows系统杀掉explorer.exe进程后黑屏
  2. asn1学习笔记 约束
  3. vue样式 引入图片_详解Vue.js中引入图片路径的几种方式
  4. java常见不可变类_Java语言不可变类的诀窍
  5. getaway网关转发去前缀_为什么微服务一定要有网关?
  6. Processing绘制四边形
  7. 枚举类 - Java面向对象编程
  8. CodeForces - 1301F Super Jaber(bfs)
  9. 我的计算机专业作文800字,我家的电脑作文800字
  10. docx命令运行Java_使用Java将DOC文件转换为DOCX
  11. 用python祝福父亲节_父亲节给爸爸的祝福语微信48条
  12. Qt文档阅读笔记-对Style Plugin Example实例的解析
  13. Shell数值及字符串比较
  14. TX2Ubuntu16.04远程登录
  15. 一个北京妞儿写的经典的话,太现实了!
  16. Oracle学习——dmp文件(表)导入与导出
  17. 中文手机评论情感分类系列(三)
  18. 中望3D 2020 图层管理器(图层的设置+移动图层+复制图层)
  19. Android接收读取短信内容
  20. vue_按需引入elment、echarts和路由懒加载,减少打包体积

热门文章

  1. 《别闹了,费曼先生》1
  2. 安全bios手册(5)
  3. KEPServerEX V6轻松连接Wonderware InTouch
  4. JSP旅游景点网站系统myeclipse开发计算机程序web结构java编程网页源码
  5. 经营生鲜便利店的超级产品战略,盘点那些靠卖菜抢占社区的便利店
  6. 手机型号JSON数据
  7. 腾讯无线副总李颖:腾讯QQ游戏无线平台将亮相长城会
  8. Android获取百度网盘路径,百度网盘秒传链接生成和提取方法教程
  9. 163邮箱链接服务器失败是怎么回事,outlook邮箱添加163邮箱账户失败该怎么办?...
  10. 向量对矩阵列空间的投影_向量(阵列)处理和超标量处理器