串口

作者: 遇银 | 来源:发表于2020-03-05 09:02 被阅读0次

open函数

#include<fcntl.h>
int open(const char *pathname,int oflag,...);

参数解释:
pathname:文件路径名,串口在linux被看成文件
oflag:文件模式

- O_RDONLY只读模式
- O_WRONLY只写模式
- O_RDWR读写模式

上面三个参数在设置时必须选择一个,下面是可选的

- O_APPEND每次写操作都写入文件的末尾
- O_CREAT如果指定文件不存在,则创建这个文件
- O_EXCL如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
- O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
- O_NOCTTY如果路径名指向终端设备,不要把这个设备用作控制终端。
- O_NONBLOCK如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)

下面三个变量同样是选用

- O_DSYNC等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。
- O_RSYNC读(read)等待所有写入同一区域的写操作完成后再进行
- O_SYNC等待物理 I/O 结束后再 write,包括更新文件属性的 I/O

对于串口的打开操作,必须使用O_NOCTTY参数,它表示打开的是一个终端设备,程序不会成为该端口的控制终端。如果不使用此标志,任务的一个输入(比如键盘终止信号等)都会影响进程。

阻塞的定义:
- 对于read,block指当串口输入缓冲区没有数据的时候,read函数将会阻塞在这里,一直到串口输入缓冲区中有数据可读取,read读到了需要的字节数之后,返回值为读到的字节数,然后整个程序才继续运行下去;(收)

   - 对于write,block指当串口输出缓冲区满,或剩下的空间小于将要写入的字节数,则write将阻塞,一直到串口输出缓冲区中剩下的空间大于等于将要写入的字节数,执行写入操作,返回写入的字节数,然后整个程序才继续运行下去。(发)

非阻塞的定义:
- 对于read,no block指当串口输入缓冲区没有数据的时候,read函数立即返回,返回值为0。

  -  对于write,no block指当串口输出缓冲区满,或剩下的空间小于将要写入的字节数,则write将进行写操作(不会等待在这里),写入当前串口输出缓冲区剩下空间允许的字节数,然后返回写入的字节数。

控制方法:
一是在打开串口的时候,open函数是否带O_NDELAY;

阻塞:fd = open(devname, O_RDWR | O_NOCTTY);
非阻塞:fd = open(devname, O_RDWR | O_NOCTTY | O_NDELAY);

二是可以在打开串口之后通过fcntl()函数进行控制

阻塞:fcntl(fd,F_SETFL,0)
非阻塞:fcntl(fd,F_SETFL,FNDELAY) 

相关文章

  • Android串口通讯

    串口通讯的步骤: 1.打开串口。 2.串口处于监听状态 3.想串口写入数据,串口接收到数据返回数据 串口的一个基本...

  • 关于串口格式与报文格式

    《串口硬件分类》中已经说明了几种串口的类型,并在《串口通信协议》中说明了几种串口协议形式,这里就常用的串口协议进一...

  • 树莓派串口通信

    树莓派的串口默认为串口终端调试使用,如要正常使用串口则需要修改树莓派设置。关闭串口终端调试功能后则不能再通过串口登...

  • 串口编程

    串口连接界面 主要控件 打开串口 自动获取串口列表并显示 初始化串口 写入卡片 插入打卡记录并显示打卡成功

  • Android平台的串口通信技术

    概念 串口通信 概念;串口通信(Serial Communications)按位(bit)发送和接收字节。串口可以...

  • 使用socat虚拟串口

    1、下载socat 2、虚拟串口 3、使用串口 根据步骤2创建的串口名称链接串口、2步骤进程需一直开启

  • 嵌入式开发 - GDB串口远程调试

    1. 准备调试串口 目标板一般只有一个串口用于控制台输入输出,串口远程调试需要第二个串口。下面假设这个串口设备是/...

  • OPENWRT串口通信的实现

    串口设置 开机启动信息可以看到串口的名称,例如以下串口启动信息: 可以看到串口的名称为ttyATH0,此时可以ls...

  • Arduino 软串口

    软串口 软串口就是通过将开发板的串口,映射到普通IO上作为串口使用 接线图 RXTXD10D11 代码

  • 2018-10-09 Mac的Terminal窗口之TTY

    PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC,是usb口转串口的是ttyUSB,外插串口...

网友评论

      本文标题:串口

      本文链接:https://www.haomeiwen.com/subject/zmlblhtx.html