程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#串口編程遇到的問題以及解決方法

C#串口編程遇到的問題以及解決方法

編輯:C#入門知識

 最近在做的項目中涉及到串口通信編程,隊友在做這一模塊的時候遇到了一個相信很多人都可能遇到的問題,那就是接受數據的沖突或者丟失。隊友讓我幫他調試的時候,足足花了近兩個小時才把問題給解決了,現覺得有必要總結一下以給遇到類似問題的朋友一個思路吧~

      問題是這樣的,從相應的硬件設備每隔2秒便發送一個大小為15的字節數據,存的是16進制數據,每條數據以7E開頭以7E結尾。例如:7E 09 01 1A ... 7E。但是PC端在接受顯示的時候卻出現了問題,如前五個數據接受正常,接下來的都是以00填充,而剩下的10個數據卻出現在下條數據顯示的位置。如下所示: 

      7E 09 01 1A 5C 00 00 00 00 00 00 00 00 00 00 /////// 03 06 1A 2C 3D 09 6C 32 12 7E 00 00 00 00 00 00/////// ........

      總之感覺錯位了,對了,先把PC端代碼貼一下吧:      

     


public partial class Form1 : Form
    {
        /// <summary>
        /// 接受數據的串口類 
        /// </summary>
        SerialPort spReceive;
        delegate void ReceivData(byte[] bytes);

        public Form1()
        {
            Form1.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
          
            spReceive =new SerialPort("COM5", 57600, Parity.None, 8, StopBits.One);             
            spReceive.Open();
            
            //設置觸發DataReceived事件的閥值,在調試中發現這個不起作用,不解~      
            spReceive.ReceivedBytesThreshold =15;            
            spReceive.DataReceived +=new System.IO.Ports.SerialDataReceivedEventHandler(spReceive_DataReceived);            
        }

        /// <summary>
        /// 更新接受到得數據到UI界面顯示
        /// </summary>
        /// <param name="bytes"><

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved