《STM8S系列單片機(jī)原理與應(yīng)用》課件第8章_第1頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第8章_第2頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第8章_第3頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第8章_第4頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第8章_第5頁(yè)
已閱讀5頁(yè),還剩154頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章STM8SMCU串行通信

8.1串行通信的概念

8.2UART串行通信接口

8.3RS232C串行接口標(biāo)準(zhǔn)及應(yīng)用

8.4RS422/RS485總線8.5串行外設(shè)總線接口(SPI)

8.1串行通信的概念

CPU與外設(shè)之間信息交換的過(guò)程稱為通信。根據(jù)CPU與外設(shè)之間數(shù)據(jù)線連接、數(shù)據(jù)發(fā)送方式的不同,可將通信分為并行通信和串行通信兩種基本方式。在并行通信方式中,數(shù)據(jù)各位同時(shí)傳送,如圖8-1(a)所示。并行通信的特點(diǎn)是速度快,但需要的傳輸線多,多用于同一個(gè)設(shè)備內(nèi)不同器件或模塊之間的數(shù)據(jù)傳輸,不適合作長(zhǎng)距離數(shù)據(jù)傳輸。在串行通信方式中,借助串行移位寄存器將多位數(shù)據(jù)按位逐一傳送,如圖8-1(b)所示。串行通信的優(yōu)點(diǎn)是所需傳輸線少,適合遠(yuǎn)距離傳輸;缺點(diǎn)是速度慢。假設(shè)并行傳送8位二進(jìn)制數(shù)所需時(shí)間為T(mén),在發(fā)送速率相同的情況下,串行傳輸時(shí)間至少需要8T。而在實(shí)用的串行通信系統(tǒng)中,還需要在數(shù)據(jù)位前、后分別插入起始位和停止位,以保證數(shù)據(jù)可靠地接收,因此實(shí)際的傳輸時(shí)間大于8T。圖8-1基本通信方式8.1.1串行通信的種類(lèi)根據(jù)數(shù)據(jù)傳輸方式的不同,可將串行通信分為兩種:同步通信和異步通信。同步通信是一種數(shù)據(jù)連續(xù)傳輸?shù)拇型ㄐ欧绞健M酵ㄐ艜r(shí),發(fā)送方把需要發(fā)送的多個(gè)字節(jié)數(shù)據(jù)、校驗(yàn)信息連接起來(lái),形成數(shù)據(jù)塊。發(fā)送方發(fā)送時(shí)只需在數(shù)據(jù)塊前插入1~2個(gè)特殊的同步字符,然后按特定速率逐位輸出(發(fā)送)數(shù)據(jù)塊內(nèi)的每一個(gè)數(shù)據(jù)位。接收方在接收到特定的同步字符后,也按相同速率接收數(shù)據(jù)塊內(nèi)的各位數(shù)據(jù)。顯然,在這種通信方式中,數(shù)據(jù)塊內(nèi)各字節(jié)數(shù)據(jù)之間沒(méi)有間隙,傳輸效率高,但發(fā)送、接收雙方必須保持同步(使用同一個(gè)時(shí)鐘信號(hào)實(shí)現(xiàn))。因此,同步通信設(shè)備復(fù)雜(發(fā)送方能自動(dòng)插入同步字符,接收方能自動(dòng)檢測(cè)出同步字符,且發(fā)送、接收時(shí)鐘相同,即除了數(shù)據(jù)線、地線外,還需要時(shí)鐘信號(hào)線),成本較高,多用在高速數(shù)字通信系統(tǒng)中。典型的同步通信數(shù)據(jù)幀格式如圖8-2所示。圖8-2同步通信數(shù)據(jù)幀格式異步通信的特點(diǎn)是每次只傳送一個(gè)字符,每個(gè)字符由起始位(規(guī)定為0電平)、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位(規(guī)定為1電平)組成。典型的異步通信數(shù)據(jù)幀格式如圖8-3所示。圖8-3異步通信數(shù)據(jù)幀格式可見(jiàn),異步通信與同步通信并沒(méi)有本質(zhì)上的區(qū)別,只是在異步通信中數(shù)據(jù)塊的長(zhǎng)度短(一般為一個(gè)字節(jié)),收發(fā)雙方容易實(shí)現(xiàn)同步,但各數(shù)據(jù)塊之間不連續(xù)(即插入了起始位、停止止位),因此效率低,傳輸速度較慢。異步通信過(guò)程可概述如下:對(duì)于異步通信的發(fā)送方來(lái)說(shuō),發(fā)送時(shí)先輸出低電平的起始位,然后按特定速率發(fā)送數(shù)據(jù)位(包括奇偶校驗(yàn)位),當(dāng)最后一位數(shù)據(jù)(采用奇偶校驗(yàn)的異步通信,最后一個(gè)數(shù)據(jù)位往往是奇偶校驗(yàn)位)發(fā)送完畢后,發(fā)送一個(gè)高電平的停止位,這樣就完成了一幀數(shù)據(jù)的發(fā)送過(guò)程。如果發(fā)送方不再需要發(fā)送新數(shù)據(jù)或尚未準(zhǔn)備好下一幀數(shù)據(jù)時(shí),就將數(shù)據(jù)線置為高電平狀態(tài)。異步通信的接收方往往以16倍的發(fā)送速率檢測(cè)傳輸線上的電平狀態(tài),當(dāng)發(fā)現(xiàn)傳輸線電平由高變低時(shí)(起始位標(biāo)志),就認(rèn)為有數(shù)據(jù)傳入,進(jìn)入接收狀態(tài),然后以相同速率不斷地檢測(cè)傳輸線的電平狀態(tài),接收隨后送來(lái)的數(shù)據(jù)位、奇偶校驗(yàn)位和停止位。為提高通信的可靠性,在異步串行通信中,接收方多采用“3中取2”方式確認(rèn)收到的信息位是“0”碼還是“1”碼。也就是說(shuō),在異步通信方式中,發(fā)送方通過(guò)控制數(shù)據(jù)線的電平狀態(tài)來(lái)完成數(shù)據(jù)的發(fā)送;接收方通過(guò)檢測(cè)數(shù)據(jù)線上的電平狀態(tài)確認(rèn)是否有數(shù)據(jù)傳入以及接收到的數(shù)據(jù)位是0還是1,只要發(fā)送速率和接收檢測(cè)速率相同,就能準(zhǔn)確接收,發(fā)送、接收設(shè)備可使用各自的時(shí)鐘源完成數(shù)據(jù)的發(fā)送和接收,無(wú)須使用同一個(gè)時(shí)鐘信號(hào)。因此,異步串行通信所需傳輸線最少,一根數(shù)據(jù)線和一根地線,就能實(shí)現(xiàn)數(shù)據(jù)發(fā)送與接收,在單片機(jī)控制系統(tǒng)中得到了廣泛應(yīng)用。8.1.2波特率在串行通信系統(tǒng)中常用波特率來(lái)衡量通信的快慢,其含義是每秒中傳送的二進(jìn)制數(shù)碼的位數(shù),單位是位/秒(b/s或Kb/s),簡(jiǎn)稱“波特”。例如,兩個(gè)異步串行通信設(shè)備之間每秒鐘傳送的信息量是240字節(jié),如果一幀數(shù)據(jù)包含10位(1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位),則發(fā)送、接收波特率為240?×?10?=?2400(b/s)?=?2400(波特)一般異步通信波特率為110~9600波特,而同步通信波特率在56K波特以上。在選擇通信波特率時(shí),不要盲目追高,以滿足數(shù)據(jù)傳輸要求為原則,原因是波特率越高,對(duì)發(fā)送、接收時(shí)鐘信號(hào)頻率的一致性要求就越高。8.1.3串行通信數(shù)據(jù)傳輸方向根據(jù)串行通信數(shù)據(jù)傳輸方向,可將串行通信系統(tǒng)分為單工方式、半雙工方式和全雙工方式,如圖8-4所示。圖8-4數(shù)據(jù)傳輸方式兩個(gè)串行通信設(shè)備之間只有一根數(shù)據(jù)線,一方發(fā)送,另一方接收,就形成了“單工”通信方式,即數(shù)據(jù)只能由發(fā)送設(shè)備單向傳輸?shù)浇邮赵O(shè)備,如圖8-4(a)所示。如果兩個(gè)串行通信設(shè)備之間依靠一根數(shù)據(jù)線分時(shí)收、發(fā)數(shù)據(jù)(即發(fā)送時(shí),不接收;接收時(shí),不發(fā)送),就構(gòu)成了“半雙工”通信方式。在這種方式中,在同一傳輸線上要完成數(shù)據(jù)的雙向傳輸,因此通信雙方不可能同時(shí)既發(fā)送,又接收,任何時(shí)候只能是一方發(fā)送,另一方接收,如圖8-4(b)所示。如果兩個(gè)串行通信設(shè)備之間能同時(shí)接收和發(fā)送,就構(gòu)成了“全雙工”通信方式。由于允許兩個(gè)通信設(shè)備同時(shí)發(fā)送、接收,就需要兩根數(shù)據(jù)線:A設(shè)備的發(fā)送端接B設(shè)備的接收端;B設(shè)備的發(fā)送端接A設(shè)備的接收端,如圖8-4(c)所示。8.1.4串行通信接口的種類(lèi)根據(jù)串行通信格式及約定(如同步方式、通信速率、信號(hào)電平等)不同,派生出不同的串行通信接口標(biāo)準(zhǔn),如常見(jiàn)的RS232、RS422、RS485、IEEE1394、I2C、SPI(同步通信)、USB(通用串行總線接口)、CAN總線接口等。下面將詳細(xì)介紹STM8S芯片UART接口的功能及基本使用規(guī)則。8.2UART串行通信接口

