Serial port RS232握手-具体发生了什么?

Serial port RS232握手-具体发生了什么?,serial-port,Serial Port,当RTS或CTS线路的状态发生变化时,有人能与我分享RS232通信中到底发生了什么(或打算发生什么…)的信息吗 我正在开发一个应用程序,其中PC通过Qt的QextSerialPort库与串行端口接口,与Atmel AVR微控制器通信。微控制器有时必须做一些事情(检查ADC、时间精确间隔等),这需要它禁用内部中断,从而暂时关闭UART端口。我使用RTS/CTS握手,这样AVR就可以在即将关闭端口时通过将RTS线路调高向PC发送信号,并通过再次将RTS调低向PC发送重新打开端口的信号 基本上,这个功

当RTS或CTS线路的状态发生变化时,有人能与我分享RS232通信中到底发生了什么(或打算发生什么…)的信息吗

我正在开发一个应用程序,其中PC通过Qt的QextSerialPort库与串行端口接口,与Atmel AVR微控制器通信。微控制器有时必须做一些事情(检查ADC、时间精确间隔等),这需要它禁用内部中断,从而暂时关闭UART端口。我使用RTS/CTS握手,这样AVR就可以在即将关闭端口时通过将RTS线路调高向PC发送信号,并通过再次将RTS调低向PC发送重新打开端口的信号


基本上,这个功能很好,但我仍然不清楚如果RTS设置为高,而在两个方向传输的中途有一个字节,会发生什么。在AVR端,我可以在非常低的级别上控制事情,但在PC端,我只是将QextSerialPort置于硬件流控制模式,这使得它可以执行底层Windows函数所执行的任何操作。我想知道这里的行为不匹配是否可以解释我在传输过程中偶尔遇到的小故障。

AFIAK,RTS行不应该在字节传输期间断言,只能在字符之间的“空闲时间”内断言


问题是,握手几乎从未正确实现。Windows应该符合标准(或wikipedia条目),但我不能确认这一点。

AFIAK,RTS行不应该在字节传输期间断言,只能在字符之间的“空闲时间”内断言


问题是,握手几乎从未正确实现。Windows应该符合标准(或维基百科条目),但我不能确认这一点。

不,这很麻烦。RTS/CTS握手由驱动程序实现,而不是UART。当CTS关闭时,它只是停止向变送器FIFO写入字节。你将有字节在飞行中,加上FIFO中仍然可以传输的任何内容。如果接收器FIFO不够大,中断关闭时间过长,这肯定会出错。PC端的FIFO通常为16字节,具体取决于硬件。我不知道AVR,你没有提到模型


请确保在AVR端执行缓冲区溢出检查,以诊断此类故障。降低波特率是一种廉价的解决办法。

不,这很麻烦。RTS/CTS握手由驱动程序实现,而不是UART。当CTS关闭时,它只是停止向变送器FIFO写入字节。你将有字节在飞行中,加上FIFO中仍然可以传输的任何内容。如果接收器FIFO不够大,中断关闭时间过长,这肯定会出错。PC端的FIFO通常为16字节,具体取决于硬件。我不知道AVR,你没有提到模型


请确保在AVR端执行缓冲区溢出检查,以诊断此类故障。降低波特率是一个廉价的解决办法。

这很有启发性,谢谢;我不知道当CTS上升时USART仍在工作,我假设它只是在轨道上停止了(或者最多在传输当前字节后停止)。这也许可以解释我偶尔看到的一些其他奇怪的效果,尽管可能不是我现在正在研究的那个;我不知道当CTS上升时USART仍在工作,我假设它只是在轨道上停止了(或者最多在传输当前字节后停止)。这也许可以解释我偶尔看到的一些其他奇怪的效果,尽管可能不是我现在正在研究的那个。