串口通信的基本原理详解
目錄
?
串口通信
串口通信的兩種基本方式
異步數(shù)據(jù)的數(shù)據(jù)發(fā)送過程
異步通信的數(shù)據(jù)接收過程
9針串口(DB9)
TTL與RS232區(qū)別
TTL:
RS232:
串口通信的數(shù)據(jù)格式
通訊方式
偶校驗(yàn)與奇校驗(yàn)
停止位
波特率(波特率就是每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù))
典型的串口通訊標(biāo)準(zhǔn)
-
串口通信
串行接口簡(jiǎn)稱串口,也稱串行通信接口(通常指COM接口):是采用串行通信方式的擴(kuò)展接口。
-
串口通信的兩種基本方式
1、同步通信(SYNC:synchronous data communication)(有時(shí)鐘信號(hào)來做同步):
是指在約定的通信速率下,發(fā)送端和接收端的時(shí)鐘信號(hào)頻率和相位始終保持一致(同步),這樣就保證了通信雙方在發(fā)送和接收數(shù)據(jù)時(shí)具有完全一致的定時(shí)關(guān)系。
同步串行通信SPI(是Serial Peripheral Interface 串行外圍設(shè)備接口簡(jiǎn)稱),SPI總線系統(tǒng)是一種同步串行的外設(shè)接口,1它可以是MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。
2、異步通信(ASYNC:asynchronous data communication):
是以字符為單位進(jìn)行傳輸?shù)?#xff0c;字符之間沒有固定的時(shí)間間隔要求,而每個(gè)字符中的各位則以固定的時(shí)間傳送。 異步通信中,收發(fā)雙方取得同步是通過在字符格式中設(shè)置起始位和停止位的方法來實(shí)現(xiàn)的。具體來說就是,在一個(gè)有效字符正式發(fā)送之前,發(fā)送器先發(fā)送一個(gè)起始位,然后發(fā)送有效字符位,在字符結(jié)束時(shí)再發(fā)送一個(gè)停止位,起始位至停止位構(gòu)成一幀。停止位至下一個(gè)起始位之間是不定長(zhǎng)的空閑位,并且規(guī)定起始位為低電平(邏輯值為0),停止位和空閑位都是高電平(邏輯值為1),這樣就保證了起始位開始處一定會(huì)有一個(gè)下跳沿,由此就可以標(biāo)志一個(gè)字符傳輸?shù)钠鹗肌6鶕?jù)起始位和停止位也就很容易的實(shí)現(xiàn)了字符的界定和同步。
異步串行通信UART(無時(shí)鐘信號(hào))(Universal Asynchronous Receiver/Transmitter),即通用異步接受/發(fā)送。
UART包含TTL和RS232電平。TTL電平是3.3V的;而RS232是負(fù)邏輯電平,它定義+3V~+15V為低電平,而-15~-3為高電平,通常PC機(jī)串口與單片機(jī)串口通信需要電平轉(zhuǎn)換芯片,例如:MAX232。
顯然,采用異步通信時(shí),發(fā)送端和接收端可以由各自的時(shí)鐘來控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,可以互不同步。
-
異步數(shù)據(jù)的數(shù)據(jù)發(fā)送過程
發(fā)送數(shù)據(jù)的具體步驟如下:
初始化后或者沒有數(shù)據(jù)需要發(fā)送時(shí),發(fā)送端輸出邏輯1,可以有任意數(shù)量的空閑位;
當(dāng)需要發(fā)送數(shù)據(jù)時(shí),發(fā)送端首先輸出邏輯0,作為起始位;
接著開始輸出數(shù)據(jù)位,發(fā)送端首先輸出數(shù)據(jù)的最低位D0,然后是D1,最后是數(shù)據(jù)的最高位;
如果設(shè)有奇偶檢驗(yàn)位,發(fā)送端輸出檢驗(yàn)位;
最后,發(fā)送端輸出停止位(邏輯1);
如果沒有信息需要發(fā)送,發(fā)送端輸出邏輯1(空閑位),如果有信息需要發(fā)送,則轉(zhuǎn)入步驟2;
如果是以232電平發(fā)送的,示波器上看到的發(fā)送端信號(hào)應(yīng)是上述數(shù)據(jù)包取反后的結(jié)果(負(fù)邏輯)。
-
異步通信的數(shù)據(jù)接收過程
在異步通信中,接收端以接收時(shí)鐘和波特率因子決定每一位的時(shí)間長(zhǎng)度。下面以波特率因子等于16(接收時(shí)鐘每16個(gè)時(shí)鐘周期使接收移位寄存器移位一次)為例來說明:
開始通信,信號(hào)線為空閑(邏輯1),當(dāng)檢測(cè)到由1到0的跳變時(shí),開始對(duì)接收時(shí)鐘計(jì)數(shù);
接收端檢測(cè)到起始位后,隔16個(gè)接收時(shí)鐘對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D0位數(shù)據(jù);
再隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D1位數(shù)據(jù),直到全部數(shù)據(jù)位都輸入;
檢驗(yàn)奇偶檢驗(yàn)位;
接收到規(guī)定的數(shù)據(jù)位個(gè)數(shù)和校驗(yàn)位之后,通信接口電路希望收到停止位(邏輯1),若此時(shí)未收到邏輯1,說明出現(xiàn)了錯(cuò)誤,在狀態(tài)寄存器中置“幀錯(cuò)誤”標(biāo)志;若沒有錯(cuò)誤,對(duì)全部數(shù)據(jù)位進(jìn)行奇偶校驗(yàn),無校驗(yàn)錯(cuò)時(shí),把數(shù)據(jù)位從移位寄存器中取出送至數(shù)據(jù)輸入寄存器,若校驗(yàn)錯(cuò),在狀態(tài)寄存器中置“奇偶錯(cuò)”標(biāo)志;
本幀信息全部接收完,把線路上出現(xiàn)的高電平作為空閑位;
當(dāng)信號(hào)再次變?yōu)榈蜁r(shí),開始進(jìn)入下一幀的檢測(cè)。
(PS1:接收時(shí)鐘和發(fā)送時(shí)鐘與波特率有如下關(guān)系:
f = n × B 這里f 是發(fā)送時(shí)鐘或接收時(shí)鐘的頻率; B 是數(shù)據(jù)傳輸?shù)牟ㄌ?Baud)率; n 稱為波特率因子。設(shè)發(fā)送或接收時(shí)鐘的周期為Tc,發(fā)送一個(gè)波形所需要的傳輸時(shí)間為Td,則: Tc = 1/f , Td = 1/B ,得到: Tc = Td /n,從而n代表發(fā)送一個(gè)波形需要幾個(gè)時(shí)鐘周期。 在實(shí)際串行通信中,波特率因子可以設(shè)定。在異步傳送時(shí),n = 1,16,64,常采用n = 16,即發(fā)送或接收時(shí)鐘的頻率要比數(shù)據(jù)傳送的波特率高n倍。在同步通信時(shí),波特率因子n必須等于1。
PS2:波特率與比特率的關(guān)系:
波特率代表1秒鐘發(fā)送波形的個(gè)數(shù),而比特率代表1秒鐘發(fā)送比特的個(gè)數(shù)。在采用二進(jìn)制傳輸?shù)那闆r下,發(fā)送的波形一共有兩種波形,即高電平和低電平,那么一個(gè)波形代表一個(gè)比特,因此波特率和比特率相等;在采用四進(jìn)制傳輸?shù)那闆r下,發(fā)送的波形一共有4種波形,此處假設(shè)發(fā)送的最高電平為3V,發(fā)送00的波形為0V,發(fā)送01的波形為1V,發(fā)送10的波形為2V,發(fā)送11的波形為3V,那么一個(gè)波形代表兩個(gè)比特,因此比特率是波特率的兩倍;同理,在采用八進(jìn)制傳輸?shù)那闆r下,比特率是波特率的三倍,以此類推。)
-
9針串口(DB9)
1:DCD 載波檢測(cè)
2:RXD 接受數(shù)據(jù)(方向:始終從終端到計(jì)算機(jī))
3:TXD 發(fā)送數(shù)據(jù)(方向:始終從計(jì)算機(jī)到終端)
4:DTR 數(shù)據(jù)終端準(zhǔn)備好
5:GND 地線信號(hào)
6:DSR 數(shù)據(jù)準(zhǔn)備好
7:RTS 請(qǐng)求發(fā)送
8: CTS 清除發(fā)送
9:RI??????振鈴指示
-
?TTL與RS232區(qū)別
-
?TTL:
TLL(Transistor-Transistor Logic,晶體管-晶體管邏輯),TTL電平即TTL電路輸出的電平,TTL電路的工作電壓是5V,它的輸出可以是高電平(3.6V)或者低電平(0.3V)。由于電平是一個(gè)連續(xù)變化的電壓范圍,為了用這種模擬量的電壓來表示數(shù)字量的邏輯1和邏輯0,TTL電平規(guī)定:
對(duì)于輸出電路:電壓大于等于(≥)2.4V為邏輯1;電壓小于等于(≤)0.4V為邏輯0;
對(duì)于輸入電路:電壓大于等于(≥)2.0V為邏輯1;電壓小于等于(≤)0.8V為邏輯0;
邏輯高電平==’1‘==Vcc==3.3V或5V
邏輯低電平==’0‘==0V==0V
-
RS232:
S232是美國(guó)電子工業(yè)協(xié)會(huì)于1962年發(fā)布的串行通信接口標(biāo)準(zhǔn),RS即Recomend Standard,推薦標(biāo)準(zhǔn),232為標(biāo)示號(hào)。該標(biāo)準(zhǔn)對(duì)串行通信的物理接口及邏輯電平都做了規(guī)定。最簡(jiǎn)單的RS232通信由三條數(shù)據(jù)線組成,即TXD、RXD和GND。RS232采用負(fù)邏輯電平,即-15V~-3V代表邏輯"1",+3V~+15V代表邏輯"0"。這里的電平,是TXD線(或者RXD線)相對(duì)于GND的電壓。
邏輯高電平==’0‘==負(fù)電壓== -3V~-25V==常為:-13V
邏輯低電平==’1‘==正電壓== 3V~25V==常為:13V
-
串口通信的數(shù)據(jù)格式
?一個(gè)字符一個(gè)字符地傳輸,每個(gè)字符一位一位地傳輸,并且傳輸一個(gè)字符時(shí),總是以“起始位”開始,以“停止位”結(jié)束,字符之間沒有固定的時(shí)間間隔要求。
????每一個(gè)字符的前面都有一位起始位(低電平),字符本身由7位數(shù)據(jù)位組成,接著字符后面是一位校驗(yàn)位(檢驗(yàn)位可以是奇校驗(yàn)、偶校驗(yàn)或無校驗(yàn)位),最后是一位或一位半或二位停止位,停止位后面是不定長(zhǎng)的空閑位,停止位和空閑位都規(guī)定為高電平。實(shí)際傳輸時(shí)每一位的信號(hào)寬度與波特率有關(guān),波特率越高,寬度越小,在進(jìn)行傳輸之前,雙方一定要使用同一個(gè)波特率設(shè)置。
?
起始位,一般為低電平;
數(shù)據(jù)位(Data Bits):起始位之后就是傳送數(shù)據(jù)位。數(shù)據(jù)位一般為8位一個(gè)字節(jié)的數(shù)據(jù)(也有6位、7位的情況),標(biāo)準(zhǔn)的ASCII碼是0~127(7位),擴(kuò)展的ASCII碼是0~255(8位),低位(LSB)在前,高位(MSB)在后;
奇偶校驗(yàn)位可有可無,如果沒有則表示不采用校驗(yàn),有則表示加入校驗(yàn);
停止位,一般位高電平。
-
通訊方式
?單工模式(Simplex Communication)的數(shù)據(jù)傳輸是單向的。通信雙方中,一方固定為發(fā)送端,一方則固定為接收端。信息只能沿一個(gè)方向傳輸,使用一根傳輸線。
半雙工模式(Half Duplex)通信使用同一根傳輸線,既可以發(fā)送數(shù)據(jù)又可以接收數(shù)據(jù),但不能同時(shí)進(jìn)行發(fā)送和接收。數(shù)據(jù)傳輸允許數(shù)據(jù)在兩個(gè)方向上傳輸,但是,在任何時(shí)刻只能由其中的一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。因此半雙工模式既可以使用一條數(shù)據(jù)線,也可以使用兩條數(shù)據(jù)線。半雙工通信中每端需有一個(gè)收發(fā)切換電子開關(guān),通過切換來決定數(shù)據(jù)向哪個(gè)方向傳輸。因?yàn)橛星袚Q,所以會(huì)產(chǎn)生時(shí)間延遲,信息傳輸效率低些。
全雙工模式(Full Duplex)通信允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸。因此,全雙工通信是兩個(gè)單工通信方式的結(jié)合,它要求發(fā)送設(shè)備和接收設(shè)備都有獨(dú)立的接收和發(fā)送能力。在全雙工模式中,每一端都有發(fā)送器和接收器,有兩條傳輸線,信息傳輸效率高。
顯然,在其它參數(shù)都一樣的情況下,全雙工比半雙工傳輸速度要快,效率要高。
-
偶校驗(yàn)與奇校驗(yàn)
在標(biāo)準(zhǔn)ASCII碼中,其最高位(b7)用作奇偶校驗(yàn)位。所謂奇偶校驗(yàn),是指在代碼傳送過程中用來檢驗(yàn)是否出現(xiàn)錯(cuò)誤的一種方法,一般分奇校驗(yàn)和偶校驗(yàn)兩種。奇校驗(yàn)規(guī)定:正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是奇數(shù),若非奇數(shù),則在最高位b7添1;偶校驗(yàn)規(guī)定:正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是偶數(shù),若非偶數(shù),則在最高位b7添1。
-
停止位
停止位是按長(zhǎng)度來算的。串行異步通信從計(jì)時(shí)開始,以單位時(shí)間為間隔(一個(gè)單位時(shí)間就是波特率的倒數(shù)),依次接受所規(guī)定的數(shù)據(jù)位和奇偶校驗(yàn)位,并拼裝成一個(gè)字符的并行字節(jié);此后應(yīng)接收到規(guī)定長(zhǎng)度的停止位“1”。所以說,停止位都是“1”,1.5是它的長(zhǎng)度,即停止位的高電平保持1.5個(gè)單位時(shí)間長(zhǎng)度。一般來講,停止位有1,1.5,2個(gè)單位時(shí)間三種長(zhǎng)度。
-
波特率(波特率就是每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù))
波特率的單位是每秒比特?cái)?shù)(bps),常用的單位還有:每秒千比特?cái)?shù)Kbps,每秒兆比特?cái)?shù)Mbps。串口典型的傳輸波特率600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps。
PLC/PC與稱重儀表通訊時(shí),最常用的波特率是9600bps,19200bps。PLC/PC或儀表與大屏幕通訊時(shí),最常用的波特率是600bps。
-
典型的串口通訊標(biāo)準(zhǔn)
EIA RS232(通常簡(jiǎn)稱“RS232”): 1962年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)制定。
EIA RS485(通常簡(jiǎn)稱“RS485”): 1983年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)制定。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的串口通信的基本原理详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 激光雷达相应检测方法
- 下一篇: while (条件)循环 车辆年份代码对