0

所以我正在与设备交谈,TX 和 RX 引脚实际上在内部连接在一起。当我向设备发送数据时,我看到我的SerialPort.DataReceived事件正在接收相同的数据。

我只想在发送数据后触发此事件。
我尝试在发送数据之前简单地取消订阅,然后SerialPort.Write调用一次订阅,但是写入函数看起来是在一个单独的线程中处理的,所以我仍然会收到数据,因为订阅会立即发生。

看起来没有我可以用来订阅的“DataSendComplete”类型的事件。有任何想法吗?

编辑:我尝试添加

if (serialPort.BytesToWrite != 0)
            return;   

但是我猜在事件触发时所有的数据都已经发送了。

4

1 回答 1

1

没有办法可靠地做到这一点,你不可能得到正确的时机。驱动程序将数据从传输缓冲区物理传输到 UART 的确切时间以及 UART 传输 FIFO 中字节的确切时间无法在用户模式程序中确定。只有司机可以试一试,它没有这个选项。

您需要寻找一个选项来关闭设备中的回声,如果该设备使用 Hayes 命令集,则需要使用 ATE0 命令。或者只是丢弃您在 DataReceived 事件处理程序中发送的字节数。

于 2013-01-23T21:07:12.033 回答