我在 VS2008 express 中设置了一个基于表单的程序的 SerialDataReceivedEventHandler。我的串口设置如下:
115200, 8N1
启用 Dtr 和 Rts
ReceivedBytesThreshold = 1
我有一个通过蓝牙、USB 转串口连接的设备。超级终端以任何数据速率接收数据都很好。数据以 22 字节长的数据包定期发送。该设备具有可调节的数据发送速率。在 10-20Hz 的低数据速率下,下面的代码运行良好,没有问题。但是,当我将数据速率提高到 25Hz 以上时,一个呼叫开始接收多个数据包。我的意思是每个传入的数据包都应该有一个事件触发器。使用更高的输出速率,我在调用事件时立即测试了缓冲区大小(BytesToRead 命令),然后缓冲区中有多个数据包。我认为事件触发得很慢,当它到达代码时,更多的包已经到达缓冲区。我做的一项测试是查看每秒触发事件的次数。在 10Hz 时,我得到了 10 个事件触发器,太棒了。在 100Hz 时,我得到了 40 个事件触发器,并不好。我的数据速率目标是可以接受 100Hz,首选 200Hz,最佳 300Hz。这应该可以工作,因为即使在 300Hz 下,也只有 52800bps,不到设置的 115200 波特率的一半。有什么我在看的吗?
public Form1()
{
InitializeComponent();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(Display_Results));
}
private void Display_Results(object s, EventArgs e)
{
serialPort1.Read(IMU, 0, serial_Port1.BytesToRead);
}