STM8S提供了3個(gè)通用異步串行通信接口UART(UniversalAsynchronousReceiverTransmitter),分別編號(hào)為UART1、UART2、UART3,各UART接口功能略有差異,如表8-1所示。該系列MCU并非所有的型號(hào)都具有UART1~UART3串行接口,實(shí)際上STM8S207、STM8S208芯片有UART1及UART3兩個(gè)串行接口,STM8S105芯片僅有UART2串行接口,而STM8S103芯片僅有UART1串行接口。表8-1STM8S系列MCU芯片UART的功能由于UART1、UART2、UART3的功能不同,因此其內(nèi)部結(jié)構(gòu)也就略有區(qū)別,其中UART1內(nèi)部結(jié)構(gòu)如圖8-5所示;UART3的內(nèi)部結(jié)構(gòu)如圖8-6所示。在全雙工通信系統(tǒng)中,數(shù)據(jù)寄存器UART_DR往往對(duì)應(yīng)物理上完全獨(dú)立的發(fā)送數(shù)據(jù)寄存器TDR(只寫(xiě))與接收寄存器RDR(只讀)。對(duì)UART_DR寄存器進(jìn)行寫(xiě)操作時(shí),數(shù)據(jù)寫(xiě)入TDR寄存器;對(duì)UART_DR寄存器進(jìn)行讀操作時(shí),數(shù)據(jù)來(lái)源是RDR寄存器。圖8-5UART1接口內(nèi)部結(jié)構(gòu)圖8-6UART3的內(nèi)部結(jié)構(gòu)8.2.1UART串行通信波特率設(shè)置在異步串行通信方式中,為保證收、發(fā)雙方通信的可靠性,發(fā)送波特率與接收波特率應(yīng)嚴(yán)格相同,否則會(huì)因收發(fā)不同步造成接收不正確。不過(guò),在異步串行通信方式中,信息幀長(zhǎng)度較短(10位或11位),只要收發(fā)雙方波特率誤差不大,接收方依然能正確接收發(fā)送方發(fā)送的信息。實(shí)驗(yàn)表明,波特率越高,收發(fā)雙方波特率誤差允許范圍就越小。

STM8SMCU芯片UART接口部件的發(fā)送、接收波特率發(fā)生器由主時(shí)鐘fMASTER經(jīng)16位分頻器UART_DIV分頻后獲得,波特率為(8-1)在使用過(guò)程中,可根據(jù)主時(shí)鐘fMASTER(單位為Hz)、期望的波特率(b/s),通過(guò)式(8-1)計(jì)算出分頻器UART_DIV的值。值得注意的是:

(1)?STM8S要求UART_DIV的值不能小于16。

(2)?UART_DIV寄存器由波特率寄存器UART_BRR1[11:4]、UART_BRR2[15:12;3:0]?組成,裝入時(shí)必須先裝入U(xiǎn)ART_BRR2,后裝入U(xiǎn)ART_BRR1。例如,當(dāng)主時(shí)鐘頻率為8?MHz,目標(biāo)波特率為9600b/s時(shí),得即UART_BRR1為34H,UART_BRR2為01H??梢?jiàn),在STM8S應(yīng)用系統(tǒng)中,當(dāng)主時(shí)鐘頻率fMASTER為整數(shù)時(shí),標(biāo)準(zhǔn)波特率(如4800b/s、9600b/s、19200b/s等)對(duì)應(yīng)的分頻值往往不是整數(shù),即實(shí)際波特率與標(biāo)準(zhǔn)波特率存在一定的偏差。當(dāng)波特率分頻器分頻值為833時(shí),實(shí)際波特率為9603.8b/s,相對(duì)誤差為當(dāng)主時(shí)鐘頻率由頻率精度高、穩(wěn)定性好的HSE產(chǎn)生時(shí),如果波特率不大于38.4Kb/s,則誤差稍大一點(diǎn)也能正常通信;當(dāng)主時(shí)鐘頻率由HSI產(chǎn)生時(shí),則波特率誤差要盡可能小一些,除非波特率很低,如不超過(guò)4800b/s,否則會(huì)影響通信的可靠性。

(3)?UART_BRR1不能為00H,否則波特率時(shí)鐘將被關(guān)閉而不能收發(fā)。因此,當(dāng)選定的波特率對(duì)應(yīng)的分頻值剛好使UART_BRR1為0時(shí),必須重新選定另一波特率(或更改主時(shí)鐘fMASTER),使UART_BRR1?≠?0。8.2.2UART串行通信信息幀格式

UART串行通信信息幀格式如圖8-7所示。對(duì)于9位字長(zhǎng)數(shù)據(jù)幀(DataFrame)來(lái)說(shuō),由低電平的起始位(StartBit)、b0~b8(9個(gè)數(shù)據(jù)位)、高電平的停止位(StopBit)組成。而8位字長(zhǎng)數(shù)據(jù)幀與9位字長(zhǎng)數(shù)據(jù)幀相似,只是數(shù)據(jù)位長(zhǎng)度為8位。在異步串行通信方式中,起始位(長(zhǎng)度固定為1位)總是為低電平,接收方收到低電平的起始位后,立即復(fù)位接收波特率發(fā)生器,并按指定速率接收隨后的數(shù)據(jù)位與停止位;停止位總是為高電平,停止位長(zhǎng)度可編程選擇(1位、1.5位或2位);數(shù)據(jù)位中的最高位(9位字長(zhǎng)中的b8或8位字長(zhǎng)中的b7)可能是奇偶校驗(yàn)位,在多機(jī)通信方式中也可能是地址/數(shù)據(jù)的標(biāo)識(shí)位??臻e幀(IdleFrame)長(zhǎng)度與數(shù)據(jù)幀的長(zhǎng)度相同,只是全部為高電平(其起始位也是高電平)。斷開(kāi)幀(BreakFrame)長(zhǎng)度也與數(shù)據(jù)幀的相同,只是全部為低電平(其停止位也是低電平)。當(dāng)由斷開(kāi)幀轉(zhuǎn)入數(shù)據(jù)幀,UART接口會(huì)自動(dòng)插入一個(gè)附加的高電平停止位。圖8-7STM8SUART接口幀的種類(lèi)及格式8.2.3奇偶校驗(yàn)選擇

STM8S串行接口支持奇偶校驗(yàn)功能,由AURT_CR1的PCEN(奇偶校驗(yàn)允許/禁止)、PS(奇/偶校驗(yàn)方式)選擇位定義。發(fā)送數(shù)據(jù)時(shí),UART自動(dòng)算出待發(fā)送數(shù)據(jù)的奇偶性(數(shù)據(jù)位異或運(yùn)算),并將奇偶標(biāo)志填入發(fā)送數(shù)據(jù)的MSB位,即借用MSB位作為奇偶標(biāo)志位,如表8-2所示。表8-2數(shù)據(jù)幀格式接收數(shù)據(jù)時(shí),UART能自動(dòng)判別奇偶校驗(yàn)是否正確,當(dāng)奇偶校驗(yàn)錯(cuò)誤時(shí),狀態(tài)寄存器UART_SR的PE位置1(表示奇偶錯(cuò)誤),即STM8S串行接口能自動(dòng)判別接收數(shù)據(jù)奇偶校驗(yàn)是否正確。8.2.4數(shù)據(jù)發(fā)送/接收過(guò)程

1.發(fā)送過(guò)程與發(fā)送中斷控制當(dāng)發(fā)送數(shù)據(jù)功能處于禁止?fàn)顟B(tài)時(shí),TX引腳與UART口處于斷開(kāi)狀態(tài),引腳電平由相應(yīng)的GPIO定義。在完成了UART口初始化后,將發(fā)送允許控制位TEN(UART_CR2[3])置1,UART接口發(fā)送功能即處于使能狀態(tài),TX引腳與UART接口部件連通,UART部件在UART_TX引腳輸出空閑幀,對(duì)數(shù)據(jù)寄存器UART_DR進(jìn)行寫(xiě)操作,將觸發(fā)串行發(fā)送進(jìn)程,發(fā)送結(jié)束后,TC(UART_SR[6])(發(fā)送結(jié)束)標(biāo)志有效。不過(guò),STM8S的UART接口具有1個(gè)字節(jié)的發(fā)送緩沖區(qū),在當(dāng)前字節(jié)發(fā)送結(jié)束前,如果TXE(UART_SR[7])(發(fā)送緩沖寄存器空閑)標(biāo)志為1(空閑),也可以將新數(shù)據(jù)寫(xiě)入U(xiǎn)ART_DR。TC與TXE位指示發(fā)送緩沖器及發(fā)送狀態(tài)如表8-3所示。表8-3TC/TXE位狀態(tài)及含義當(dāng)TC標(biāo)志為1時(shí),可通過(guò)下列方式之一進(jìn)行清除:

(1)軟件寫(xiě)“0”清除。如“BRESUART_SR,#6”指令。

(2)先讀UART_SR寄存器,再對(duì)UART_DR寄存器寫(xiě)入。其操作指令如下:

BTJFUART_SR,#6,UART_TX_exit ;?TC標(biāo)志無(wú)效跳轉(zhuǎn)

;發(fā)送結(jié)束標(biāo)志TC有效

MOVUART_DR,A ;新數(shù)據(jù)寫(xiě)入U(xiǎn)ART_DR,自動(dòng)清除TC標(biāo)志UART_TX_exit:在理論上,可用軟件查詢方式判別TC、TXE標(biāo)志的狀態(tài)。不過(guò)UART發(fā)送速率不高,發(fā)送一個(gè)幀數(shù)據(jù)所需時(shí)間較長(zhǎng),例如當(dāng)波特率為4800b/s時(shí),對(duì)長(zhǎng)度為10位的信息幀,發(fā)送時(shí)間約為2.08ms,建議用中斷方式確定發(fā)送狀態(tài)。STM8SUART接口發(fā)送中斷邏輯如圖8-8所示。圖8-8STM8SUART接口發(fā)送中斷邏輯圖

2.接收過(guò)程與接收中斷控制在完成了UART接口的初始化后,將REN位置1,UART接口部件便進(jìn)入接收狀態(tài),以16倍波特率的采樣速率不斷檢測(cè)UART_RX引腳的電平狀態(tài),以判斷是否出現(xiàn)低電平的起始位。當(dāng)一個(gè)信息幀完整地移到接收移位寄存器后,數(shù)據(jù)并行送入接收緩沖寄存器UART_DR,同時(shí)RXNE(接收有效)標(biāo)志為1,表示UART_DR寄存器非空。此時(shí),接收功能并沒(méi)有停止。因此,必須在接收下一幀信息結(jié)束前,讀出UART_DR寄存器中的信息(讀UART_DR將自動(dòng)清除RXNE標(biāo)志),否則過(guò)載標(biāo)志OR有效。當(dāng)過(guò)載標(biāo)志OR置1時(shí),表示位于接收緩沖器UART_DR內(nèi)的上一幀數(shù)據(jù)未取出,串行接收移位寄存器又接收了新信息幀。按下列順序讀數(shù)據(jù)不會(huì)造成數(shù)據(jù)的丟失,除非第3幀信息覆蓋了位于串行接收移位寄存器內(nèi)的第2幀信息。

MOVR10,#XXH ;預(yù)先在R10存儲(chǔ)單元中放置一個(gè)接收數(shù)據(jù)中不可能出現(xiàn)的標(biāo)

;志信息

BTJFUARTx_SR,#3,UART_RX_NEXT1;過(guò)載標(biāo)志OR有效

LDA,UARTx_DR ;讀出上一個(gè)幀數(shù)據(jù),OR自動(dòng)清除

BTJFUART_SRx,#5,UART_RX_NEXT1;?RXNE標(biāo)志有效,立即讀取

MOVR10,UARTx_DR ;立即讀當(dāng)前幀數(shù)據(jù),防止第3幀數(shù)據(jù)覆蓋串行接收移位寄存

;器內(nèi)的第2幀信息UART_RX_NEXT1:在數(shù)據(jù)接收過(guò)程中,如果線路噪聲大,在“3中取2”發(fā)現(xiàn)采樣數(shù)據(jù)不是111(接收1碼時(shí))或000(接收0碼時(shí)),則噪聲標(biāo)志NF置1(與RXNE標(biāo)志同時(shí)有效)。在噪聲不是很大的情況下,NF置1,UART_DR寄存器內(nèi)的信息可能還是真實(shí)的,只是線路存在噪聲。讀狀態(tài)寄存器UART_SR與UART_DR寄存器將自動(dòng)清除NF標(biāo)志。在數(shù)據(jù)接收過(guò)程中,因噪聲、線路故障或發(fā)送方意外癱瘓,造成在指定時(shí)間內(nèi)未接收到有效停止位時(shí),幀錯(cuò)誤標(biāo)志FE置1。此時(shí),接收到的數(shù)據(jù)可靠性較低,一般要丟棄。在UART通信中,如果允許奇偶校驗(yàn),在接收過(guò)程中發(fā)現(xiàn)奇偶校驗(yàn)錯(cuò)誤,則PE標(biāo)志置1。等待RXNE標(biāo)志為1后,讀狀態(tài)寄存器UART_SR與UART_DR寄存器清除PE標(biāo)志(奇偶錯(cuò)誤屬于嚴(yán)重錯(cuò)誤,要丟棄接收數(shù)據(jù))。一般采用中斷方式判別UART接口接收數(shù)據(jù)是否有效。STM8SUART接口接收中斷控制邏輯如圖8-9所示。圖8-9STM8SUART接口接收中斷控制邏輯為提高UART接口接收數(shù)據(jù)的可靠性,在接收中斷服務(wù)程序中,應(yīng)優(yōu)先判別是否出現(xiàn)了FE、PE等嚴(yán)重錯(cuò)誤,再判別是否存在NF標(biāo)志。接收中斷服務(wù)程序的結(jié)構(gòu)如下所示:interruptUARTx_RX_procUARTx_RX_proc.L;?*******奇偶校驗(yàn)錯(cuò)誤判別******(如果允許奇偶校驗(yàn))MOVR12,UARTx_SR ;先讀串行接口狀態(tài)寄存器到RAM單元中(其中許多位

;具有讀清除特性)BTJFR12,#0,UART_RX_NEXT1;奇偶標(biāo)志PE為1,屬嚴(yán)重錯(cuò)誤UARTx_RX_NEXT11:BTJFUARTx_SR,#5,UART_RX_NEXT11 ;等待RXNE標(biāo)志為1LDA,UARTx_DR ;讀數(shù)據(jù)寄存器,清除PE標(biāo)志JPFUART_RX_EEEOR ;丟棄接收數(shù)據(jù),進(jìn)入錯(cuò)誤處理,如要求對(duì)方重發(fā)UART_RX_NEXT1.L;?*******幀錯(cuò)誤判別******(必須判別) ?BTJFR12,#1,UART_RX_NEXT2;幀錯(cuò)誤標(biāo)志FE為1,屬嚴(yán)重錯(cuò)誤LDA,UARTx_DR ;讀數(shù)據(jù)寄存器,清除FE標(biāo)志JPFUART_RX_EEEOR ;丟棄接收數(shù)據(jù),進(jìn)入錯(cuò)誤處理,如要求對(duì)方重發(fā)UART_RX_NEXT2.L;?*******過(guò)載(OR)判別******(接收中斷優(yōu)先級(jí)較低,且波特率較高時(shí)需要判別過(guò)載) MOVR11,#0AAH ;預(yù)先在R11存儲(chǔ)單元中放置一個(gè)接收數(shù)據(jù)中不可能出現(xiàn)的標(biāo)志信息

BTJFR12,#3,UART_RX_NEXT3;過(guò)載標(biāo)志OR為1,要立即讀取數(shù)據(jù),避免出現(xiàn)覆蓋丟失MOVR10,UARTx_DR ;讀數(shù)據(jù)寄存器,清除OR標(biāo)志

BTJFR12,#5,UART_RX_NEXT5 ;?RXNE標(biāo)志為1,應(yīng)立即讀取,避免數(shù)據(jù)覆蓋

MOVR11,UARTx_DR ;讀數(shù)據(jù)寄存器,清除RXNE標(biāo)志JRTUART_RX_NEXT5UART_RX_NEXT3.L ;?*******如果對(duì)可靠性要求很高,可噪聲標(biāo)志(NF)判別******BTJFR12,#2,UART_RX_NEXT4LDA,UARTx_DR ;讀數(shù)據(jù)寄存器,清除NF標(biāo)志JPFUART_RX_EEEOR ;如果對(duì)可靠性要求很高,就轉(zhuǎn)入錯(cuò)誤處理。UART_RX_NEXT4.L ;沒(méi)有錯(cuò)誤,讀數(shù)據(jù),清除RXNE標(biāo)志

MOVR10,UARTx_DRUART_RX_NEXT5.L ;數(shù)據(jù)處理(略)

LDA,R11 CPA,#0AAH JREQUART_RX_EXIT1 ;不等,表明曾經(jīng)出現(xiàn)過(guò)過(guò)載現(xiàn)象

MOVR10,R11 ;把數(shù)據(jù)放入R10中

MOVR11,#0AAH ;把標(biāo)志置為無(wú)效

JPFUART_RX_NEXT5UART_RX_EXIT1.L ;在退出前,如果波特率較高,且接收中斷優(yōu)先級(jí)較低,可再判別一次接收結(jié)束標(biāo)志

MOVR12,UARTx_SR BTJFR12,#5,UART_RX_EXIT2

;接收結(jié)束標(biāo)志又有效,再處理

JPFUARTx_RX_procUART_RX_EXIT2.L IRET IRET IRET IRET IRET可以看出,充分利用奇偶校驗(yàn)、幀錯(cuò)誤偵測(cè)等可靠性檢測(cè)手段后,UART通信可靠性較高。在空閑期間RX引腳受到負(fù)脈沖干擾時(shí),UART誤判為起始位,將按指定波特率接收,但奇偶校驗(yàn)不可能通過(guò)。在正常接收期間受到干擾,奇偶校驗(yàn)不正確的可能性就更大。8.2.5多機(jī)通信在某些應(yīng)用系統(tǒng)中,常需要多個(gè)單片機(jī)芯片協(xié)同工作,這就涉及多機(jī)通信問(wèn)題。由STM8S構(gòu)成的多機(jī)通信系統(tǒng)如圖8-10所示。圖8-10UART多機(jī)通信系統(tǒng)硬件連接示意圖

STM8S系列MCU通用串行總線接口UART配置了支持多機(jī)通信功能的選擇性接收控制,如表8-4所示表8-4選擇性接收控制位在圖8-8所示的多機(jī)通信系統(tǒng)中,由于各從機(jī)發(fā)送引腳TX通過(guò)“線與”方式與主機(jī)RX引腳相連,因此在多機(jī)通信系統(tǒng)中,從機(jī)TX引腳必須初始化為OD輸出或帶上拉輸入方式,使從機(jī)TEN為0時(shí)(TX引腳與UART接口發(fā)送端斷開(kāi)),保證TX引腳“線與”功能。從機(jī)之間不能通信,而主機(jī)可與任意一個(gè)從機(jī)通信。為避免總線沖突,主機(jī)通過(guò)查詢方式與從機(jī)通信,從機(jī)不能主動(dòng)發(fā)送數(shù)據(jù)。在多從機(jī)通信系統(tǒng)中,各從機(jī)可同時(shí)處于接收狀態(tài),但任何時(shí)候最多只有一臺(tái)從機(jī)處于發(fā)送狀態(tài)。為減小功耗,在非查詢期間,主機(jī)可進(jìn)入禁用模式(即使UARTD位為1),而從機(jī)不能進(jìn)入禁用模式。在STM8S多機(jī)通信系統(tǒng)中,可以選擇8位數(shù)據(jù)(M=0),也可以選擇9位數(shù)據(jù)(M=1)。不論信息幀長(zhǎng)度是8位還是9位,在多機(jī)通信方式中,也可以選擇奇偶校驗(yàn)功能,如表8-2所示。在多機(jī)通信方式中,主機(jī)與從機(jī)之間通信過(guò)程為:先發(fā)送目標(biāo)從機(jī)地址(特征是數(shù)據(jù)最高位MSB為1),再發(fā)送數(shù)據(jù)信息(特征是數(shù)據(jù)最高位MSB為0)。

1.喚醒控制位WAKE為0時(shí)的多機(jī)通信系統(tǒng)

STM8S提供了總線空閑檢測(cè)功能。當(dāng)WAKE為0時(shí),可以利用RWU位完成多機(jī)通信控制,其過(guò)程如下:

(1)開(kāi)始時(shí)從機(jī)的RWU位為0(處于正常接收狀態(tài))。

(2)每次通信前,主機(jī)先延遲一個(gè)空閑幀以上時(shí)間,使各從機(jī)被喚醒(當(dāng)WAKE為0、RWU為1時(shí),空閑幀可以喚醒處于靜默狀態(tài)的UART接收功能)。

(3)主機(jī)發(fā)送目標(biāo)從機(jī)地址(在這種方式中,從機(jī)地址由用戶設(shè)定,與UART_CR4位無(wú)關(guān))。

(4)從機(jī)接收了從機(jī)地址信息后,核對(duì)是否屬于本機(jī)地址。不是本機(jī)地址,則將RWU位置1,強(qiáng)迫從機(jī)進(jìn)入靜默狀態(tài)(收到空閑幀,即總線空閑時(shí)被喚醒);是本機(jī)地址則接收、處理地址幀,令TEN為1,允許發(fā)送,向主機(jī)發(fā)送應(yīng)答信號(hào)(目的是使主機(jī)確認(rèn)該從機(jī)是否存在),從機(jī)地址接收有效標(biāo)志置1,接收主機(jī)隨后送來(lái)的數(shù)據(jù)信息。當(dāng)從機(jī)接收了最后一個(gè)數(shù)據(jù)信息幀后,清除從機(jī)地址接收有效標(biāo)志;發(fā)送結(jié)束后,清除TEN位。

由于空閑幀可以喚醒處于靜默狀態(tài)的UART串行接口,主機(jī)發(fā)送兩信息幀的間隔可能會(huì)超出一幀間隔,即兩信息幀之間從機(jī)可能被喚醒,因此在從機(jī)中必須設(shè)置從機(jī)地址接收有效標(biāo)志位。在喚醒后接收到數(shù)據(jù)信息時(shí),先檢查地址接收有效標(biāo)志是否存在,否則不處理,并進(jìn)入靜默狀態(tài)。

2.喚醒控制位WAKE為1時(shí)的多機(jī)通信系統(tǒng)通過(guò)AURT_CR4寄存器設(shè)置從機(jī)地址(最多支持16個(gè)從機(jī)),將從機(jī)WAKE置1,使從機(jī)具有選擇性接收——僅接收與自己地址編碼相同的地址信息(數(shù)據(jù)最高位為1)。

1)從機(jī)個(gè)數(shù)在16以內(nèi)的多機(jī)通信系統(tǒng)開(kāi)始時(shí)主機(jī)發(fā)送目標(biāo)從機(jī)地址信息(無(wú)奇偶校驗(yàn)時(shí),MSB位為1;有奇偶校驗(yàn)時(shí),MSB-1位為1),此時(shí)所有從機(jī)均自動(dòng)接收并與自己的地址比較。匹配時(shí),UART退出靜默模式,自動(dòng)清除RWU位,接收有效標(biāo)志RXNE(事先清除了RWU位)置1(注意目標(biāo)從機(jī)接收了地址信息幀,需要處理),從機(jī)可以接收隨后送來(lái)的數(shù)據(jù)信息(無(wú)奇偶校驗(yàn)時(shí),MSB?=?0;有奇偶校驗(yàn)時(shí),MSB?-?1?=?0)。通信結(jié)束后,通過(guò)手工方式將從機(jī)的RWU(接收器接收控制)位置1,強(qiáng)迫對(duì)應(yīng)從機(jī)進(jìn)入靜默模式。不匹配時(shí),對(duì)應(yīng)從機(jī)的RWU(接收器接收控制)位被強(qiáng)迫置1,從機(jī)進(jìn)入靜默模式,不接收任何信息。在16從機(jī)模式下,喚醒控制位WAKE為1時(shí)的從機(jī)UART接收流程如圖8-11所示。

2)從機(jī)個(gè)數(shù)在16以上的多機(jī)通信系統(tǒng)

UART_CR4寄存器的從機(jī)地址AD[3:0]?只有4位,最多可以選擇16個(gè)從機(jī)。當(dāng)從機(jī)個(gè)數(shù)在16個(gè)以上時(shí),可以將從機(jī)分組,每組最多從機(jī)數(shù)由M(字長(zhǎng))、PCEN(奇偶校驗(yàn)允許)位定義,如表8-5所示。表8-5每組從機(jī)數(shù)及信息幀格式

其中,x為奇偶校驗(yàn)信息;低4位(a3~a0)為組編號(hào);nn(b5~b4)、nnn(b6~b4)、nnnn(b7~b4)為組內(nèi)從機(jī)編號(hào)。當(dāng)接收到地址信息時(shí),同一組內(nèi)的所有從機(jī)(低4位b3~b0相同)均被喚醒(RWU自動(dòng)清0,并接收地址信息),然后通過(guò)手工方式將接收到的地址信息與本機(jī)地址比較,若不同就強(qiáng)制將RWU位置1。接收流程與圖8-11類(lèi)似,僅需增加地址信息判別與RWU置1兩條指令。這種分組方式還可以實(shí)現(xiàn)主機(jī)以廣播方式與同組內(nèi)的多個(gè)從機(jī)同時(shí)通信。圖8-11WAKE?=?1時(shí)UART串行接口接收流程8.2.6UART同步模式

STM8S的UART1、UART2支持同步模式,即提供了同步串行時(shí)鐘輸出信號(hào)SCK,其目的是為了在異步通信方式中兼容串入并出的輸出設(shè)備。在同步模式下,下列控制位必須清0:UART_CR3寄存器的LINEN(禁止LIN模式),UART_CR5寄存器的SCEN(禁止LIN模式下的時(shí)鐘輸出)、HDSEL(禁止半雙工模式)、IREN(禁止紅外模式)。在同步模式下,UART部件相當(dāng)于SPI總線主設(shè)備,TX相當(dāng)于MOSI引腳(輸出)、RX相當(dāng)于MISO引腳(輸入),SCK輸出同步時(shí)鐘,可用這種方式將UART接口與SPI總線從設(shè)備相連,如圖8-12所示。圖8-12UART以同步方式與SPI總線從設(shè)備的連接在同步模式下,時(shí)鐘極性、相位由UART_CR3寄存器的CPOL、CPHA位控制,發(fā)送最后一位時(shí)是否產(chǎn)生時(shí)鐘由LBCL位控制,操作時(shí)序如圖8-13所示。圖8-13同步模式傳輸時(shí)序可見(jiàn),同步模式依然會(huì)出現(xiàn)起始位、停止位,只是在起始位、停止位期間不輸出時(shí)鐘,相當(dāng)于忽略了這個(gè)標(biāo)志位的存在。為了與SPI總線協(xié)議保持一致,最后一位通常要輸出時(shí)鐘。在一般情況下,令LBCL為1,否則將出現(xiàn)傳輸開(kāi)始前與結(jié)束后SCK時(shí)鐘電平不一致的現(xiàn)象。例如,在CPOL、CPHA?=?00情況下,空閑狀態(tài)時(shí),SCK時(shí)鐘應(yīng)為低電平;而當(dāng)LBCL為0時(shí),因最后一位不發(fā)送時(shí)鐘,其結(jié)果是最后一位傳輸結(jié)束后SCK為高電平——這不符合SPI協(xié)議規(guī)定。在同步模式中選擇波特率時(shí),盡可能地使UART_DIV[3:0]?為0,使數(shù)據(jù)建立與保持時(shí)間為1/16位的發(fā)送時(shí)間;此外,盡可能地用一條指令使TEN、REN位同時(shí)為1(原因是在同步方式中,TEN為1,立即啟動(dòng)傳輸),否則接收數(shù)據(jù)可能不可靠。在同步模式中,對(duì)發(fā)送來(lái)說(shuō),TC、TXE標(biāo)志依然有效;對(duì)接收來(lái)說(shuō),僅RXNE標(biāo)志有效,而PE、NE、FE等標(biāo)志無(wú)效。8.2.7UART串行通信的初始化步驟

1.發(fā)送器初始化

(1)UART發(fā)送功能未被激活時(shí),UART_TX引腳電平的狀態(tài)由GPIO寄存器定義。為避免接收錯(cuò)誤或總線癱瘓,最好將UART_TX引腳初始化為高電平的互補(bǔ)推挽方式或OD方式(點(diǎn)對(duì)點(diǎn)通信)、OD方式或不帶中斷的上拉輸入方式(多機(jī)通信)。

(2)初始化UART控制寄存器UART_CR1的M位,選擇數(shù)據(jù)幀的長(zhǎng)度。

(3)初始化UART控制寄存器UART_CR3的STOP位,選擇停止位長(zhǎng)度。

(4)初始化外設(shè)時(shí)鐘門(mén)控寄存器(CLK_PCKENR1)的PCKEN13(控制UART2/UART3)、PCKEN12(控制UART1),將波特率發(fā)生器的輸入端連接到主時(shí)鐘fMASTER。

(5)按順序初始化波特率分頻器UART_BRR2、UART_BRR1。

(6)初始化UART控制寄存器UART_CR2內(nèi)相關(guān)的中斷控制位。理論上,既可以用查詢方式感知發(fā)送結(jié)束,也可以用中斷方式確定發(fā)送是否結(jié)束。不過(guò),STM8內(nèi)核CPU工作速度快,而串行發(fā)送數(shù)據(jù)的速率低,因此,最好采用中斷方式。

(7)初始化UART接口的中斷優(yōu)先級(jí)別。

(8)將UART控制寄存器UART_CR2的TEN位置1,使能發(fā)送器。

(9)將待發(fā)送數(shù)據(jù)送數(shù)據(jù)寄存器UART_DR(對(duì)數(shù)據(jù)寄存器UART_DR進(jìn)行寫(xiě)入時(shí),狀態(tài)寄存器UART_SR的TXE位被清0,表示數(shù)據(jù)尚未送到串行輸出寄存器中,此時(shí)不能對(duì)UART_DR寄存器寫(xiě)入),觸發(fā)發(fā)送過(guò)程。

2.接收器初始化

(1)?UART_RX引腳初始化為不帶中斷的上拉輸入方式。按發(fā)送器初始化過(guò)程(2)~(7),選擇數(shù)據(jù)幀長(zhǎng)度、停止位長(zhǎng)度、接收波特率、中斷控制位及接收中斷優(yōu)先級(jí)。由于接收方無(wú)法確定發(fā)送方什么時(shí)候?qū)?shù)據(jù)送出,因此只能用中斷方式確定接收是否有效。

(2)將UART控制寄存器UART_CR2的REN位置1,UART接口部件便進(jìn)入接收狀態(tài),并以16倍波特率的采樣速率不斷地檢測(cè)UART_RX引腳的電平狀態(tài),以確定是否出現(xiàn)低電平的起始位。8.3RS232C串行接口標(biāo)準(zhǔn)及應(yīng)用8.3.1RS232C的引腳功能完整的RS232C接口由主信道、輔助信道共22根連線組成。不過(guò)該標(biāo)準(zhǔn)對(duì)引腳的機(jī)械特性并未做出嚴(yán)格規(guī)定,一般采用標(biāo)準(zhǔn)的25芯D型插座(通過(guò)25芯D型插頭連接),各引腳信號(hào)含義如圖8-14(a)所示。

圖8-14RS232C接口插座盡管輔助信道也可用于串行通信,但其速率較低很少使用。此外,當(dāng)兩個(gè)設(shè)備以異步方式通信時(shí),也無(wú)須使用主信道中所有的聯(lián)絡(luò)信號(hào),因此RS232C接口也可以用9芯D型插座(如微機(jī)系統(tǒng)中的串行接口),其各引腳信號(hào)含義如圖8-14(b)所示。8.3.2RS232C串行接口標(biāo)準(zhǔn)中主信道重要信號(hào)的含義

RS232C串行接口中,標(biāo)準(zhǔn)主信道重要信號(hào)的含義如下:

(1)?TXD:串行數(shù)據(jù)發(fā)送引腳,輸出。

(2)?RXD:串行數(shù)據(jù)接收引腳,輸入。

(3)?DSR:數(shù)據(jù)設(shè)備(DCE)準(zhǔn)備就緒信號(hào),輸入,主要用于接收聯(lián)絡(luò)。當(dāng)DSR信號(hào)有效時(shí),表明本地的數(shù)據(jù)設(shè)備(DCE)處于就緒狀態(tài)。

(4)?DTR:數(shù)據(jù)終端(DTE)就緒信號(hào),輸出,用于DTE向DCE發(fā)送聯(lián)絡(luò)。當(dāng)DTR有效時(shí),表示DTE可以接收來(lái)自DCE的數(shù)據(jù)。

(5)?RTS:發(fā)送請(qǐng)求,輸出。當(dāng)DTE需要向DCE發(fā)送數(shù)據(jù)時(shí),向接收方(DCE)輸出RTS信號(hào)。

(6)?CTS:發(fā)送允許或清除發(fā)送,輸入。它作為“清除發(fā)送”信號(hào)使用時(shí),由DCE輸出,當(dāng)CTS有效時(shí),DTE將終止發(fā)送(如DCE忙或有重要數(shù)據(jù)要回送DTE);而作為“允許發(fā)送”信號(hào)使用時(shí),情況剛好相反:當(dāng)接收方接收到RTS信號(hào)后進(jìn)入接收狀態(tài),就緒后向請(qǐng)求發(fā)送方回送CTS信號(hào),發(fā)送方檢測(cè)到CTS有效后,啟動(dòng)發(fā)送過(guò)程。8.3.3電平轉(zhuǎn)換為保證數(shù)據(jù)可靠傳送,RS232C標(biāo)準(zhǔn)規(guī)定發(fā)送數(shù)據(jù)線TXD和接收數(shù)據(jù)線RXD均采用EIA電平,即傳送數(shù)字“1”時(shí),傳輸線上的電平在?-3~-15?V之間;傳送數(shù)字“0”時(shí),傳輸線上的電平在?+3~+15V之間。單片機(jī)串行接口采用正邏輯的TTL電平,這樣就存在TTL電平與EIA電平之間的轉(zhuǎn)換問(wèn)題。例如,當(dāng)單片機(jī)與PC機(jī)進(jìn)行串行通信時(shí),PC機(jī)COM1或COM2口發(fā)送引腳TXD信號(hào)是EIA電平,不能直接與單片機(jī)串行接口接收端RXD引腳相連;同樣,單片機(jī)串行接口發(fā)送端TXD引腳輸出信號(hào)采用正邏輯的TTL電平,也不能直接與PC機(jī)串行口COM1或COM2的RXD端相連。

RS232C與TTL之間進(jìn)行電平轉(zhuǎn)換的芯片主要有:傳輸線發(fā)送器MC1488(把TTL電平轉(zhuǎn)成EIA電平)、傳輸線接收器MC1489(把EIA電平轉(zhuǎn)成TTL電平)、MAX232以及Sipex202/232系列RS232電平轉(zhuǎn)換專(zhuān)用芯片。傳輸線發(fā)送器MC1488含有4個(gè)門(mén)電路發(fā)送器,TTL電平輸入,EIA電平輸出;而傳輸線接收器MC1489也含有4個(gè)接收器,EIA電平輸入,TTL電平輸出。但是,由MC1488和MC1489構(gòu)成的EIA與TTL電平轉(zhuǎn)換器需要?±12V雙電源,而單片機(jī)應(yīng)用系統(tǒng)中一般只有?+5?V電源,如果僅為了實(shí)現(xiàn)電平轉(zhuǎn)換增加?±12V電源,會(huì)使系統(tǒng)體積大、成本高。

MAX232以及Sipex202/232系列芯片集成度高,單?+5V電源(內(nèi)置了電壓倍增電路及負(fù)電源電路)工作,只需外接5個(gè)容量為0.1~1μF的小電容就可以完成兩路RS232與TTL電平之間的轉(zhuǎn)換,是單片機(jī)應(yīng)用系統(tǒng)中最常用的RS232電平轉(zhuǎn)換芯片,其內(nèi)部結(jié)構(gòu)及典型應(yīng)用電路如圖8-15所示。圖8-15MAX232電平轉(zhuǎn)換芯片內(nèi)部結(jié)構(gòu)及應(yīng)用8.3.4RS232C的連接

RS232C接口聯(lián)絡(luò)信號(hào)沒(méi)有嚴(yán)格的定義,通過(guò)RS232C接口標(biāo)準(zhǔn)通信的兩個(gè)設(shè)備可能只使用其中的一部分聯(lián)絡(luò)信號(hào),在極端情況下可能不用聯(lián)絡(luò)信號(hào),只通過(guò)TXD、RXD和GND三根連線實(shí)現(xiàn)串行通信。此外,聯(lián)絡(luò)信號(hào)的含義和連接方式也可能因設(shè)備種類(lèi)的不同而有差異。正因如此,通過(guò)RS232C接口通信的設(shè)備可能遇到不兼容的問(wèn)題。下面是常見(jiàn)的RS232C連接方式。

(1)兩個(gè)設(shè)備通過(guò)RS232C標(biāo)準(zhǔn)連接時(shí),可能只需“發(fā)送請(qǐng)求”信號(hào)RTS和“發(fā)送允許”信號(hào)CTS作聯(lián)絡(luò)信號(hào),實(shí)現(xiàn)串行通信,如圖8-16所示。圖8-16只有RTS、CTS聯(lián)絡(luò)信號(hào)的串行通信

(2)沒(méi)有聯(lián)絡(luò)信號(hào)的串行通信。如果通信雙方“協(xié)議”好了收發(fā)條件(如通信數(shù)據(jù)量、格式等),且在規(guī)定時(shí)間內(nèi)準(zhǔn)備就緒,則可以不用任何聯(lián)絡(luò)信號(hào)實(shí)現(xiàn)串行通信,如圖8-17所示。圖8-17沒(méi)有聯(lián)絡(luò)信號(hào)的串行通信在圖8-17中,如果通信雙方距離很近,如同一個(gè)設(shè)備內(nèi)的不同模塊或同一個(gè)電路板上的兩個(gè)CPU,就無(wú)須使用電平轉(zhuǎn)換芯片,將對(duì)應(yīng)引腳直接相連即可。8.3.5通信協(xié)議及約定在單片機(jī)應(yīng)用系統(tǒng)中,由于通信雙方彼此之間需要傳輸?shù)臄?shù)據(jù)量少,常使用沒(méi)有聯(lián)絡(luò)信號(hào)的串行通信,只需明確如下的收發(fā)條件即可:

(1)波特率(CPS)。發(fā)送、接收雙方的波特率必須相同,誤差不得超過(guò)一定的范圍,否則不能正確接收。

(2)數(shù)據(jù)位長(zhǎng)度(8位或9位)。

(3)以二進(jìn)制代碼發(fā)送還是ASCII碼形式發(fā)送。對(duì)于單片機(jī)與單片機(jī)之間的串行通信來(lái)說(shuō),以二進(jìn)制代碼發(fā)送還是ASCII碼發(fā)送問(wèn)題都不大。但當(dāng)單片機(jī)與PC機(jī)串行通信時(shí),以ASCII碼發(fā)送可能更有利于PC控件的檢測(cè)。

