串口通信DTR/DSR和RTS/CTS是什么

关键信号解释

信号方向作用
DTR(Data Terminal Ready,数据终端就绪)主机→设备输出主机就绪信号
DSR(Data Set Ready,数据设备就绪) 设备→主机输入设备就绪信号
RTS(Request to Send,请求发送) 主机→设备输出请求发送数据
CTS(Clear to Send,清除发送) 设备→主机输入允许发送数据

信号协作流程

设备握手阶段 :主机先拉高 DTR,设备检测到后拉高 DSR,完成初始握手。

传输控制阶段 :主机拉高 RTS 请求发送数据,设备准备好后拉高 CTS,主机收到后开始发送数据。(RTS高 && CTS高 时允许发送)

主机 设备 置位DTR(高电平) ->> 声明主机就绪 置位DSR(高电平) ->> 反馈设备就绪 置位RTS(高电平) ->> 请求发送数据 置位CTS(高电平) ->> 允许发送 发送数据包 数据接收完成后,CTS置低(暂停) 检测到CTS低电平,暂停发送 缓冲区空,重新置位CTS(恢复传输) 主机 设备

使用示例

DCB dcb = {0};
dcb.DCBlength = sizeof(DCB);
GetCommState(hPort, &dcb);

// DTR/DSR 配置
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; // 自动握手
dcb.fOutxDsrFlow = TRUE;                 // 启用DSR流控

// RTS/CTS 配置
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; // 自动流控
dcb.fOutxCtsFlow = TRUE;                 // 启用CTS流控

SetCommState(hPort, &dcb);

// 如需强制置位信号(如设备无自动握手支持)
EscapeCommFunction(hPort, SETRTS); // 强制拉高RTS
EscapeCommFunction(hPort, SETDTR); // 强制拉高DTR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值