串口通信
SerialPort類
SerialPort sp = new SerialPort("COM1"); 或者 SerialPort sp = new SerialPort();sp.PortName = "COM1";
這兩種寫法是等效的;獲得串口“COM1”的操作權,就是創建一個SerialPort對象,然後對象的屬性PortName初始化為指定的串口名“COM1”,即可用該對象操作串口“COM1”,如:設置串口的通信參數,打開串口,發送數據,接收數據,關閉串口等;
SerialPort類的重要屬性:
(1)PortName
賦予哪個串口名字,就是操作哪個串口;
(2)DataBits
數據位的位數,有7,8,9三種情況,計算機編程語言認為8bit為一個字節,所以一般我們用8bit做為一幀數據幀的數據部分,這樣數據幀到達接收方,接收方解析一個數據幀提取出數據位即是一個字節;
(3)Parity
奇偶校驗的方式,Parity.Even 奇校驗;Parity.Odd 偶校驗;Parity.None 不校驗;不校驗數據幀,能增加傳輸數據的效率,但是通信的可靠性降低;
(4)StopBits
停止位的位數,StopBits.One StopBits.OnePointFive Two 指的是停止位持續幾個電平;
(5)BaudRate
波特率,串口通信的速率,值越大串口傳輸數據越快;如果是異步串口通信的話,二者的波特率應該盡可能無限接近,允許有細微誤差;同步串口通信的話,雙方一般使用同一個時鐘,保證通信雙方的波特率嚴格一致;
檢查機器上有無串口,串口的數量,具體串口名字
string[] GetPortName() //返回的數組的Length ==0,表示無串口 //Length > 0時候,表示有串口,Length的大小就是串口的數量 //字符串數組的每一個元素就是串口的名字
打開串口和關閉串口
sp.IsOpen //指示串口是否處於打開狀態,true打開,false未打開;打開已經打開過的串口會拋出異常;sp.Open() //打開串口 sp.Close() //關閉串口
向串口寫數據
public void Write(string) //發送字符串 //假設sp的Encoding屬性是ASCII,寫入字符串“abc”,那麽實際寫入發送緩存3個字節; //如果Encoding屬性是Unicode,那麽實際寫入發送緩存6個字節; public void Write(byte[],int32,int32) //發送字節數組 //第一個參數是函數外已經創建好的字節數組的引用,第二個參數是從字節數組的第幾個字節開始寫,一般為0,第三個參數表示本次要寫入幾個字節; public void Write(char[],int32,int32) //發送字符數組 //用法參考上述兩個重載;特別說明,Encoding屬性同樣影響寫入發送緩存的字節數量,不同的編碼方式,雖然發送的是同一個字符數組,但是實際上寫入發送緩存的字節數量不同! public void WriteLine(string) //發送一行字符串 //發送完string,緊接著向發送緩存寫入一個NewLine字符串;
從串口讀數據
讀取數據可比發送數據復雜多了!
接收方接收到的數據都在接收緩存中,
串口通信