(4)校驗(yàn)有無(wú)及校驗(yàn)方式。在串行通信中,除了使用奇偶校驗(yàn)、幀錯(cuò)誤偵測(cè)等幀內(nèi)檢測(cè)方式外,還可能使用其他的檢驗(yàn)方式—和校驗(yàn)(往往僅保留和的低8位或低7位,甚至低4位)、某個(gè)特征數(shù)碼的倍數(shù)等。有時(shí)可能同時(shí)使用兩種校驗(yàn)方式,以保證通信的可靠性。

(5)信息幀格式。信息幀包括信息幀起始標(biāo)志、結(jié)束標(biāo)志、信息幀長(zhǎng)度、校驗(yàn)方式及校驗(yàn)信息位置等。通常使用發(fā)送信息(命令、數(shù)據(jù))中不可能出現(xiàn)的狀態(tài)編碼作為信息幀的起始和結(jié)束標(biāo)志,它也常作為發(fā)送信息類(lèi)別—是數(shù)據(jù),還是命令的識(shí)別碼。

(6)字節(jié)與字節(jié)之間的等待時(shí)間。在接收方接收了一個(gè)字節(jié)信息后,往往需要對(duì)信息進(jìn)行判別、存儲(chǔ)等初步處理。在沒(méi)有聯(lián)絡(luò)信號(hào)的情況下,當(dāng)通信波特率較高時(shí),發(fā)送了一個(gè)字節(jié),必須等待特定時(shí)間后,才能發(fā)送下一個(gè)字節(jié),等待時(shí)間應(yīng)略大于接收方處理一個(gè)字節(jié)所需的最長(zhǎng)時(shí)間。因此,為提高通信速度,接收中斷服務(wù)程序執(zhí)行時(shí)間應(yīng)盡可能短。當(dāng)然,通過(guò)聯(lián)絡(luò)信號(hào)檢測(cè)接收設(shè)備是否就緒將縮短發(fā)送等待時(shí)間。例如,在圖8-16所示串行通信線路中,接收中斷有效,將RTS置為低電平表示接收方忙,在完成數(shù)據(jù)處理后,清除RTS“忙”狀態(tài),這樣發(fā)送方只要檢測(cè)到接收方非忙就發(fā)送。

(7)正確接收后的確認(rèn)信號(hào)及時(shí)間,即發(fā)送了數(shù)據(jù)信息后,必須明確在多長(zhǎng)時(shí)間內(nèi)收到應(yīng)答信號(hào),否則就認(rèn)為失敗。

(8)出錯(cuò)處理方式。對(duì)發(fā)送方來(lái)說(shuō),最常用的出錯(cuò)處理方式是重新發(fā)送,即明確發(fā)送失敗后是否重發(fā)以及重發(fā)次數(shù)等;對(duì)接收方來(lái)說(shuō),常用的出錯(cuò)處理方式包括接收異常后是否要求發(fā)送方重發(fā),在什么時(shí)候、用什么代碼通知發(fā)送方等。

(9)串行中斷優(yōu)先級(jí)。例如,A機(jī)向B機(jī)發(fā)送的信息幀中字節(jié)數(shù)變化大,如命令信息只有一個(gè)字節(jié),而數(shù)據(jù)信息可能含有多個(gè)字節(jié),且長(zhǎng)度不確定。為簡(jiǎn)化B機(jī)接收程序,可使用命令、數(shù)據(jù)信息中不可能出現(xiàn)的數(shù)碼作為信息幀的起始標(biāo)志和結(jié)束標(biāo)志。這樣接收方只要收到幀起始標(biāo)志字節(jié),即認(rèn)為是一幀信息的開(kāi)始;收到結(jié)束標(biāo)志,則認(rèn)為已完整地接收了一幀信息。當(dāng)然,如果發(fā)送的信息量少,信息幀長(zhǎng)度變化不大,也可不設(shè)結(jié)束標(biāo)志,而采用每次固定發(fā)送若干字節(jié)方式。這樣接收方收到幀起始標(biāo)志后開(kāi)始計(jì)數(shù),當(dāng)收了指定字節(jié)后,就認(rèn)為已完整地接收了一幀信息。例如,A機(jī)僅需向B機(jī)發(fā)送少量信息,如一個(gè)字節(jié)的命令信息或一到兩個(gè)字節(jié)的數(shù)據(jù)信息,且命令或數(shù)據(jù)信息中不含0A2H、0A6H。為簡(jiǎn)化B機(jī)接收程序,可協(xié)議如下:每次固定發(fā)送4個(gè)字節(jié)。其中,第一個(gè)字節(jié)為A2H,是信息幀的起始標(biāo)志,這樣B機(jī)收到A2H時(shí),即認(rèn)為是信息幀的開(kāi)始;第二、三個(gè)字節(jié)為發(fā)送的命令或數(shù)據(jù);第四個(gè)字節(jié)高位為0,低7位為第二、三字節(jié)之和的低7位。對(duì)于長(zhǎng)度為一個(gè)字節(jié)的命令或數(shù)據(jù),可用無(wú)用信息A6H或其他信息填充。

對(duì)于B機(jī)來(lái)說(shuō),如果收到的內(nèi)容為A2H,則認(rèn)為是一幀信息的開(kāi)始,復(fù)位接收計(jì)數(shù)器。當(dāng)接收了4個(gè)字節(jié)后,就認(rèn)為已完整地接收了一幀信息,校驗(yàn)正確后發(fā)特征字,如發(fā)送A5H給A機(jī),表明正確接收了A機(jī)發(fā)來(lái)的信息。下面是串行通信中常用的信息幀格式:8.4RS422/RS485總線

8.4.1RS422接口標(biāo)準(zhǔn)

RS422接口標(biāo)準(zhǔn)的發(fā)送器將TTL電平的發(fā)送信號(hào)DI轉(zhuǎn)換為差分(DifferentialDriverMode)形式的A、B兩路信號(hào)輸出,即A路信號(hào)與B路信號(hào)極性相反。當(dāng)RS422接口標(biāo)準(zhǔn)發(fā)送器輸出信號(hào)電位差電平UAB在?+1.5~+6V之間時(shí),定義為邏輯“1”;當(dāng)輸出信號(hào)電位差電平UAB在?-6~-1.5V之間時(shí),定義為邏輯“0”。相應(yīng)地,RS422標(biāo)準(zhǔn)接口的接收器,將接收到的A、B兩路差分輸入信號(hào)還原為T(mén)TL電平輸出信號(hào)RO。對(duì)于接收器來(lái)說(shuō),當(dāng)輸入差分信號(hào)電平UAB≥+200mV時(shí),輸出信號(hào)RO為高電平(邏輯“1”);差分信號(hào)電平UAB≤-200mV時(shí),輸出信號(hào)RO為低電平(邏輯“0”)??梢?jiàn),RS422標(biāo)準(zhǔn)是一種采用平衡(差分)傳輸方式、單機(jī)發(fā)送多機(jī)接收的單向串行通信接口,如圖8-18(a)所示。為了能夠?qū)崿F(xiàn)收發(fā)全雙工通信方式,需要4根傳輸線形成兩對(duì)差分信號(hào)線,即采用RS422接口標(biāo)準(zhǔn)實(shí)現(xiàn)甲乙兩設(shè)備之間數(shù)據(jù)接收與發(fā)送時(shí),至少需要5根線(其中4根信號(hào)線和1根地線),如圖8-18(b)所示。圖8-18RS422接口標(biāo)準(zhǔn)串行通信示意圖發(fā)送器A、B兩輸出端電壓差電平UAB的范圍,以及接收器A、B兩輸入端電壓差電平UAB的范圍如圖8-19所示。發(fā)送器輸出信號(hào)經(jīng)雙絞線傳輸?shù)浇邮掌鰽、B兩輸入端后,將會(huì)有不同程度的衰減。衰減幅度與傳輸線長(zhǎng)度、線徑(即直流電阻大小)等因素有關(guān),當(dāng)輸入的差分信號(hào)UAB小于接收器最小輸入電壓(200mV)時(shí),接收器就無(wú)法識(shí)別。因此,盡管RS422接口標(biāo)準(zhǔn)最高傳輸率可達(dá)10Mb/s,但這時(shí)傳輸線長(zhǎng)度就迅速銳減到1m以下。實(shí)踐表明,當(dāng)傳輸線為1000m時(shí),傳輸率不超過(guò)20kb/s。圖8-19差分輸出/輸入信號(hào)電平范圍8.4.2RS485標(biāo)準(zhǔn)采用RS422標(biāo)準(zhǔn)實(shí)現(xiàn)數(shù)據(jù)雙向傳輸時(shí),兩設(shè)備之間至少需要5條傳輸線,這在遠(yuǎn)距離通信中,成本較高。為此,EIA于1983年在RS422基礎(chǔ)上制定了RS485接口標(biāo)準(zhǔn),主要增加了多點(diǎn)、雙向通信功能,即允許多個(gè)發(fā)送器連接到同一條總線上,同時(shí)增加了發(fā)送器的驅(qū)動(dòng)能力和沖突保護(hù)功能,并擴(kuò)展了總線的共模電壓范圍,后命名為T(mén)IA/EIA-485-A標(biāo)準(zhǔn)(簡(jiǎn)稱RS485標(biāo)準(zhǔn))。它實(shí)際上是RS422接口標(biāo)準(zhǔn)的發(fā)送器和接收器借助同一對(duì)差分信號(hào)線分時(shí)發(fā)送、接收數(shù)據(jù),屬典型的半雙工通信方式。在RS485接口標(biāo)準(zhǔn)中,由于收、發(fā)分時(shí)使用同一對(duì)數(shù)據(jù)線,因此必須給發(fā)送器增加使能控制信號(hào)DE(高電平有效)。當(dāng)發(fā)送控制信號(hào)DE無(wú)效(低電平狀態(tài))時(shí),發(fā)送器不工作,發(fā)送器兩差分輸出信號(hào)線A、B處于高阻態(tài)。相應(yīng)地,為減小功耗,一般也給接收器增設(shè)使能控制信號(hào)(低電平有效)。當(dāng)接收控制信號(hào)無(wú)效時(shí),接收器不工作,輸出信號(hào)RO為高阻態(tài),如圖8-20所示。8.4.3RS422/RS485標(biāo)準(zhǔn)性能指標(biāo)為便于比較,表8-6列出了RS232、RS422、RS485三種接口標(biāo)準(zhǔn)的主要性能指標(biāo)。表8-6RS232、RS422、RS485接口標(biāo)準(zhǔn)的主要性能指標(biāo)8.4.4RS485/RS422標(biāo)準(zhǔn)接口芯片簡(jiǎn)介采用RS485/RS422接口標(biāo)準(zhǔn)通信時(shí),發(fā)送方需要通過(guò)專(zhuān)用的接口器件,將待發(fā)送的TTL電平兼容信號(hào)轉(zhuǎn)換為兩路差分信號(hào)輸出;接收方也需要通過(guò)專(zhuān)用的接口器件,將差分形式輸入的信號(hào)轉(zhuǎn)換為T(mén)TL電平信號(hào)。目前RS485、RS422電平轉(zhuǎn)換器件生產(chǎn)廠家很多,均采用單一?+5.0V(或?+3.3V)電源供電,同一種類(lèi)型接口器件的引腳大多相互兼容(即一般可相互替換),差別僅限于ESD(人體放電保護(hù))功能的有無(wú)與強(qiáng)弱、發(fā)送器負(fù)載能力的大小、最大傳輸率、電源電壓的高低、功耗的大小等參數(shù)。圖8-21給出了Sipex公司的SP485E接口器件的內(nèi)部框圖及引腳排列順序(與工業(yè)標(biāo)準(zhǔn)485總線接口芯片75176兼容)。圖8-21RS485總線接口器件

