串口通信 DTR DSR RTS CTS

串口通信可以连接两个设备, 当使用9芯线路时: 1) 地(GND)   2)接受数据(RX data) 3)传输数据 (TX data) 4) 数据终端准备(DTR)  5) GND  6)数据准备 (DSR) 7) 请求发送(RTS)    8)允许发送(CTS)  9)振铃指示(RI)

我举 PC 和Modem之间的通信为例子:

RTS/CTS 提供的是一种PC 和Modem 之间控制数据流的方法,当Modem 准备接收数据时, 使CTS为ON(1), 当Modem 不能接收更多数据时, 使CTS为OFF(0), 类似的, 当PC 可以接收数据时,RTS 为ON (1),   不能接收数据时,RTS 为OFF(0). DTR/DSR : PC开启DTR信号告诉MODEN, PC 机已经准备通信, Modem通常开启DSR来应答,让PC机知道 Modem 准备应答.

RTS/CTS 属于是硬件流量控制, 而XON/XOFF则是软件流量控制。

XON/XOFF分别对应于(Ctrl-q)和(Crtl-s)字符,如果你选择软件流量控制,你的Modem 将不能传递Ctrl-q 和 Crtl-s字符,因为这些字符被解释成为流控请求。

  DCD  :载波检测。主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音, 处于在线状态。 
  RXD  :此引脚用于接收外部设备送来的数据;在你使用Modem时,你会发现RXD指示灯在闪烁,说明RXD引脚上有数据 进入。
  TXD  :此引脚将计算机的数据发送给外部设备;在你使用Modem时,你会发现TXD指示灯在闪烁,说明计算机正在通过TXD引脚发送数据。 
  DTR  :数据终端就绪;当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。
  GND  :信号地;此位不做过多解释。 
  DSR  :数据设备就绪;此引脚高电平时,通知计算机Modem已经准备好,可以进行数据通讯了。 
  RTS  :请求发送;此脚有计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。 
  CTS  :清除发送;此脚由Modem控制,用以通知计算机将欲传的数据送至Modem。 
  RI   :Modem通知计算机有呼叫进来,是否接听呼叫由计算机决定

### 如何在串口通信中配置DTRRTS引脚 #### 配置方法概述 对于串口通信中的DTR(Data Terminal Ready)和RTS(Request to Send),其配置主要依赖于操作系统所提供的API以及编程语言的支持库。通常情况下,这些参数可以在打开串口连接时通过特定函数或对象属性来设定。 #### Python 中的 PySerial 库示例 Python 的 `pyserial` 是一个广泛使用的处理串行端口操作的第三方模块,可以方便地管理包括 DTRRTS 在内的多个信号线状态。下面是一个简单的例子展示怎样设置这两个引脚: ```python import serial ser = serial.Serial( port='/dev/ttyUSB0', # 替换为实际使用的串口号 baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) # 设置 DTR 为高电平(True) ser.dtr = True # 或者设置 DTR 为低电平(False) ser.dtr = False # 同样地,可以通过 ser.rts 来控制 RTS 引脚的状态 ser.rts = True ``` 上述代码片段展示了如何利用 pyserial 库初始化串口并分别设置了 DTRRTS 的初始状态[^3]。 #### Linux 下使用 stty 命令行工具 除了编程方式外,在Linux系统上还可以借助命令行工具如stty来进行快速配置: ```bash # 将指定串口设备(/dev/ttyUSB0)上的DTR设为激活态 stty -F /dev/ttyUSB0 crtscts # 关闭自动硬件流控(DTR/DSR & RTS/CTS) stty -F /dev/ttyUSB0 -crtscts ``` 这里 `-F` 参数指定了要修改的目标串口文件路径,而 `crtscts` 则表示启用基于 RTS/CTS 的硬件握手协议;去掉该选项意味着禁用这种类型的流量控制机制[^2]。 #### Windows 平台下使用 C++ API 进行更底层的操作 如果是在Windows环境下开发应用程序,则可以直接调用 Win32 API 函数 SerialComm.h 中的相关功能完成同样的任务。例如,使用 EscapeCommFunction() 函数可改变 DTR 状态: ```cpp #include <windows.h> // ...其他必要的头文件... HANDLE hCom; // 已经成功打开了某个COM端口后的句柄 DWORD dwFunc; dwFunc = SETDTR; EscapeCommFunction(hCom, dwFunc); // 设置DTR为高电平 dwFunc = CLRDTR; EscapeCommFunction(hCom, dwFunc); // 清除DTR,使其变为低电平 ``` 同样地,也可以针对 RTS 使用 SERCLRT 和 SERTXD 功能码来切换高低电平[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值