基本概況
串口介紹
- 串口 :是一種可以將接受來(lái)自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時(shí)可將接受的串行數(shù)據(jù)流轉(zhuǎn)換為并行的數(shù)據(jù)字符供給CPU的器件。一般完成這種功能的電路,我們稱(chēng)為串行接口電路。
- 串口通信(Serial Communications) :串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通信的端口,這些參數(shù)必須匹配。
- 波特率: 這是一個(gè)衡量符號(hào)傳輸速率的參數(shù)。指的是信號(hào)被調(diào)制以后在單位時(shí)間內(nèi)的變化,即單位時(shí)間內(nèi)載波參數(shù)變化的次數(shù),如每秒鐘傳送240個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位,1個(gè)停止位,8個(gè)數(shù)據(jù)位),這時(shí)的波特率為240Bd,比特率為10位*240個(gè)/秒=2400bps。
- 數(shù)據(jù)位: 這是衡量通信中實(shí)際數(shù)據(jù)位的參數(shù)。當(dāng)計(jì)算機(jī)發(fā)送一個(gè)信息包,實(shí)際的數(shù)據(jù)往往不會(huì)是8位的,標(biāo)準(zhǔn)的值是6、7和8位。標(biāo)準(zhǔn)的ASCII碼是0~127(7位),擴(kuò)展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡(jiǎn)單的文本(標(biāo)準(zhǔn) ASCII碼),那么每個(gè)數(shù)據(jù)包使用7位數(shù)據(jù)。每個(gè)包是指一個(gè)字節(jié),包括開(kāi)始/停止位,數(shù)據(jù)位和奇偶校驗(yàn)位。
- 停止位: 用于表示單個(gè)包的最后幾位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時(shí)也越慢
- 奇偶校驗(yàn)位: 在串口通信中一種簡(jiǎn)單的檢錯(cuò)方式。有四種檢錯(cuò)方式:偶、奇、高和低。當(dāng)然沒(méi)有校驗(yàn)位也是可以的。
- 串口通信的接口標(biāo)準(zhǔn): 標(biāo)準(zhǔn)有很多,有 RS-232C、RS-232、RS-422A、RS-485 等。常用的就是 RS-232 和 RS-485。串口通信使用的大多都是 DB9 接口,如下圖
編輯
1 載波檢測(cè)(DCD) 2 接受數(shù)據(jù)(RXD) 3 發(fā)出數(shù)據(jù)(TXD) 4 數(shù)據(jù)終端準(zhǔn)備好(DTR) 5 信號(hào)地線(SG) 6 數(shù)據(jù)準(zhǔn)備好(DSR) 7 請(qǐng)求發(fā)送(RTS) 8 清除發(fā)送(CTS) 9 振鈴指示(RI)
c#中的串口操作類(lèi)
****System.IO.Port.SerialPort 是 .NET Framework提供的操作串行端口的類(lèi),里面提供了一些方法、屬性和和事件供開(kāi)發(fā)者調(diào)用操作串口。
** 常用字段**
名稱(chēng) | 說(shuō)明 |
---|---|
PortName | 獲取或設(shè)置通信端口 |
BaudRate | 獲取或設(shè)置串行波特率 |
DataBits | 獲取或設(shè)置每個(gè)字節(jié)的標(biāo)準(zhǔn)數(shù)據(jù)位長(zhǎng)度 |
Parity | 獲取或設(shè)置奇偶校驗(yàn)檢查協(xié)議 |
StopBits | 獲取或設(shè)置每個(gè)字節(jié)的標(biāo)準(zhǔn)停止位數(shù) |
示例
// 建立串口對(duì)象
private static SerialPort serialPort;
public void init()
{
serialPort = new SerialPort();
//串行波特率
serialPort.BaudRate = 115200;
//每個(gè)字節(jié)的標(biāo)準(zhǔn)數(shù)據(jù)位長(zhǎng)度
serialPort.DataBits = 8;
// 設(shè)置每個(gè)字節(jié)的標(biāo)準(zhǔn)停止位數(shù)
serialPort.StopBits = StopBits.One;
// 讀、寫(xiě) 超時(shí)時(shí)間 單位毫秒
serialPort.ReadTimeout = 500;
serialPort.WriteTimeout = 500;
// 串口名稱(chēng)
serialPort.PortName = "COM1";
}
常用方法
名稱(chēng) | 說(shuō)明 |
---|---|
Close | 關(guān)閉端口連接,將 IsOpen 屬性設(shè)置為false,并釋放內(nèi)部 Stream 對(duì)象 |
GetPortNames | 獲取當(dāng)前計(jì)算機(jī)的串行端口名稱(chēng)數(shù)組 |
Open | 打開(kāi)一個(gè)新的串行端口連接 |
Read | 從SerialPort輸入緩沖區(qū)中讀取 |
ReadExisting | 讀取 SerialPort 對(duì)象的流和輸入緩沖區(qū)中所有立即可用的字節(jié) |
Write | 將數(shù)據(jù)寫(xiě)入串行端口輸出緩沖區(qū) |
示例
public void test1()
{
// 判斷串口是否打開(kāi)
if (serialPort==null || serialPort.IsOpen)
{
return;
}
// 打開(kāi)串口
serialPort.Open();
// 讀取串口中的內(nèi)容
serialPort.ReadExisting()
//如果串口處于打開(kāi)狀態(tài),則關(guān)閉
if (serialPort.IsOpen)
{
// 關(guān)閉串口
serialPort.Close();
}
}
常用事件
名稱(chēng) | 說(shuō)明 |
---|---|
DataReceived | 表示將處理SerialPort對(duì)象的數(shù)據(jù)接收事件的方法 |
示例
public void test2()
{
//設(shè)備監(jiān)聽(tīng)回調(diào)
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
// 回調(diào)方法
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
try
{
//解析內(nèi)容
SerialPort sp = (SerialPort)msg;
string content = sp.ReadExisting();
Console.WriteLine("WX GZH: 程序猿知秋,"+content);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
-
接口電路
+關(guān)注
關(guān)注
8文章
465瀏覽量
57111 -
cpu
+關(guān)注
關(guān)注
68文章
10873瀏覽量
212090 -
器件
+關(guān)注
關(guān)注
4文章
312瀏覽量
27859
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論