RS422接口器件生產(chǎn)廠家很多,對(duì)于沒(méi)有收發(fā)使能控制端的RS422總線接口芯片(如Sipex公司的SP490E芯片),一般采用DIP-8或SOP-8封裝方式,如圖8-22(a)所示;對(duì)于帶有收發(fā)使能控制的RS422總線接口芯片(如Sipex公司的SP491E芯片),一般采用DIP-14或SOP-14封裝方式,如圖8-22(b)所示。在圖8-22中,A為接收器同相信號(hào)輸入端,B為接收器反相信號(hào)輸入端;Z為發(fā)送器同相信號(hào)輸出端,Y為發(fā)送器反相信號(hào)輸出端。圖8-22RS422總線接口器件在低速長(zhǎng)距離的串行通信系統(tǒng)中,一般應(yīng)優(yōu)先使用RS485總線構(gòu)成半雙工通信方式,原因是它僅需要三根連線,一方面布線容易(可利用地線隔離),可靠性高;另一方面,線材消耗小,成本低。只有在高速短距離通信中,才考慮使用RS422總線。8.4.5RS485/RS422通信接口實(shí)際電路由RS485接口標(biāo)準(zhǔn)器件組成的基本串行通信電路如圖8-23所示。圖8-23RS485通信接口基本電路在圖8-23中,發(fā)送器輸入端T(即Di)可與MCU,如STM8SUART接口的串行數(shù)據(jù)發(fā)送端TXD相連,接收器的輸出端可與MCUUART接口的串行數(shù)據(jù)輸入端RXD相連。由于發(fā)送器使能端DE與接收器使能端一般連在一起,由MCU的另一個(gè)I/O引腳控制,當(dāng)控制信號(hào)為高電平時(shí),接收器輸出端處于高阻態(tài),因此,對(duì)于沒(méi)有上拉輸入的RXD引腳,則必須通過(guò)10kΩ電阻接電源VCC,以保證接收器輸出為高阻態(tài)時(shí),MCU串行輸入引腳電平處于確定的高電平狀態(tài)。

R3為終端匹配電阻,其大小原則上與傳輸線特性阻抗相同。由于雙絞線特性阻抗大致為120Ω,因此R3一般取值為120Ω。不過(guò),當(dāng)通信距離小于300m或通信速率較低(小于20kb/s)時(shí),可以不接R3(其好處是可以減小芯片的功耗)。電阻R1、R2是為了保證在RS485總線處于懸空(沒(méi)有連接)狀態(tài)時(shí),使A、B差分線處于確定的高、低電平狀態(tài),避免RS485網(wǎng)絡(luò)癱瘓。電容C1、C2,電阻R4、R5是為了減小RS485總線工作的EMI(電磁輻射干擾)而設(shè)置的,它能有效地減小信號(hào)傳輸過(guò)程中的波形上沖、下沖。在EMI要求嚴(yán)格時(shí),最好用100~220μH電感代替電阻R4、R5,而在EMI要求不高的應(yīng)用場(chǎng)合,可以省去電容C1、C2。

ZD1、ZD2是TVS管。盡管RS485總線內(nèi)部具有一定的過(guò)壓保護(hù)功能,但為了保證接口電路的安全,外接TVS管還是必要的。

R6是上拉電阻,對(duì)于可編程為上拉輸入方式的MCU引腳,可省略。當(dāng)RS485總線通信速率較低且MCUI/O資源不夠用時(shí),也可以使用一只PNP三極管構(gòu)成簡(jiǎn)易的收發(fā)自動(dòng)切換電路,如圖8-24所示。圖8-24簡(jiǎn)易收發(fā)自動(dòng)切換電路當(dāng)發(fā)送端TXD為低電平時(shí),T管飽和,收發(fā)控制信號(hào)為高電平,發(fā)送器處于發(fā)送狀態(tài);當(dāng)發(fā)送端TXD為高電平時(shí),T管截止,收發(fā)控制信號(hào)為低電平,發(fā)送器內(nèi)部輸出信號(hào)處于高阻態(tài),此時(shí)連接在A引腳的上拉電阻R1使差分輸出線A為高電平、連載在B引腳的下拉電阻R2使差分輸出線B為低電平,完成了邏輯電平“1”的發(fā)送。當(dāng)收發(fā)控制信號(hào)為低電平時(shí),接收器工作,接收器在TXD引腳發(fā)送邏輯電平“1”期間輸出高電平。不過(guò),由于在自動(dòng)切換過(guò)程中,控制管T的開(kāi)和關(guān)需要一定的時(shí)間,因此該簡(jiǎn)易自動(dòng)切換電路不適合用于傳輸率大于20kb/s的串行通信系統(tǒng)中。8.4.6避免總線沖突方式

RS485總線屬于“一主多從”半雙工通信方式,任何時(shí)候系統(tǒng)中最多允許一個(gè)總線接口芯片處于發(fā)送狀態(tài),因此在正常狀態(tài)下,多采用主機(jī)輪流查詢方式與各從機(jī)通信,避免總線沖突。當(dāng)RS485網(wǎng)絡(luò)中同時(shí)存在兩個(gè)或以上接口芯片處于發(fā)送狀態(tài)時(shí),網(wǎng)絡(luò)會(huì)面臨癱瘓,甚至燒毀RS485接口芯片的危險(xiǎn)。在由RS485構(gòu)成的多機(jī)通信系統(tǒng)中,應(yīng)根據(jù)MCU復(fù)位期間及復(fù)位后I/O引腳電平的狀態(tài),保證從機(jī)上電復(fù)位期間及上電復(fù)位后處于接收狀態(tài)(注:可不必關(guān)心主機(jī)的狀態(tài))。

RS485總線接口從機(jī)實(shí)用的上電抑制電路如圖8-25所示。圖中,上電復(fù)位期間,由R1、C1構(gòu)成的RC充電電路將與非門(mén)輸入端鉗位在低電平狀態(tài),使施密特輸入與非門(mén)A輸出高電平,經(jīng)與非門(mén)B反相后,收發(fā)控制端為低電平,保證了RS485總線接口芯片處于接收狀態(tài),只要時(shí)間常數(shù)R1C1大于MCU上電復(fù)位時(shí)間即可。圖8-25中的與非門(mén)可以是74HC132芯片,也可以是CD4093芯片。對(duì)于上電復(fù)位期間和復(fù)位后處于高阻輸入狀態(tài)的MCU引腳,R2不宜省略,以避免復(fù)位期間以及復(fù)位后與非門(mén)輸入引腳處于懸空狀態(tài)。圖8-25從機(jī)上電抑制電路上電抑制電路形式還很多,例如,對(duì)于上電復(fù)位期間和復(fù)位后處于高電平狀態(tài)的MCU引腳(如MCS-51芯片),也可使用圖8-26(a)、(b)構(gòu)成簡(jiǎn)單的上電抑制電路。圖8-26適用于MCS-51芯片控制的上電抑制電路對(duì)于上電復(fù)位期間和復(fù)位后處于高電平狀態(tài)的MCU引腳,如果MCU采用高電平復(fù)位方式,如MCS-51,采用圖8-26(c)或(d)所示復(fù)位抑制電路更加可靠。對(duì)于復(fù)位期間與復(fù)位后引腳為高阻輸入狀態(tài)的MCU(如STM8、LPC900系列),可采用圖8-27所示的復(fù)位抑制電路。圖8-27復(fù)位期間與復(fù)位后MCU引腳處于高阻輸入狀態(tài)的復(fù)位抑制電路8.5串行外設(shè)總線接口(SPI)

STM8S系列MCU內(nèi)置了串行外設(shè)總線接口SPI(SerialPeripheralInterface)部件。SPI是一種高速的串行外設(shè)總線接口,采用全雙工、同步串行通信方式,其通信協(xié)議簡(jiǎn)單,是單片機(jī)應(yīng)用系統(tǒng)常用的一種串行通信方式之一。

SPI總線有主、從兩種工作模式,使用MOSI(MasterOut/SalveIn)引腳、MISO(MasterIn/SalveOut)引腳、輸入/輸出同步時(shí)鐘信號(hào)SCK、從設(shè)備選擇信號(hào),來(lái)完成兩個(gè)SPI接口設(shè)備之間的數(shù)據(jù)傳輸。

