.NET 串口通信中斷接收,包含0X1A(作為EOF)


.NET串口通信中將`0X1A`當做EOF處理,.NET接收到EOF會觸發一次接收中斷,此時事件形參`SerialDataReceivedEventArgs`值為枚舉 `Eof`,其他為`Chars`。

參考: stackoverflow 、MSDN

## 測試

.NET編程,中斷方式接收,發送一串數據后等待回應,打印進中斷次數;另外一端用串口助手來實現。通信用虛擬串口。

 [TestClass]
    public class EofByteSerialTest
    {
        private int _count = 0;
        private byte[] _receivedDataPacket;
        SerialPort _serialPort = new SerialPort()
        {
            PortName = "COM5",
            BaudRate = 115200,
            DataBits = 8,
            StopBits = StopBits.One,
            Parity = Parity.None
        };
        [TestMethod]
        public void TestMethod1()
        {
            _serialPort.Open();
            byte[] sendedData = { 0x01, 0x02, 0x03, 0x1a, 0x2a, 0x1a };
            _serialPort.DataReceived += ComReceive;
            _serialPort.Write(sendedData, 0, sendedData.Length);
            Thread.Sleep(10000);
            //foreach (byte b in _receivedDataPacket)
            //{
            //    Console.WriteLine(b);
            //}
            Console.WriteLine(_count);
        }
        private void ComReceive(object sender, SerialDataReceivedEventArgs e)
        {
            //if (e.EventType == SerialData.Eof)
            //{
            //    //特殊處理
            //}
            _count++;
            _receivedDataPacket = new byte[_serialPort.BytesToRead];
            _serialPort.Read(_receivedDataPacket, 0, _receivedDataPacket.Length);
            // 協議解析...
        }
    }

 串口助手數據:

 

測試結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM