COM 串口程序设计 Tel:
概述 串口概述 串行接口 串行接口简称串口,也称串行通信接口(在 Windows 下常被称为 COM 口),是采用串行通信 方式的扩展接口。 串行接口是指数据一位位地顺序传送,其特点 是通信线路简单,只要一对传输线就可以实现双 向通信,从而大大降低了成本。适合远距离通信, 但传输速度慢。串行通信的距离可以从几米到几 千米。
概述 串口概述 工作模式 – 分为单工 – 半双工 – 全双工三种。 串口标准 串行接口通常按电气标准及协议来划分 –RS-232-C –RS-422 –RS-485
概述 串口概述 RS-232 也称标准串口,是最常用的一种串行通讯接口标准。传 统的 RS-232 接口采用标准 25 芯 D 型插座( DB25 ),现在 普遍使用的是标准 9 芯 D 型插座( DB9 )
概述 串口概述 RS-485 RS-485 最大的通信距离约为 1219 米,最大传输速率为 10M/s ,传输速率与传输距离成反比。如果需要传输更长 的距离,需要增加 485 中继器。常用的 485 接口采用标准 9 芯插座( DB9 )。 串口数据传输 串口数据的一帧包括起始位、数据位、奇偶校验位、停止 位组成。开始前,线路处于空闲状态 ( 高电平 ) ,传送开始时首 先发送一个起始位 (0) ,然后是数据位 (5/6/7/8) ,紧跟着是奇偶 校验位 ( 也可以没有 ) ,最后是停止位 ( 可以是 1 位、 1.5 位或 2 位 ) 。 至此一帧传送完毕,线路重回空闲状态 。
概述 计算机科学技术系 串口概述
概述 串口概述 串口配置参数 –Linux 串口设备 Linux 中的串口设备文件存放于 /dev 目录下,串口的设备 名为 ttyS0 、 ttyS1… ,分别对应物理串口 1 ,串口 2 等。 – 串口操作 串口操作包括以下几个部分:数据发送、数据接收、产生 中断、产生波特率、 Loopback 模式、红外模式、自动流控 模式等。 – 串口参数 串口参数的配置主要包括:波特率、数据位、停 止位、奇偶校验位、流控协议等。
概述 串口数据结构 基本结构 #include struct termios{ unsigned short c_iflag; // 输入模式标志 unsigned short c_oflag; // 输出模式标志 unsigned short c_cflag; // 控制模式标志 unsigned short c_lflag; // 本地模式标志 unsigned char c_line; // 行标识 unsigned char c_cc[NCC]; // 控制字符 }; 在串口结构中,最重要的是 c_cflag ,通过对它赋值,可以设置 波特率、数据位、停止位、奇偶校验位等串口属性。
串口数据结构 c_cflag 参数项含义 CCTS_OFLOW 输出的 CTS 流控制 CIGNORE 忽略控制标志 CLOCAL 忽略调制 - 解调器状态 CREAD 启用接收装置 CRTS_IFLOW 输入的 RTS 流控制 CSIZE 字符大小屏蔽 CSTOPB 送两个停止位,否则为 1 位 HUPCL 最后关闭时断开 MDMBUF 经载波的流控输出 PARENB 进行奇偶校验 PARODD 奇校验,否则为偶校验
串口数据结构 c_iflag INPCK 奇偶校验使能 IGNPAR 忽略奇偶校验错误 PARMRK 奇偶校验错误掩码 ISTRIP 除去奇偶校验位 IXON 启动出口硬件流控 IXOFF 启动入口软件流控 IXANY 允许字符重新启动流控 IGNBRK 忽略中断情况 BRKINT 当发生中断时发送 SIGINT 信号 INLCR 将 NL 映射到 CR IGNCR 忽略 CR ICRNL 将 CR 映射到 NL IUCLC 将高位情况映射到低位情况 IMAXBEL 当输入太长时回复 ECHO
概述 计算机科学技术系 串口设置 设置串口属性主要就是配置 termios 结构体中的各个变 量,其主要流程包括以下几个步骤: 使用函数 tcgetattr 保存原串口属性; 通过位掩码的方式激活本地连接和接受使能选项: CLOCAL 和 CREAD ; 使用函数 cfsetispeed 和 cfsetospeed 设置数据传输率; 通过位掩码设置字符大小; 设置奇偶校验:首先要激活 c_cflag 中的校验位使能标志 PARENB 和是否要进行偶校验,同时还要激活 c_iflag 中 的奇偶校验使能; 激活 c_cflag 中的 CSTOP 设置停止位,若停止位为 1 ,则 清除 CSTOP ,若停止位为 0 ,则激活 CSTOP ;
概述 计算机科学技术系 串口设置 设置最少字符和等待时间,在对接受字符和等待时 间没有特别要求的情况下,可以将其设置为 0 ; 调用函数 tcflush(fd,queue_selector) 来处理要写入引 用的对象, queue_selector 可能的取值有以下几种: TCIFLUSH :刷新收到的数据但是不读 TCOFLUSH :刷新写入的数据但是不传送 TCIOFLUSH :同时刷新收到的数据但是不读,并 且刷新写入的数据但是不传送; 下面给出串口配置的通用函数,函数名 set_opt
概述 计算机科学技术系 串口设置 串口使用详解 在配置完串口的相关属性后,就可以对串口进行打 开、读写操作了。它所使用的函数和普通的文件系 统调用一样,只是参数会有所区别,具体如下: 打开串口 打开串口时,传递给 open 函数的 flag 参数需要两个 模式选项, O_NOCTTY,O_NDELAY fd=open(“/dev/ttyS0”,O_RDWR|O_NOCTTY|O_NDELAY); O_NOCTTY 标志用于通知 Linux 操作系统这个程序 不会成为对应这个端口的控制终端,如果没有指定 这个标志,那么任何一个输入(诸如键盘中止信号 等)都将影响用户的进程。
概述 计算机科学技术系 串口设置 O_NDELAY 标志通知 Linux 系统这个程序不关心 DCD 信号线所 处的状态(端口另一端是否激活或停止)。如果用户指定了这 个标志,则进程将会一直处于睡眠态,直到 DCD 信号线被激活。 接下来可恢复串口的状态为阻塞状态,用于等待串口数据的读 入,可用 fcntl 函数实现,如下: fcntl(fd,F_SETFL,0); 再接着可以测试打开的文件描述符是否引用一个终端设备,以 进一步确认串口是否正确打开,如下: isatty(STDIN_FILENO); 如果测试成功,表示串口成功打开,这时就可以对串口进行读 写操作了。
概述 计算机科学技术系 读写串口 读写串口和读写普通文件一样,使用 read 、 write 函数即可,如下所示: write(fd,buff,8); read(fd,buff,8); 串口设置
概述 开关量操作 开关量 – 用 0 、 1 两种状态表示的物理量,可用于采集数 据或用来驱动电路。 – 开关量控制两种常见方式 通过寄存器控制 开关量数据少,可在主板上实现 通过总线访问寄存器,寄存器中的某个位用于开关量的控制。 通过接口板控制 通过专有的接口板进行采集和控制,可以控制多个开关量。 控制器通过串口与接口板进行通信。
概述
结 束