VS2008 Express のフォーム ベースのプログラムを使用して、SerialDataReceivedEventHandler をセットアップしました。私のシリアルポートは次のように設定されています:
115200、8N1
Dtr と Rts が有効
ReceivedBytesThreshold = 1
BlueTooth、USB to Serial 経由で接続しているデバイスがあります。ハイパー ターミナルは、任意のデータ レートで問題なくデータを受信します。データは、22 バイト長のパケットで定期的に送信されます。このデバイスは、データの送信速度を調整できます。低いデータ レート (10 ~ 20 Hz) では、以下のコードはうまく機能し、問題はありません。ただし、データ レートを 25 Hz を超えて上げると、1 回の通話で複数のパケットを受信し始めます。これが意味することは、着信パケットごとにイベント トリガーが存在する必要があるということです。より高い出力レートで、イベントが呼び出されたときにバッファー サイズ (BytesToRead コマンド) をすぐにテストし、バッファーに複数のパケットが存在するようにしました。イベントがゆっくりと発生し、コードに到達するまでに、より多くのパックがバッファーにヒットしたと思います。私が行っているテストの 1 つは、1 秒間にイベントがトリガーされる回数を確認することです。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);
}