SPI總線通信過(guò)程總是由SPI主設(shè)備啟動(dòng)與控制,主設(shè)備提供了用于串行數(shù)據(jù)輸入/輸出的同步時(shí)鐘信號(hào)SCK,因此對(duì)主設(shè)備來(lái)說(shuō),SCK是輸出引腳;對(duì)從設(shè)備來(lái)說(shuō),SCK是輸入引腳。當(dāng)SPI主設(shè)備通過(guò)MOSI引腳把數(shù)據(jù)串行傳輸?shù)綇脑O(shè)備,同時(shí)從設(shè)備通過(guò)MISO引腳將數(shù)據(jù)回送到主設(shè)備。顯然,MOSI引腳對(duì)主設(shè)備是輸出,對(duì)從設(shè)備是輸入;而MISO引腳對(duì)主設(shè)備是輸入,對(duì)從設(shè)備是輸出。根據(jù)SPI總線傳輸協(xié)議,對(duì)主設(shè)備來(lái)說(shuō),MISO引腳總是處于高阻輸入狀態(tài)。當(dāng)SPI總線處于激活狀態(tài)時(shí),MOSI、SCK引腳處于互補(bǔ)推挽輸出狀態(tài);當(dāng)SPI總線空閑時(shí),MOSI、SCK引腳處于高阻態(tài),防止?fàn)帄ZSPI總線。對(duì)于從設(shè)備來(lái)說(shuō),MOSI、SCK引腳總是處于高阻輸入狀態(tài)。當(dāng)SPI總線處于選中(片選信號(hào)輸入端為低電平時(shí))狀態(tài)時(shí),MISO引腳處于互補(bǔ)推挽輸出狀態(tài);當(dāng)SPI總線處于非選中(片選信號(hào)輸入端為高電平時(shí))狀態(tài),MISO引腳處于高阻態(tài),防止?fàn)帄Z總線。為保證通信的可靠性,當(dāng)SPI時(shí)鐘SCK頻率較高時(shí),輸出引腳必須初始化為快速輸出模式。在“單主機(jī)多從機(jī)”SPI通信系統(tǒng)中,SPI總線主設(shè)備通過(guò)控制從機(jī)片選信號(hào)輸入端的電平,選中指定的從設(shè)備。8.5.1STM8S系列芯片SPI接口部件結(jié)構(gòu)

STM8S系列MCUSPI總線接口部件的結(jié)構(gòu)如圖8-28所示。它包括移位寄存器(SHIFTREGISTER)、波特率產(chǎn)生器(BAUDRATEGENERATOR)、主設(shè)備控制邏輯(MASTERCONTROLLOGIC)等部分。圖8-28SPI總線結(jié)構(gòu)

STM8S系列MCUSPI總線接口部件功能很強(qiáng),除了支持主從設(shè)備、時(shí)鐘速率、時(shí)鐘極性、時(shí)鐘相位等方式編程選擇外,還具有如下功能:

(1)主從設(shè)備可軟件選擇。在這種情況下,從設(shè)備選擇端(PE5)可作為GPIO引腳使用。

(2)單一數(shù)據(jù)線的半雙工模式與接收模式。

(3)?CRC校驗(yàn)。8.5.2STM8S系列芯片SPI接口部件功能

1.數(shù)據(jù)傳輸時(shí)序數(shù)據(jù)傳輸時(shí)序由數(shù)據(jù)傳輸順序(LSBFIRST)、時(shí)鐘極性(CPOL)、時(shí)鐘相位(CPHA)確定,如圖8-29所示。在圖8-29中,時(shí)鐘極性CPOL確定了SPI總線空閑狀態(tài)下時(shí)鐘引腳SCK的電平狀態(tài),當(dāng)CPOL為0時(shí),在空閑狀態(tài)下,SCK引腳處于低電平;當(dāng)CPOL為1時(shí),在空閑狀態(tài)下,SCK引腳處于高電平。時(shí)鐘相位CPHA確定了數(shù)據(jù)傳送發(fā)生在時(shí)鐘SCK的前沿還是后沿,具體情況如表8-7所示。表8-7CPHA與CPOL不同組合對(duì)數(shù)據(jù)傳輸時(shí)序的影響數(shù)據(jù)傳輸順序(LSBFIRST)確定了是先輸出低位(LSB)還是高位(MSB)。當(dāng)LSBFIRST位為0時(shí),先輸出MSB,如圖8-29所示;當(dāng)LSBFIRST位為1時(shí),先輸出LSB。圖8-29SPI總線傳輸時(shí)序?yàn)楸WC數(shù)據(jù)順利傳輸,主從SPI設(shè)備的數(shù)據(jù)傳輸順序(LSBFIRST)、時(shí)鐘極性(CPOL)、相位(CPHA)必須一致。由于SPI通信過(guò)程由主設(shè)備控制,串行移位時(shí)鐘SCK由主設(shè)備提供,因此對(duì)從設(shè)備來(lái)說(shuō),SPI_CR1寄存器中的波特率位沒(méi)有意義。對(duì)從設(shè)備來(lái)說(shuō),必須保證SPI總線在空閑狀態(tài)下SCK引腳電平狀態(tài)與CPOL位保持一致。從圖8-29所示的SPI總線數(shù)據(jù)傳輸時(shí)序可以看出,SPI總線抗干擾能力比UART串行總線低。若時(shí)鐘極性CPOL定義為1(即總線空閑時(shí)SCK為高電平),則在總線空閑期間,當(dāng)從設(shè)備、SCK引腳同時(shí)受到負(fù)脈沖干擾時(shí),從設(shè)備會(huì)出現(xiàn)誤動(dòng)作——串行移位寄存器通過(guò)MISO引腳輸出一位;而在數(shù)據(jù)傳輸(從設(shè)備片選信號(hào)有效)期間,如果SCK引腳受到正、負(fù)窄脈沖干擾,串行移位寄存器也會(huì)多移出一位。因此,SPI總線僅適用于干擾不嚴(yán)重的高速近距離通信。此外,盡可能地將時(shí)鐘極性(CPOL)定義為0(使空閑時(shí)SCK引腳為低電平),原因是總線空閑時(shí),從設(shè)備選通信號(hào)為高電平,可有效地避免共模干擾造成從設(shè)備誤動(dòng)作。

2.從設(shè)備選通信號(hào)的硬件/軟件選擇

STM8SMCU的SPI總線從設(shè)備選通信號(hào)具有硬件、軟件兩種選擇方式,如圖8-30所示。圖8-30從設(shè)備選通信號(hào)控制當(dāng)SPI_CR2的SSM位為0時(shí),SPI總線從設(shè)備選擇信號(hào)來(lái)自PE5引腳,即采用硬件選通方式;當(dāng)SPI_CR2的SSM為1時(shí),SPI總線從設(shè)備選擇信號(hào)由SPI_CR2的SSI位控制,此時(shí)PE5引腳可作為GPIO引腳使用,具體情況如表8-8所示。在STM8S系統(tǒng)中,若內(nèi)部無(wú)效(高電平),則無(wú)論是主設(shè)備還是從設(shè)備,SPI總線均處于禁用狀態(tài),輸出引腳電平由GPIO寄存器定義。表8-8從設(shè)備選通信號(hào)在STM8S系統(tǒng)中,采用硬件方式產(chǎn)生主從設(shè)備選通信號(hào)時(shí),SPI總線在數(shù)據(jù)傳送過(guò)程中,主設(shè)備的引腳必須處于高電平狀態(tài),因此,作為主設(shè)備的SPI總線的引腳一般不能作為GPIO引腳使用。此外,當(dāng)STM8內(nèi)核MCU為主設(shè)備時(shí),考慮到STM8MCU復(fù)位前后I/O引腳處于懸空輸入狀態(tài),為防止從設(shè)備誤傳送,需在主設(shè)備的SCK引腳外接下拉(時(shí)鐘相位CPOL為0時(shí))或上拉電阻R1(時(shí)鐘相位CPOL為1時(shí));當(dāng)從設(shè)備采用硬件選通方式,出于同樣的理由,也需在作為從設(shè)備選通信號(hào)的I/O引腳外接上拉電阻R2,以確保STM8內(nèi)核MCU復(fù)位時(shí)從設(shè)備的SCK、兩輸入信號(hào)處于期望的電平狀態(tài),如圖8-31所示。圖8-31硬件從機(jī)選通方式的SPI通信系統(tǒng)從圖8-31可以看出,在SPI通信系統(tǒng)中,主設(shè)備與從設(shè)備串行移位寄存器通過(guò)MOSI、MISO引腳首尾相連。在由STM8內(nèi)核MCU內(nèi)嵌SPI接口部件構(gòu)成的“一主單從”或“一主多從”的SPI通信系統(tǒng)中,主設(shè)備、從設(shè)備均可選擇軟件從片選通方式,這樣可將主、從機(jī)的引腳均作為GPIO引腳使用。在“一主多從”的SPI通信系統(tǒng)中,如果從機(jī)采用硬件選通方式,如圖8-31(c)所示,依靠從設(shè)備引腳選定指定從機(jī),任何時(shí)候最多只有一個(gè)從設(shè)備選通信號(hào)為低電平;如果采用軟件選通方式,可利用RXONLY控制位,使未選中的從設(shè)備僅接收而不發(fā)送。

3.數(shù)據(jù)傳輸模式

STM8系列MCUSPI總線數(shù)據(jù)傳輸模式,由控制寄存器SPI_CR2的BDM(單/雙向數(shù)據(jù)傳輸模式)、BDOE(雙向數(shù)據(jù)傳輸模式下輸入/輸出選擇)、RXONLY(輸出禁止)三個(gè)控制位來(lái)控制,如表8-9所示。表8-9數(shù)據(jù)傳輸模式注:O表示輸出(發(fā)送);I表示輸入(接收)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論