c# serialport類 串口通訊 hello world

來源:互聯網
上載者:User

據說明天樣片就寄來了,可是我的pc端串口還未做,以為很難,就拖著,看了http://www.cnblogs.com/tuyile006/archive/2008/10/06/514300.html
之後更是一頭霧水

今天下狠心,沒想到不到兩小時就解決了,做個教程方便大家。

使用serialport類,C#內建的
第一個例子參見http://book.csdn.net/bookfiles/499/10049917236.shtml

首先是在一台pc同一個串口上實現資料收發。那麼需要把TX和RX短接。

我等軟體專業的哪有什麼做跳線的母頭、導線啊,我就在程式運行時拿鑰匙把那兩個腳短接了。
public partial class Form1 : Form
    {
        SerialPort serialPort1 = new SerialPort();

建立一個對象serialPort1,然後剩下的代碼參見 http://book.csdn.net/bookfiles/499/10049917236.shtml

第二個例子,上位機與下位機的通訊,以上連結裡的例子我覺得沒有什麼意義。我決定自己寫一個讀
mini2440開發板串口的例子。就像DNW那樣的。

將第一個例子裡接受按鈕的事件處理改為

private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 115200;
            serialPort1.DataBits = 8;
            serialPort1.ReceivedBytesThreshold = 1;
            serialPort1.Open();

        }

因為我們想非同步讀取,總不能在 private void button2_Click(object sender, EventArgs e)裡寫個死迴圈
一直讀吧。我就想弄個事件驅動,如果這個serialport也不是表單控制項,我只要選中它,在屬性裡很容易就找到相關事件,然後雙擊就可以添加事件處理方法了。可惜它不是。

倒還真讓我撞大運了, 真找到了答案
ReceivedBytesThreshold 屬性, 當緩衝區的資料位元組數大於等於SeralPort類對象的ReceivedBytesThreshold值時DataReceived事件被觸發

先在frm1裡添加一個方法,就是每當讀入一個byte就執行的方法,將讀入的byte轉化為ascii碼
void   ps_DataReceived(object   sender,   SerialDataReceivedEventArgs   e)   
                  {
                      string sValue;
                      byte[] bs;             
                      bs = System.BitConverter.GetBytes(serialPort1.ReadByte());
                      sValue = System.Text.Encoding.ASCII.GetString(bs);
                      textBox2.Text += sValue;
                  }
然後就是註冊這個事件
serialPort1.DataReceived += new SerialDataReceivedEventHandler(ps_DataReceived);

測試時說跨線程調用windows表單控制項,這個.net freamwork2還真是煩人,直接設
Control.CheckForIllegalCrossThreadCalls = false;

即 public Form1()
        {
            InitializeComponent();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(ps_DataReceived);
            Control.CheckForIllegalCrossThreadCalls = false; 
        }

好了,demo完成了

最後想當然的關閉串口,也不知道放的位置對否
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            serialPort1.Close();
        }  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.