版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第8章STM8SMCU串行通信
8.1串行通信的概念
8.2UART串行通信接口
8.3RS232C串行接口標準及應用
8.4RS422/RS485總線8.5串行外設總線接口(SPI)
8.1串行通信的概念
CPU與外設之間信息交換的過程稱為通信。根據(jù)CPU與外設之間數(shù)據(jù)線連接、數(shù)據(jù)發(fā)送方式的不同,可將通信分為并行通信和串行通信兩種基本方式。在并行通信方式中,數(shù)據(jù)各位同時傳送,如圖8-1(a)所示。并行通信的特點是速度快,但需要的傳輸線多,多用于同一個設備內(nèi)不同器件或模塊之間的數(shù)據(jù)傳輸,不適合作長距離數(shù)據(jù)傳輸。在串行通信方式中,借助串行移位寄存器將多位數(shù)據(jù)按位逐一傳送,如圖8-1(b)所示。串行通信的優(yōu)點是所需傳輸線少,適合遠距離傳輸;缺點是速度慢。假設并行傳送8位二進制數(shù)所需時間為T,在發(fā)送速率相同的情況下,串行傳輸時間至少需要8T。而在實用的串行通信系統(tǒng)中,還需要在數(shù)據(jù)位前、后分別插入起始位和停止位,以保證數(shù)據(jù)可靠地接收,因此實際的傳輸時間大于8T。圖8-1基本通信方式8.1.1串行通信的種類根據(jù)數(shù)據(jù)傳輸方式的不同,可將串行通信分為兩種:同步通信和異步通信。同步通信是一種數(shù)據(jù)連續(xù)傳輸?shù)拇型ㄐ欧绞?。同步通信時,發(fā)送方把需要發(fā)送的多個字節(jié)數(shù)據(jù)、校驗信息連接起來,形成數(shù)據(jù)塊。發(fā)送方發(fā)送時只需在數(shù)據(jù)塊前插入1~2個特殊的同步字符,然后按特定速率逐位輸出(發(fā)送)數(shù)據(jù)塊內(nèi)的每一個數(shù)據(jù)位。接收方在接收到特定的同步字符后,也按相同速率接收數(shù)據(jù)塊內(nèi)的各位數(shù)據(jù)。顯然,在這種通信方式中,數(shù)據(jù)塊內(nèi)各字節(jié)數(shù)據(jù)之間沒有間隙,傳輸效率高,但發(fā)送、接收雙方必須保持同步(使用同一個時鐘信號實現(xiàn))。因此,同步通信設備復雜(發(fā)送方能自動插入同步字符,接收方能自動檢測出同步字符,且發(fā)送、接收時鐘相同,即除了數(shù)據(jù)線、地線外,還需要時鐘信號線),成本較高,多用在高速數(shù)字通信系統(tǒng)中。典型的同步通信數(shù)據(jù)幀格式如圖8-2所示。圖8-2同步通信數(shù)據(jù)幀格式異步通信的特點是每次只傳送一個字符,每個字符由起始位(規(guī)定為0電平)、數(shù)據(jù)位、奇偶校驗位、停止位(規(guī)定為1電平)組成。典型的異步通信數(shù)據(jù)幀格式如圖8-3所示。圖8-3異步通信數(shù)據(jù)幀格式可見,異步通信與同步通信并沒有本質(zhì)上的區(qū)別,只是在異步通信中數(shù)據(jù)塊的長度短(一般為一個字節(jié)),收發(fā)雙方容易實現(xiàn)同步,但各數(shù)據(jù)塊之間不連續(xù)(即插入了起始位、停止止位),因此效率低,傳輸速度較慢。異步通信過程可概述如下:對于異步通信的發(fā)送方來說,發(fā)送時先輸出低電平的起始位,然后按特定速率發(fā)送數(shù)據(jù)位(包括奇偶校驗位),當最后一位數(shù)據(jù)(采用奇偶校驗的異步通信,最后一個數(shù)據(jù)位往往是奇偶校驗位)發(fā)送完畢后,發(fā)送一個高電平的停止位,這樣就完成了一幀數(shù)據(jù)的發(fā)送過程。如果發(fā)送方不再需要發(fā)送新數(shù)據(jù)或尚未準備好下一幀數(shù)據(jù)時,就將數(shù)據(jù)線置為高電平狀態(tài)。異步通信的接收方往往以16倍的發(fā)送速率檢測傳輸線上的電平狀態(tài),當發(fā)現(xiàn)傳輸線電平由高變低時(起始位標志),就認為有數(shù)據(jù)傳入,進入接收狀態(tài),然后以相同速率不斷地檢測傳輸線的電平狀態(tài),接收隨后送來的數(shù)據(jù)位、奇偶校驗位和停止位。為提高通信的可靠性,在異步串行通信中,接收方多采用“3中取2”方式確認收到的信息位是“0”碼還是“1”碼。也就是說,在異步通信方式中,發(fā)送方通過控制數(shù)據(jù)線的電平狀態(tài)來完成數(shù)據(jù)的發(fā)送;接收方通過檢測數(shù)據(jù)線上的電平狀態(tài)確認是否有數(shù)據(jù)傳入以及接收到的數(shù)據(jù)位是0還是1,只要發(fā)送速率和接收檢測速率相同,就能準確接收,發(fā)送、接收設備可使用各自的時鐘源完成數(shù)據(jù)的發(fā)送和接收,無須使用同一個時鐘信號。因此,異步串行通信所需傳輸線最少,一根數(shù)據(jù)線和一根地線,就能實現(xiàn)數(shù)據(jù)發(fā)送與接收,在單片機控制系統(tǒng)中得到了廣泛應用。8.1.2波特率在串行通信系統(tǒng)中常用波特率來衡量通信的快慢,其含義是每秒中傳送的二進制數(shù)碼的位數(shù),單位是位/秒(b/s或Kb/s),簡稱“波特”。例如,兩個異步串行通信設備之間每秒鐘傳送的信息量是240字節(jié),如果一幀數(shù)據(jù)包含10位(1個起始位、8個數(shù)據(jù)位和1個停止位),則發(fā)送、接收波特率為240?×?10?=?2400(b/s)?=?2400(波特)一般異步通信波特率為110~9600波特,而同步通信波特率在56K波特以上。在選擇通信波特率時,不要盲目追高,以滿足數(shù)據(jù)傳輸要求為原則,原因是波特率越高,對發(fā)送、接收時鐘信號頻率的一致性要求就越高。8.1.3串行通信數(shù)據(jù)傳輸方向根據(jù)串行通信數(shù)據(jù)傳輸方向,可將串行通信系統(tǒng)分為單工方式、半雙工方式和全雙工方式,如圖8-4所示。圖8-4數(shù)據(jù)傳輸方式兩個串行通信設備之間只有一根數(shù)據(jù)線,一方發(fā)送,另一方接收,就形成了“單工”通信方式,即數(shù)據(jù)只能由發(fā)送設備單向傳輸?shù)浇邮赵O備,如圖8-4(a)所示。如果兩個串行通信設備之間依靠一根數(shù)據(jù)線分時收、發(fā)數(shù)據(jù)(即發(fā)送時,不接收;接收時,不發(fā)送),就構成了“半雙工”通信方式。在這種方式中,在同一傳輸線上要完成數(shù)據(jù)的雙向傳輸,因此通信雙方不可能同時既發(fā)送,又接收,任何時候只能是一方發(fā)送,另一方接收,如圖8-4(b)所示。如果兩個串行通信設備之間能同時接收和發(fā)送,就構成了“全雙工”通信方式。由于允許兩個通信設備同時發(fā)送、接收,就需要兩根數(shù)據(jù)線:A設備的發(fā)送端接B設備的接收端;B設備的發(fā)送端接A設備的接收端,如圖8-4(c)所示。8.1.4串行通信接口的種類根據(jù)串行通信格式及約定(如同步方式、通信速率、信號電平等)不同,派生出不同的串行通信接口標準,如常見的RS232、RS422、RS485、IEEE1394、I2C、SPI(同步通信)、USB(通用串行總線接口)、CAN總線接口等。下面將詳細介紹STM8S芯片UART接口的功能及基本使用規(guī)則。8.2UART串行通信接口
STM8S提供了3個通用異步串行通信接口UART(UniversalAsynchronousReceiverTransmitter),分別編號為UART1、UART2、UART3,各UART接口功能略有差異,如表8-1所示。該系列MCU并非所有的型號都具有UART1~UART3串行接口,實際上STM8S207、STM8S208芯片有UART1及UART3兩個串行接口,STM8S105芯片僅有UART2串行接口,而STM8S103芯片僅有UART1串行接口。表8-1STM8S系列MCU芯片UART的功能由于UART1、UART2、UART3的功能不同,因此其內(nèi)部結構也就略有區(qū)別,其中UART1內(nèi)部結構如圖8-5所示;UART3的內(nèi)部結構如圖8-6所示。在全雙工通信系統(tǒng)中,數(shù)據(jù)寄存器UART_DR往往對應物理上完全獨立的發(fā)送數(shù)據(jù)寄存器TDR(只寫)與接收寄存器RDR(只讀)。對UART_DR寄存器進行寫操作時,數(shù)據(jù)寫入TDR寄存器;對UART_DR寄存器進行讀操作時,數(shù)據(jù)來源是RDR寄存器。圖8-5UART1接口內(nèi)部結構圖8-6UART3的內(nèi)部結構8.2.1UART串行通信波特率設置在異步串行通信方式中,為保證收、發(fā)雙方通信的可靠性,發(fā)送波特率與接收波特率應嚴格相同,否則會因收發(fā)不同步造成接收不正確。不過,在異步串行通信方式中,信息幀長度較短(10位或11位),只要收發(fā)雙方波特率誤差不大,接收方依然能正確接收發(fā)送方發(fā)送的信息。實驗表明,波特率越高,收發(fā)雙方波特率誤差允許范圍就越小。
STM8SMCU芯片UART接口部件的發(fā)送、接收波特率發(fā)生器由主時鐘fMASTER經(jīng)16位分頻器UART_DIV分頻后獲得,波特率為(8-1)在使用過程中,可根據(jù)主時鐘fMASTER(單位為Hz)、期望的波特率(b/s),通過式(8-1)計算出分頻器UART_DIV的值。值得注意的是:
(1)?STM8S要求UART_DIV的值不能小于16。
(2)?UART_DIV寄存器由波特率寄存器UART_BRR1[11:4]、UART_BRR2[15:12;3:0]?組成,裝入時必須先裝入UART_BRR2,后裝入UART_BRR1。例如,當主時鐘頻率為8?MHz,目標波特率為9600b/s時,得即UART_BRR1為34H,UART_BRR2為01H。可見,在STM8S應用系統(tǒng)中,當主時鐘頻率fMASTER為整數(shù)時,標準波特率(如4800b/s、9600b/s、19200b/s等)對應的分頻值往往不是整數(shù),即實際波特率與標準波特率存在一定的偏差。當波特率分頻器分頻值為833時,實際波特率為9603.8b/s,相對誤差為當主時鐘頻率由頻率精度高、穩(wěn)定性好的HSE產(chǎn)生時,如果波特率不大于38.4Kb/s,則誤差稍大一點也能正常通信;當主時鐘頻率由HSI產(chǎn)生時,則波特率誤差要盡可能小一些,除非波特率很低,如不超過4800b/s,否則會影響通信的可靠性。
(3)?UART_BRR1不能為00H,否則波特率時鐘將被關閉而不能收發(fā)。因此,當選定的波特率對應的分頻值剛好使UART_BRR1為0時,必須重新選定另一波特率(或更改主時鐘fMASTER),使UART_BRR1?≠?0。8.2.2UART串行通信信息幀格式
UART串行通信信息幀格式如圖8-7所示。對于9位字長數(shù)據(jù)幀(DataFrame)來說,由低電平的起始位(StartBit)、b0~b8(9個數(shù)據(jù)位)、高電平的停止位(StopBit)組成。而8位字長數(shù)據(jù)幀與9位字長數(shù)據(jù)幀相似,只是數(shù)據(jù)位長度為8位。在異步串行通信方式中,起始位(長度固定為1位)總是為低電平,接收方收到低電平的起始位后,立即復位接收波特率發(fā)生器,并按指定速率接收隨后的數(shù)據(jù)位與停止位;停止位總是為高電平,停止位長度可編程選擇(1位、1.5位或2位);數(shù)據(jù)位中的最高位(9位字長中的b8或8位字長中的b7)可能是奇偶校驗位,在多機通信方式中也可能是地址/數(shù)據(jù)的標識位。空閑幀(IdleFrame)長度與數(shù)據(jù)幀的長度相同,只是全部為高電平(其起始位也是高電平)。斷開幀(BreakFrame)長度也與數(shù)據(jù)幀的相同,只是全部為低電平(其停止位也是低電平)。當由斷開幀轉入數(shù)據(jù)幀,UART接口會自動插入一個附加的高電平停止位。圖8-7STM8SUART接口幀的種類及格式8.2.3奇偶校驗選擇
STM8S串行接口支持奇偶校驗功能,由AURT_CR1的PCEN(奇偶校驗允許/禁止)、PS(奇/偶校驗方式)選擇位定義。發(fā)送數(shù)據(jù)時,UART自動算出待發(fā)送數(shù)據(jù)的奇偶性(數(shù)據(jù)位異或運算),并將奇偶標志填入發(fā)送數(shù)據(jù)的MSB位,即借用MSB位作為奇偶標志位,如表8-2所示。表8-2數(shù)據(jù)幀格式接收數(shù)據(jù)時,UART能自動判別奇偶校驗是否正確,當奇偶校驗錯誤時,狀態(tài)寄存器UART_SR的PE位置1(表示奇偶錯誤),即STM8S串行接口能自動判別接收數(shù)據(jù)奇偶校驗是否正確。8.2.4數(shù)據(jù)發(fā)送/接收過程
1.發(fā)送過程與發(fā)送中斷控制當發(fā)送數(shù)據(jù)功能處于禁止狀態(tài)時,TX引腳與UART口處于斷開狀態(tài),引腳電平由相應的GPIO定義。在完成了UART口初始化后,將發(fā)送允許控制位TEN(UART_CR2[3])置1,UART接口發(fā)送功能即處于使能狀態(tài),TX引腳與UART接口部件連通,UART部件在UART_TX引腳輸出空閑幀,對數(shù)據(jù)寄存器UART_DR進行寫操作,將觸發(fā)串行發(fā)送進程,發(fā)送結束后,TC(UART_SR[6])(發(fā)送結束)標志有效。不過,STM8S的UART接口具有1個字節(jié)的發(fā)送緩沖區(qū),在當前字節(jié)發(fā)送結束前,如果TXE(UART_SR[7])(發(fā)送緩沖寄存器空閑)標志為1(空閑),也可以將新數(shù)據(jù)寫入UART_DR。TC與TXE位指示發(fā)送緩沖器及發(fā)送狀態(tài)如表8-3所示。表8-3TC/TXE位狀態(tài)及含義當TC標志為1時,可通過下列方式之一進行清除:
(1)軟件寫“0”清除。如“BRESUART_SR,#6”指令。
(2)先讀UART_SR寄存器,再對UART_DR寄存器寫入。其操作指令如下:
BTJFUART_SR,#6,UART_TX_exit ;?TC標志無效跳轉
;發(fā)送結束標志TC有效
MOVUART_DR,A ;新數(shù)據(jù)寫入UART_DR,自動清除TC標志UART_TX_exit:在理論上,可用軟件查詢方式判別TC、TXE標志的狀態(tài)。不過UART發(fā)送速率不高,發(fā)送一個幀數(shù)據(jù)所需時間較長,例如當波特率為4800b/s時,對長度為10位的信息幀,發(fā)送時間約為2.08ms,建議用中斷方式確定發(fā)送狀態(tài)。STM8SUART接口發(fā)送中斷邏輯如圖8-8所示。圖8-8STM8SUART接口發(fā)送中斷邏輯圖
2.接收過程與接收中斷控制在完成了UART接口的初始化后,將REN位置1,UART接口部件便進入接收狀態(tài),以16倍波特率的采樣速率不斷檢測UART_RX引腳的電平狀態(tài),以判斷是否出現(xiàn)低電平的起始位。當一個信息幀完整地移到接收移位寄存器后,數(shù)據(jù)并行送入接收緩沖寄存器UART_DR,同時RXNE(接收有效)標志為1,表示UART_DR寄存器非空。此時,接收功能并沒有停止。因此,必須在接收下一幀信息結束前,讀出UART_DR寄存器中的信息(讀UART_DR將自動清除RXNE標志),否則過載標志OR有效。當過載標志OR置1時,表示位于接收緩沖器UART_DR內(nèi)的上一幀數(shù)據(jù)未取出,串行接收移位寄存器又接收了新信息幀。按下列順序讀數(shù)據(jù)不會造成數(shù)據(jù)的丟失,除非第3幀信息覆蓋了位于串行接收移位寄存器內(nèi)的第2幀信息。
MOVR10,#XXH ;預先在R10存儲單元中放置一個接收數(shù)據(jù)中不可能出現(xiàn)的標
;志信息
BTJFUARTx_SR,#3,UART_RX_NEXT1;過載標志OR有效
LDA,UARTx_DR ;讀出上一個幀數(shù)據(jù),OR自動清除
BTJFUART_SRx,#5,UART_RX_NEXT1;?RXNE標志有效,立即讀取
MOVR10,UARTx_DR ;立即讀當前幀數(shù)據(jù),防止第3幀數(shù)據(jù)覆蓋串行接收移位寄存
;器內(nèi)的第2幀信息UART_RX_NEXT1:在數(shù)據(jù)接收過程中,如果線路噪聲大,在“3中取2”發(fā)現(xiàn)采樣數(shù)據(jù)不是111(接收1碼時)或000(接收0碼時),則噪聲標志NF置1(與RXNE標志同時有效)。在噪聲不是很大的情況下,NF置1,UART_DR寄存器內(nèi)的信息可能還是真實的,只是線路存在噪聲。讀狀態(tài)寄存器UART_SR與UART_DR寄存器將自動清除NF標志。在數(shù)據(jù)接收過程中,因噪聲、線路故障或發(fā)送方意外癱瘓,造成在指定時間內(nèi)未接收到有效停止位時,幀錯誤標志FE置1。此時,接收到的數(shù)據(jù)可靠性較低,一般要丟棄。在UART通信中,如果允許奇偶校驗,在接收過程中發(fā)現(xiàn)奇偶校驗錯誤,則PE標志置1。等待RXNE標志為1后,讀狀態(tài)寄存器UART_SR與UART_DR寄存器清除PE標志(奇偶錯誤屬于嚴重錯誤,要丟棄接收數(shù)據(jù))。一般采用中斷方式判別UART接口接收數(shù)據(jù)是否有效。STM8SUART接口接收中斷控制邏輯如圖8-9所示。圖8-9STM8SUART接口接收中斷控制邏輯為提高UART接口接收數(shù)據(jù)的可靠性,在接收中斷服務程序中,應優(yōu)先判別是否出現(xiàn)了FE、PE等嚴重錯誤,再判別是否存在NF標志。接收中斷服務程序的結構如下所示:interruptUARTx_RX_procUARTx_RX_proc.L;?*******奇偶校驗錯誤判別******(如果允許奇偶校驗)MOVR12,UARTx_SR ;先讀串行接口狀態(tài)寄存器到RAM單元中(其中許多位
;具有讀清除特性)BTJFR12,#0,UART_RX_NEXT1;奇偶標志PE為1,屬嚴重錯誤UARTx_RX_NEXT11:BTJFUARTx_SR,#5,UART_RX_NEXT11 ;等待RXNE標志為1LDA,UARTx_DR ;讀數(shù)據(jù)寄存器,清除PE標志JPFUART_RX_EEEOR ;丟棄接收數(shù)據(jù),進入錯誤處理,如要求對方重發(fā)UART_RX_NEXT1.L;?*******幀錯誤判別******(必須判別) ?BTJFR12,#1,UART_RX_NEXT2;幀錯誤標志FE為1,屬嚴重錯誤LDA,UARTx_DR ;讀數(shù)據(jù)寄存器,清除FE標志JPFUART_RX_EEEOR ;丟棄接收數(shù)據(jù),進入錯誤處理,如要求對方重發(fā)UART_RX_NEXT2.L;?*******過載(OR)判別******(接收中斷優(yōu)先級較低,且波特率較高時需要判別過載) MOVR11,#0AAH ;預先在R11存儲單元中放置一個接收數(shù)據(jù)中不可能出現(xiàn)的標志信息
BTJFR12,#3,UART_RX_NEXT3;過載標志OR為1,要立即讀取數(shù)據(jù),避免出現(xiàn)覆蓋丟失MOVR10,UARTx_DR ;讀數(shù)據(jù)寄存器,清除OR標志
BTJFR12,#5,UART_RX_NEXT5 ;?RXNE標志為1,應立即讀取,避免數(shù)據(jù)覆蓋
MOVR11,UARTx_DR ;讀數(shù)據(jù)寄存器,清除RXNE標志JRTUART_RX_NEXT5UART_RX_NEXT3.L ;?*******如果對可靠性要求很高,可噪聲標志(NF)判別******BTJFR12,#2,UART_RX_NEXT4LDA,UARTx_DR ;讀數(shù)據(jù)寄存器,清除NF標志JPFUART_RX_EEEOR ;如果對可靠性要求很高,就轉入錯誤處理。UART_RX_NEXT4.L ;沒有錯誤,讀數(shù)據(jù),清除RXNE標志
MOVR10,UARTx_DRUART_RX_NEXT5.L ;數(shù)據(jù)處理(略)
LDA,R11 CPA,#0AAH JREQUART_RX_EXIT1 ;不等,表明曾經(jīng)出現(xiàn)過過載現(xiàn)象
MOVR10,R11 ;把數(shù)據(jù)放入R10中
MOVR11,#0AAH ;把標志置為無效
JPFUART_RX_NEXT5UART_RX_EXIT1.L ;在退出前,如果波特率較高,且接收中斷優(yōu)先級較低,可再判別一次接收結束標志
MOVR12,UARTx_SR BTJFR12,#5,UART_RX_EXIT2
;接收結束標志又有效,再處理
JPFUARTx_RX_procUART_RX_EXIT2.L IRET IRET IRET IRET IRET可以看出,充分利用奇偶校驗、幀錯誤偵測等可靠性檢測手段后,UART通信可靠性較高。在空閑期間RX引腳受到負脈沖干擾時,UART誤判為起始位,將按指定波特率接收,但奇偶校驗不可能通過。在正常接收期間受到干擾,奇偶校驗不正確的可能性就更大。8.2.5多機通信在某些應用系統(tǒng)中,常需要多個單片機芯片協(xié)同工作,這就涉及多機通信問題。由STM8S構成的多機通信系統(tǒng)如圖8-10所示。圖8-10UART多機通信系統(tǒng)硬件連接示意圖
STM8S系列MCU通用串行總線接口UART配置了支持多機通信功能的選擇性接收控制,如表8-4所示表8-4選擇性接收控制位在圖8-8所示的多機通信系統(tǒng)中,由于各從機發(fā)送引腳TX通過“線與”方式與主機RX引腳相連,因此在多機通信系統(tǒng)中,從機TX引腳必須初始化為OD輸出或帶上拉輸入方式,使從機TEN為0時(TX引腳與UART接口發(fā)送端斷開),保證TX引腳“線與”功能。從機之間不能通信,而主機可與任意一個從機通信。為避免總線沖突,主機通過查詢方式與從機通信,從機不能主動發(fā)送數(shù)據(jù)。在多從機通信系統(tǒng)中,各從機可同時處于接收狀態(tài),但任何時候最多只有一臺從機處于發(fā)送狀態(tài)。為減小功耗,在非查詢期間,主機可進入禁用模式(即使UARTD位為1),而從機不能進入禁用模式。在STM8S多機通信系統(tǒng)中,可以選擇8位數(shù)據(jù)(M=0),也可以選擇9位數(shù)據(jù)(M=1)。不論信息幀長度是8位還是9位,在多機通信方式中,也可以選擇奇偶校驗功能,如表8-2所示。在多機通信方式中,主機與從機之間通信過程為:先發(fā)送目標從機地址(特征是數(shù)據(jù)最高位MSB為1),再發(fā)送數(shù)據(jù)信息(特征是數(shù)據(jù)最高位MSB為0)。
1.喚醒控制位WAKE為0時的多機通信系統(tǒng)
STM8S提供了總線空閑檢測功能。當WAKE為0時,可以利用RWU位完成多機通信控制,其過程如下:
(1)開始時從機的RWU位為0(處于正常接收狀態(tài))。
(2)每次通信前,主機先延遲一個空閑幀以上時間,使各從機被喚醒(當WAKE為0、RWU為1時,空閑幀可以喚醒處于靜默狀態(tài)的UART接收功能)。
(3)主機發(fā)送目標從機地址(在這種方式中,從機地址由用戶設定,與UART_CR4位無關)。
(4)從機接收了從機地址信息后,核對是否屬于本機地址。不是本機地址,則將RWU位置1,強迫從機進入靜默狀態(tài)(收到空閑幀,即總線空閑時被喚醒);是本機地址則接收、處理地址幀,令TEN為1,允許發(fā)送,向主機發(fā)送應答信號(目的是使主機確認該從機是否存在),從機地址接收有效標志置1,接收主機隨后送來的數(shù)據(jù)信息。當從機接收了最后一個數(shù)據(jù)信息幀后,清除從機地址接收有效標志;發(fā)送結束后,清除TEN位。
由于空閑幀可以喚醒處于靜默狀態(tài)的UART串行接口,主機發(fā)送兩信息幀的間隔可能會超出一幀間隔,即兩信息幀之間從機可能被喚醒,因此在從機中必須設置從機地址接收有效標志位。在喚醒后接收到數(shù)據(jù)信息時,先檢查地址接收有效標志是否存在,否則不處理,并進入靜默狀態(tài)。
2.喚醒控制位WAKE為1時的多機通信系統(tǒng)通過AURT_CR4寄存器設置從機地址(最多支持16個從機),將從機WAKE置1,使從機具有選擇性接收——僅接收與自己地址編碼相同的地址信息(數(shù)據(jù)最高位為1)。
1)從機個數(shù)在16以內(nèi)的多機通信系統(tǒng)開始時主機發(fā)送目標從機地址信息(無奇偶校驗時,MSB位為1;有奇偶校驗時,MSB-1位為1),此時所有從機均自動接收并與自己的地址比較。匹配時,UART退出靜默模式,自動清除RWU位,接收有效標志RXNE(事先清除了RWU位)置1(注意目標從機接收了地址信息幀,需要處理),從機可以接收隨后送來的數(shù)據(jù)信息(無奇偶校驗時,MSB?=?0;有奇偶校驗時,MSB?-?1?=?0)。通信結束后,通過手工方式將從機的RWU(接收器接收控制)位置1,強迫對應從機進入靜默模式。不匹配時,對應從機的RWU(接收器接收控制)位被強迫置1,從機進入靜默模式,不接收任何信息。在16從機模式下,喚醒控制位WAKE為1時的從機UART接收流程如圖8-11所示。
2)從機個數(shù)在16以上的多機通信系統(tǒng)
UART_CR4寄存器的從機地址AD[3:0]?只有4位,最多可以選擇16個從機。當從機個數(shù)在16個以上時,可以將從機分組,每組最多從機數(shù)由M(字長)、PCEN(奇偶校驗允許)位定義,如表8-5所示。表8-5每組從機數(shù)及信息幀格式
其中,x為奇偶校驗信息;低4位(a3~a0)為組編號;nn(b5~b4)、nnn(b6~b4)、nnnn(b7~b4)為組內(nèi)從機編號。當接收到地址信息時,同一組內(nèi)的所有從機(低4位b3~b0相同)均被喚醒(RWU自動清0,并接收地址信息),然后通過手工方式將接收到的地址信息與本機地址比較,若不同就強制將RWU位置1。接收流程與圖8-11類似,僅需增加地址信息判別與RWU置1兩條指令。這種分組方式還可以實現(xiàn)主機以廣播方式與同組內(nèi)的多個從機同時通信。圖8-11WAKE?=?1時UART串行接口接收流程8.2.6UART同步模式
STM8S的UART1、UART2支持同步模式,即提供了同步串行時鐘輸出信號SCK,其目的是為了在異步通信方式中兼容串入并出的輸出設備。在同步模式下,下列控制位必須清0:UART_CR3寄存器的LINEN(禁止LIN模式),UART_CR5寄存器的SCEN(禁止LIN模式下的時鐘輸出)、HDSEL(禁止半雙工模式)、IREN(禁止紅外模式)。在同步模式下,UART部件相當于SPI總線主設備,TX相當于MOSI引腳(輸出)、RX相當于MISO引腳(輸入),SCK輸出同步時鐘,可用這種方式將UART接口與SPI總線從設備相連,如圖8-12所示。圖8-12UART以同步方式與SPI總線從設備的連接在同步模式下,時鐘極性、相位由UART_CR3寄存器的CPOL、CPHA位控制,發(fā)送最后一位時是否產(chǎn)生時鐘由LBCL位控制,操作時序如圖8-13所示。圖8-13同步模式傳輸時序可見,同步模式依然會出現(xiàn)起始位、停止位,只是在起始位、停止位期間不輸出時鐘,相當于忽略了這個標志位的存在。為了與SPI總線協(xié)議保持一致,最后一位通常要輸出時鐘。在一般情況下,令LBCL為1,否則將出現(xiàn)傳輸開始前與結束后SCK時鐘電平不一致的現(xiàn)象。例如,在CPOL、CPHA?=?00情況下,空閑狀態(tài)時,SCK時鐘應為低電平;而當LBCL為0時,因最后一位不發(fā)送時鐘,其結果是最后一位傳輸結束后SCK為高電平——這不符合SPI協(xié)議規(guī)定。在同步模式中選擇波特率時,盡可能地使UART_DIV[3:0]?為0,使數(shù)據(jù)建立與保持時間為1/16位的發(fā)送時間;此外,盡可能地用一條指令使TEN、REN位同時為1(原因是在同步方式中,TEN為1,立即啟動傳輸),否則接收數(shù)據(jù)可能不可靠。在同步模式中,對發(fā)送來說,TC、TXE標志依然有效;對接收來說,僅RXNE標志有效,而PE、NE、FE等標志無效。8.2.7UART串行通信的初始化步驟
1.發(fā)送器初始化
(1)UART發(fā)送功能未被激活時,UART_TX引腳電平的狀態(tài)由GPIO寄存器定義。為避免接收錯誤或總線癱瘓,最好將UART_TX引腳初始化為高電平的互補推挽方式或OD方式(點對點通信)、OD方式或不帶中斷的上拉輸入方式(多機通信)。
(2)初始化UART控制寄存器UART_CR1的M位,選擇數(shù)據(jù)幀的長度。
(3)初始化UART控制寄存器UART_CR3的STOP位,選擇停止位長度。
(4)初始化外設時鐘門控寄存器(CLK_PCKENR1)的PCKEN13(控制UART2/UART3)、PCKEN12(控制UART1),將波特率發(fā)生器的輸入端連接到主時鐘fMASTER。
(5)按順序初始化波特率分頻器UART_BRR2、UART_BRR1。
(6)初始化UART控制寄存器UART_CR2內(nèi)相關的中斷控制位。理論上,既可以用查詢方式感知發(fā)送結束,也可以用中斷方式確定發(fā)送是否結束。不過,STM8內(nèi)核CPU工作速度快,而串行發(fā)送數(shù)據(jù)的速率低,因此,最好采用中斷方式。
(7)初始化UART接口的中斷優(yōu)先級別。
(8)將UART控制寄存器UART_CR2的TEN位置1,使能發(fā)送器。
(9)將待發(fā)送數(shù)據(jù)送數(shù)據(jù)寄存器UART_DR(對數(shù)據(jù)寄存器UART_DR進行寫入時,狀態(tài)寄存器UART_SR的TXE位被清0,表示數(shù)據(jù)尚未送到串行輸出寄存器中,此時不能對UART_DR寄存器寫入),觸發(fā)發(fā)送過程。
2.接收器初始化
(1)?UART_RX引腳初始化為不帶中斷的上拉輸入方式。按發(fā)送器初始化過程(2)~(7),選擇數(shù)據(jù)幀長度、停止位長度、接收波特率、中斷控制位及接收中斷優(yōu)先級。由于接收方無法確定發(fā)送方什么時候將數(shù)據(jù)送出,因此只能用中斷方式確定接收是否有效。
(2)將UART控制寄存器UART_CR2的REN位置1,UART接口部件便進入接收狀態(tài),并以16倍波特率的采樣速率不斷地檢測UART_RX引腳的電平狀態(tài),以確定是否出現(xiàn)低電平的起始位。8.3RS232C串行接口標準及應用8.3.1RS232C的引腳功能完整的RS232C接口由主信道、輔助信道共22根連線組成。不過該標準對引腳的機械特性并未做出嚴格規(guī)定,一般采用標準的25芯D型插座(通過25芯D型插頭連接),各引腳信號含義如圖8-14(a)所示。
圖8-14RS232C接口插座盡管輔助信道也可用于串行通信,但其速率較低很少使用。此外,當兩個設備以異步方式通信時,也無須使用主信道中所有的聯(lián)絡信號,因此RS232C接口也可以用9芯D型插座(如微機系統(tǒng)中的串行接口),其各引腳信號含義如圖8-14(b)所示。8.3.2RS232C串行接口標準中主信道重要信號的含義
RS232C串行接口中,標準主信道重要信號的含義如下:
(1)?TXD:串行數(shù)據(jù)發(fā)送引腳,輸出。
(2)?RXD:串行數(shù)據(jù)接收引腳,輸入。
(3)?DSR:數(shù)據(jù)設備(DCE)準備就緒信號,輸入,主要用于接收聯(lián)絡。當DSR信號有效時,表明本地的數(shù)據(jù)設備(DCE)處于就緒狀態(tài)。
(4)?DTR:數(shù)據(jù)終端(DTE)就緒信號,輸出,用于DTE向DCE發(fā)送聯(lián)絡。當DTR有效時,表示DTE可以接收來自DCE的數(shù)據(jù)。
(5)?RTS:發(fā)送請求,輸出。當DTE需要向DCE發(fā)送數(shù)據(jù)時,向接收方(DCE)輸出RTS信號。
(6)?CTS:發(fā)送允許或清除發(fā)送,輸入。它作為“清除發(fā)送”信號使用時,由DCE輸出,當CTS有效時,DTE將終止發(fā)送(如DCE忙或有重要數(shù)據(jù)要回送DTE);而作為“允許發(fā)送”信號使用時,情況剛好相反:當接收方接收到RTS信號后進入接收狀態(tài),就緒后向請求發(fā)送方回送CTS信號,發(fā)送方檢測到CTS有效后,啟動發(fā)送過程。8.3.3電平轉換為保證數(shù)據(jù)可靠傳送,RS232C標準規(guī)定發(fā)送數(shù)據(jù)線TXD和接收數(shù)據(jù)線RXD均采用EIA電平,即傳送數(shù)字“1”時,傳輸線上的電平在?-3~-15?V之間;傳送數(shù)字“0”時,傳輸線上的電平在?+3~+15V之間。單片機串行接口采用正邏輯的TTL電平,這樣就存在TTL電平與EIA電平之間的轉換問題。例如,當單片機與PC機進行串行通信時,PC機COM1或COM2口發(fā)送引腳TXD信號是EIA電平,不能直接與單片機串行接口接收端RXD引腳相連;同樣,單片機串行接口發(fā)送端TXD引腳輸出信號采用正邏輯的TTL電平,也不能直接與PC機串行口COM1或COM2的RXD端相連。
RS232C與TTL之間進行電平轉換的芯片主要有:傳輸線發(fā)送器MC1488(把TTL電平轉成EIA電平)、傳輸線接收器MC1489(把EIA電平轉成TTL電平)、MAX232以及Sipex202/232系列RS232電平轉換專用芯片。傳輸線發(fā)送器MC1488含有4個門電路發(fā)送器,TTL電平輸入,EIA電平輸出;而傳輸線接收器MC1489也含有4個接收器,EIA電平輸入,TTL電平輸出。但是,由MC1488和MC1489構成的EIA與TTL電平轉換器需要?±12V雙電源,而單片機應用系統(tǒng)中一般只有?+5?V電源,如果僅為了實現(xiàn)電平轉換增加?±12V電源,會使系統(tǒng)體積大、成本高。
MAX232以及Sipex202/232系列芯片集成度高,單?+5V電源(內(nèi)置了電壓倍增電路及負電源電路)工作,只需外接5個容量為0.1~1μF的小電容就可以完成兩路RS232與TTL電平之間的轉換,是單片機應用系統(tǒng)中最常用的RS232電平轉換芯片,其內(nèi)部結構及典型應用電路如圖8-15所示。圖8-15MAX232電平轉換芯片內(nèi)部結構及應用8.3.4RS232C的連接
RS232C接口聯(lián)絡信號沒有嚴格的定義,通過RS232C接口標準通信的兩個設備可能只使用其中的一部分聯(lián)絡信號,在極端情況下可能不用聯(lián)絡信號,只通過TXD、RXD和GND三根連線實現(xiàn)串行通信。此外,聯(lián)絡信號的含義和連接方式也可能因設備種類的不同而有差異。正因如此,通過RS232C接口通信的設備可能遇到不兼容的問題。下面是常見的RS232C連接方式。
(1)兩個設備通過RS232C標準連接時,可能只需“發(fā)送請求”信號RTS和“發(fā)送允許”信號CTS作聯(lián)絡信號,實現(xiàn)串行通信,如圖8-16所示。圖8-16只有RTS、CTS聯(lián)絡信號的串行通信
(2)沒有聯(lián)絡信號的串行通信。如果通信雙方“協(xié)議”好了收發(fā)條件(如通信數(shù)據(jù)量、格式等),且在規(guī)定時間內(nèi)準備就緒,則可以不用任何聯(lián)絡信號實現(xiàn)串行通信,如圖8-17所示。圖8-17沒有聯(lián)絡信號的串行通信在圖8-17中,如果通信雙方距離很近,如同一個設備內(nèi)的不同模塊或同一個電路板上的兩個CPU,就無須使用電平轉換芯片,將對應引腳直接相連即可。8.3.5通信協(xié)議及約定在單片機應用系統(tǒng)中,由于通信雙方彼此之間需要傳輸?shù)臄?shù)據(jù)量少,常使用沒有聯(lián)絡信號的串行通信,只需明確如下的收發(fā)條件即可:
(1)波特率(CPS)。發(fā)送、接收雙方的波特率必須相同,誤差不得超過一定的范圍,否則不能正確接收。
(2)數(shù)據(jù)位長度(8位或9位)。
(3)以二進制代碼發(fā)送還是ASCII碼形式發(fā)送。對于單片機與單片機之間的串行通信來說,以二進制代碼發(fā)送還是ASCII碼發(fā)送問題都不大。但當單片機與PC機串行通信時,以ASCII碼發(fā)送可能更有利于PC控件的檢測。
(4)校驗有無及校驗方式。在串行通信中,除了使用奇偶校驗、幀錯誤偵測等幀內(nèi)檢測方式外,還可能使用其他的檢驗方式—和校驗(往往僅保留和的低8位或低7位,甚至低4位)、某個特征數(shù)碼的倍數(shù)等。有時可能同時使用兩種校驗方式,以保證通信的可靠性。
(5)信息幀格式。信息幀包括信息幀起始標志、結束標志、信息幀長度、校驗方式及校驗信息位置等。通常使用發(fā)送信息(命令、數(shù)據(jù))中不可能出現(xiàn)的狀態(tài)編碼作為信息幀的起始和結束標志,它也常作為發(fā)送信息類別—是數(shù)據(jù),還是命令的識別碼。
(6)字節(jié)與字節(jié)之間的等待時間。在接收方接收了一個字節(jié)信息后,往往需要對信息進行判別、存儲等初步處理。在沒有聯(lián)絡信號的情況下,當通信波特率較高時,發(fā)送了一個字節(jié),必須等待特定時間后,才能發(fā)送下一個字節(jié),等待時間應略大于接收方處理一個字節(jié)所需的最長時間。因此,為提高通信速度,接收中斷服務程序執(zhí)行時間應盡可能短。當然,通過聯(lián)絡信號檢測接收設備是否就緒將縮短發(fā)送等待時間。例如,在圖8-16所示串行通信線路中,接收中斷有效,將RTS置為低電平表示接收方忙,在完成數(shù)據(jù)處理后,清除RTS“忙”狀態(tài),這樣發(fā)送方只要檢測到接收方非忙就發(fā)送。
(7)正確接收后的確認信號及時間,即發(fā)送了數(shù)據(jù)信息后,必須明確在多長時間內(nèi)收到應答信號,否則就認為失敗。
(8)出錯處理方式。對發(fā)送方來說,最常用的出錯處理方式是重新發(fā)送,即明確發(fā)送失敗后是否重發(fā)以及重發(fā)次數(shù)等;對接收方來說,常用的出錯處理方式包括接收異常后是否要求發(fā)送方重發(fā),在什么時候、用什么代碼通知發(fā)送方等。
(9)串行中斷優(yōu)先級。例如,A機向B機發(fā)送的信息幀中字節(jié)數(shù)變化大,如命令信息只有一個字節(jié),而數(shù)據(jù)信息可能含有多個字節(jié),且長度不確定。為簡化B機接收程序,可使用命令、數(shù)據(jù)信息中不可能出現(xiàn)的數(shù)碼作為信息幀的起始標志和結束標志。這樣接收方只要收到幀起始標志字節(jié),即認為是一幀信息的開始;收到結束標志,則認為已完整地接收了一幀信息。當然,如果發(fā)送的信息量少,信息幀長度變化不大,也可不設結束標志,而采用每次固定發(fā)送若干字節(jié)方式。這樣接收方收到幀起始標志后開始計數(shù),當收了指定字節(jié)后,就認為已完整地接收了一幀信息。例如,A機僅需向B機發(fā)送少量信息,如一個字節(jié)的命令信息或一到兩個字節(jié)的數(shù)據(jù)信息,且命令或數(shù)據(jù)信息中不含0A2H、0A6H。為簡化B機接收程序,可協(xié)議如下:每次固定發(fā)送4個字節(jié)。其中,第一個字節(jié)為A2H,是信息幀的起始標志,這樣B機收到A2H時,即認為是信息幀的開始;第二、三個字節(jié)為發(fā)送的命令或數(shù)據(jù);第四個字節(jié)高位為0,低7位為第二、三字節(jié)之和的低7位。對于長度為一個字節(jié)的命令或數(shù)據(jù),可用無用信息A6H或其他信息填充。
對于B機來說,如果收到的內(nèi)容為A2H,則認為是一幀信息的開始,復位接收計數(shù)器。當接收了4個字節(jié)后,就認為已完整地接收了一幀信息,校驗正確后發(fā)特征字,如發(fā)送A5H給A機,表明正確接收了A機發(fā)來的信息。下面是串行通信中常用的信息幀格式:8.4RS422/RS485總線
8.4.1RS422接口標準
RS422接口標準的發(fā)送器將TTL電平的發(fā)送信號DI轉換為差分(DifferentialDriverMode)形式的A、B兩路信號輸出,即A路信號與B路信號極性相反。當RS422接口標準發(fā)送器輸出信號電位差電平UAB在?+1.5~+6V之間時,定義為邏輯“1”;當輸出信號電位差電平UAB在?-6~-1.5V之間時,定義為邏輯“0”。相應地,RS422標準接口的接收器,將接收到的A、B兩路差分輸入信號還原為TTL電平輸出信號RO。對于接收器來說,當輸入差分信號電平UAB≥+200mV時,輸出信號RO為高電平(邏輯“1”);差分信號電平UAB≤-200mV時,輸出信號RO為低電平(邏輯“0”)。可見,RS422標準是一種采用平衡(差分)傳輸方式、單機發(fā)送多機接收的單向串行通信接口,如圖8-18(a)所示。為了能夠實現(xiàn)收發(fā)全雙工通信方式,需要4根傳輸線形成兩對差分信號線,即采用RS422接口標準實現(xiàn)甲乙兩設備之間數(shù)據(jù)接收與發(fā)送時,至少需要5根線(其中4根信號線和1根地線),如圖8-18(b)所示。圖8-18RS422接口標準串行通信示意圖發(fā)送器A、B兩輸出端電壓差電平UAB的范圍,以及接收器A、B兩輸入端電壓差電平UAB的范圍如圖8-19所示。發(fā)送器輸出信號經(jīng)雙絞線傳輸?shù)浇邮掌鰽、B兩輸入端后,將會有不同程度的衰減。衰減幅度與傳輸線長度、線徑(即直流電阻大小)等因素有關,當輸入的差分信號UAB小于接收器最小輸入電壓(200mV)時,接收器就無法識別。因此,盡管RS422接口標準最高傳輸率可達10Mb/s,但這時傳輸線長度就迅速銳減到1m以下。實踐表明,當傳輸線為1000m時,傳輸率不超過20kb/s。圖8-19差分輸出/輸入信號電平范圍8.4.2RS485標準采用RS422標準實現(xiàn)數(shù)據(jù)雙向傳輸時,兩設備之間至少需要5條傳輸線,這在遠距離通信中,成本較高。為此,EIA于1983年在RS422基礎上制定了RS485接口標準,主要增加了多點、雙向通信功能,即允許多個發(fā)送器連接到同一條總線上,同時增加了發(fā)送器的驅動能力和沖突保護功能,并擴展了總線的共模電壓范圍,后命名為TIA/EIA-485-A標準(簡稱RS485標準)。它實際上是RS422接口標準的發(fā)送器和接收器借助同一對差分信號線分時發(fā)送、接收數(shù)據(jù),屬典型的半雙工通信方式。在RS485接口標準中,由于收、發(fā)分時使用同一對數(shù)據(jù)線,因此必須給發(fā)送器增加使能控制信號DE(高電平有效)。當發(fā)送控制信號DE無效(低電平狀態(tài))時,發(fā)送器不工作,發(fā)送器兩差分輸出信號線A、B處于高阻態(tài)。相應地,為減小功耗,一般也給接收器增設使能控制信號(低電平有效)。當接收控制信號無效時,接收器不工作,輸出信號RO為高阻態(tài),如圖8-20所示。8.4.3RS422/RS485標準性能指標為便于比較,表8-6列出了RS232、RS422、RS485三種接口標準的主要性能指標。表8-6RS232、RS422、RS485接口標準的主要性能指標8.4.4RS485/RS422標準接口芯片簡介采用RS485/RS422接口標準通信時,發(fā)送方需要通過專用的接口器件,將待發(fā)送的TTL電平兼容信號轉換為兩路差分信號輸出;接收方也需要通過專用的接口器件,將差分形式輸入的信號轉換為TTL電平信號。目前RS485、RS422電平轉換器件生產(chǎn)廠家很多,均采用單一?+5.0V(或?+3.3V)電源供電,同一種類型接口器件的引腳大多相互兼容(即一般可相互替換),差別僅限于ESD(人體放電保護)功能的有無與強弱、發(fā)送器負載能力的大小、最大傳輸率、電源電壓的高低、功耗的大小等參數(shù)。圖8-21給出了Sipex公司的SP485E接口器件的內(nèi)部框圖及引腳排列順序(與工業(yè)標準485總線接口芯片75176兼容)。圖8-21RS485總線接口器件
RS422接口器件生產(chǎn)廠家很多,對于沒有收發(fā)使能控制端的RS422總線接口芯片(如Sipex公司的SP490E芯片),一般采用DIP-8或SOP-8封裝方式,如圖8-22(a)所示;對于帶有收發(fā)使能控制的RS422總線接口芯片(如Sipex公司的SP491E芯片),一般采用DIP-14或SOP-14封裝方式,如圖8-22(b)所示。在圖8-22中,A為接收器同相信號輸入端,B為接收器反相信號輸入端;Z為發(fā)送器同相信號輸出端,Y為發(fā)送器反相信號輸出端。圖8-22RS422總線接口器件在低速長距離的串行通信系統(tǒng)中,一般應優(yōu)先使用RS485總線構成半雙工通信方式,原因是它僅需要三根連線,一方面布線容易(可利用地線隔離),可靠性高;另一方面,線材消耗小,成本低。只有在高速短距離通信中,才考慮使用RS422總線。8.4.5RS485/RS422通信接口實際電路由RS485接口標準器件組成的基本串行通信電路如圖8-23所示。圖8-23RS485通信接口基本電路在圖8-23中,發(fā)送器輸入端T(即Di)可與MCU,如STM8SUART接口的串行數(shù)據(jù)發(fā)送端TXD相連,接收器的輸出端可與MCUUART接口的串行數(shù)據(jù)輸入端RXD相連。由于發(fā)送器使能端DE與接收器使能端一般連在一起,由MCU的另一個I/O引腳控制,當控制信號為高電平時,接收器輸出端處于高阻態(tài),因此,對于沒有上拉輸入的RXD引腳,則必須通過10kΩ電阻接電源VCC,以保證接收器輸出為高阻態(tài)時,MCU串行輸入引腳電平處于確定的高電平狀態(tài)。
R3為終端匹配電阻,其大小原則上與傳輸線特性阻抗相同。由于雙絞線特性阻抗大致為120Ω,因此R3一般取值為120Ω。不過,當通信距離小于300m或通信速率較低(小于20kb/s)時,可以不接R3(其好處是可以減小芯片的功耗)。電阻R1、R2是為了保證在RS485總線處于懸空(沒有連接)狀態(tài)時,使A、B差分線處于確定的高、低電平狀態(tài),避免RS485網(wǎng)絡癱瘓。電容C1、C2,電阻R4、R5是為了減小RS485總線工作的EMI(電磁輻射干擾)而設置的,它能有效地減小信號傳輸過程中的波形上沖、下沖。在EMI要求嚴格時,最好用100~220μH電感代替電阻R4、R5,而在EMI要求不高的應用場合,可以省去電容C1、C2。
ZD1、ZD2是TVS管。盡管RS485總線內(nèi)部具有一定的過壓保護功能,但為了保證接口電路的安全,外接TVS管還是必要的。
R6是上拉電阻,對于可編程為上拉輸入方式的MCU引腳,可省略。當RS485總線通信速率較低且MCUI/O資源不夠用時,也可以使用一只PNP三極管構成簡易的收發(fā)自動切換電路,如圖8-24所示。圖8-24簡易收發(fā)自動切換電路當發(fā)送端TXD為低電平時,T管飽和,收發(fā)控制信號為高電平,發(fā)送器處于發(fā)送狀態(tài);當發(fā)送端TXD為高電平時,T管截止,收發(fā)控制信號為低電平,發(fā)送器內(nèi)部輸出信號處于高阻態(tài),此時連接在A引腳的上拉電阻R1使差分輸出線A為高電平、連載在B引腳的下拉電阻R2使差分輸出線B為低電平,完成了邏輯電平“1”的發(fā)送。當收發(fā)控制信號為低電平時,接收器工作,接收器在TXD引腳發(fā)送邏輯電平“1”期間輸出高電平。不過,由于在自動切換過程中,控制管T的開和關需要一定的時間,因此該簡易自動切換電路不適合用于傳輸率大于20kb/s的串行通信系統(tǒng)中。8.4.6避免總線沖突方式
RS485總線屬于“一主多從”半雙工通信方式,任何時候系統(tǒng)中最多允許一個總線接口芯片處于發(fā)送狀態(tài),因此在正常狀態(tài)下,多采用主機輪流查詢方式與各從機通信,避免總線沖突。當RS485網(wǎng)絡中同時存在兩個或以上接口芯片處于發(fā)送狀態(tài)時,網(wǎng)絡會面臨癱瘓,甚至燒毀RS485接口芯片的危險。在由RS485構成的多機通信系統(tǒng)中,應根據(jù)MCU復位期間及復位后I/O引腳電平的狀態(tài),保證從機上電復位期間及上電復位后處于接收狀態(tài)(注:可不必關心主機的狀態(tài))。
RS485總線接口從機實用的上電抑制電路如圖8-25所示。圖中,上電復位期間,由R1、C1構成的RC充電電路將與非門輸入端鉗位在低電平狀態(tài),使施密特輸入與非門A輸出高電平,經(jīng)與非門B反相后,收發(fā)控制端為低電平,保證了RS485總線接口芯片處于接收狀態(tài),只要時間常數(shù)R1C1大于MCU上電復位時間即可。圖8-25中的與非門可以是74HC132芯片,也可以是CD4093芯片。對于上電復位期間和復位后處于高阻輸入狀態(tài)的MCU引腳,R2不宜省略,以避免復位期間以及復位后與非門輸入引腳處于懸空狀態(tài)。圖8-25從機上電抑制電路上電抑制電路形式還很多,例如,對于上電復位期間和復位后處于高電平狀態(tài)的MCU引腳(如MCS-51芯片),也可使用圖8-26(a)、(b)構成簡單的上電抑制電路。圖8-26適用于MCS-51芯片控制的上電抑制電路對于上電復位期間和復位后處于高電平狀態(tài)的MCU引腳,如果MCU采用高電平復位方式,如MCS-51,采用圖8-26(c)或(d)所示復位抑制電路更加可靠。對于復位期間與復位后引腳為高阻輸入狀態(tài)的MCU(如STM8、LPC900系列),可采用圖8-27所示的復位抑制電路。圖8-27復位期間與復位后MCU引腳處于高阻輸入狀態(tài)的復位抑制電路8.5串行外設總線接口(SPI)
STM8S系列MCU內(nèi)置了串行外設總線接口SPI(SerialPeripheralInterface)部件。SPI是一種高速的串行外設總線接口,采用全雙工、同步串行通信方式,其通信協(xié)議簡單,是單片機應用系統(tǒng)常用的一種串行通信方式之一。
SPI總線有主、從兩種工作模式,使用MOSI(MasterOut/SalveIn)引腳、MISO(MasterIn/SalveOut)引腳、輸入/輸出同步時鐘信號SCK、從設備選擇信號,來完成兩個SPI接口設備之間的數(shù)據(jù)傳輸。
SPI總線通信過程總是由SPI主設備啟動與控制,主設備提供了用于串行數(shù)據(jù)輸入/輸出的同步時鐘信號SCK,因此對主設備來說,SCK是輸出引腳;對從設備來說,SCK是輸入引腳。當SPI主設備通過MOSI引腳把數(shù)據(jù)串行傳輸?shù)綇脑O備,同時從設備通過MISO引腳將數(shù)據(jù)回送到主設備。顯然,MOSI引腳對主設備是輸出,對從設備是輸入;而MISO引腳對主設備是輸入,對從設備是輸出。根據(jù)SPI總線傳輸協(xié)議,對主設備來說,MISO引腳總是處于高阻輸入狀態(tài)。當SPI總線處于激活狀態(tài)時,MOSI、SCK引腳處于互補推挽輸出狀態(tài);當SPI總線空閑時,MOSI、SCK引腳處于高阻態(tài),防止爭奪SPI總線。對于從設備來說,MOSI、SCK引腳總是處于高阻輸入狀態(tài)。當SPI總線處于選中(片選信號輸入端為低電平時)狀態(tài)時,MISO引腳處于互補推挽輸出狀態(tài);當SPI總線處于非選中(片選信號輸入端為高電平時)狀態(tài),MISO引腳處于高阻態(tài),防止爭奪總線。為保證通信的可靠性,當SPI時鐘SCK頻率較高時,輸出引腳必須初始化為快速輸出模式。在“單主機多從機”SPI通信系統(tǒng)中,SPI總線主設備通過控制從機片選信號輸入端的電平,選中指定的從設備。8.5.1STM8S系列芯片SPI接口部件結構
STM8S系列MCUSPI總線接口部件的結構如圖8-28所示。它包括移位寄存器(SHIFTREGISTER)、波特率產(chǎn)生器(BAUDRATEGENERATOR)、主設備控制邏輯(MASTERCONTROLLOGIC)等部分。圖8-28SPI總線結構
STM8S系列MCUSPI總線接口部件功能很強,除了支持主從設備、時鐘速率、時鐘極性、時鐘相位等方式編程選擇外,還具有如下功能:
(1)主從設備可軟件選擇。在這種情況下,從設備選擇端(PE5)可作為GPIO引腳使用。
(2)單一數(shù)據(jù)線的半雙工模式與接收模式。
(3)?CRC校驗。8.5.2STM8S系列芯片SPI接口部件功能
1.數(shù)據(jù)傳輸時序數(shù)據(jù)傳輸時序由數(shù)據(jù)傳輸順序(LSBFIRST)、時鐘極性(CPOL)、時鐘相位(CPHA)確定,如圖8-29所示。在圖8-29中,時鐘極性CPOL確定了SPI總線空閑狀態(tài)下時鐘引腳SCK的電平狀態(tài),當CPOL為0時,在空閑狀態(tài)下,SCK引腳處于低電平;當CPOL為1時,在空閑狀態(tài)下,SCK引腳處于高電平。時鐘相位CPHA確定了數(shù)據(jù)傳送發(fā)生在時鐘SCK的前沿還是后沿,具體情況如表8-7所示。表8-7CPHA與CPOL不同組合對數(shù)據(jù)傳輸時序的影響數(shù)據(jù)傳輸順序(LSBFIRST)確定了是先輸出低位(LSB)還是高位(MSB)。當LSBFIRST位為0時,先輸出MSB,如圖8-29所示;當LSBFIRST位為1時,先輸出LSB。圖8-29SPI總線傳輸時序為保證數(shù)據(jù)順利傳輸,主從SPI設備的數(shù)據(jù)傳輸順序(LSBFIRST)、時鐘極性(CPOL)、相位(CPHA)必須一致。由于SPI通信過程由主設備控制,串行移位時鐘SCK由主設備提供,因此對從設備來說,SPI_CR1寄存器中的波特率位沒有意義。對從設備來說,必須保證SPI總線在空閑狀態(tài)下SCK引腳電平狀態(tài)與CPOL位保持一致。從圖8-29所示的SPI總線數(shù)據(jù)傳輸時序可以看出,SPI總線抗干擾能力比UART串行總線低。若時鐘極性CPOL定義為1(即總線空閑時SCK為高電平),則在總線空閑期間,當從設備、SCK引腳同時受到負脈沖干擾時,從設備會出現(xiàn)誤動作——串行移位寄存器通過MISO引腳輸出一位;而在數(shù)據(jù)傳輸(從設備片選信號有效)期間,如果SCK引腳受到正、負窄脈沖干擾,串行移位寄存器也會多移出一位。因此,SPI總線僅適用于干擾不嚴重的高速近距離通信。此外,盡可能地將時鐘極性(CPOL)定義為0(使空閑時SCK引腳為低電平),原因是總線空閑時,從設備選通信號為高電平,可有效地避免共模干擾造成從設備誤動作。
2.從設備選通信號的硬件/軟件選擇
STM8SMCU的SPI總線從設備選通信號具有硬件、軟件兩種選擇方式,如圖8-30所示。圖8-30從設備選通信號控制當SPI_CR2的SSM位為0時,SPI總線從設備選擇信號來自PE5引腳,即采用硬件選通方式;當SPI_CR2的SSM為1時,SPI總線從設備選擇信號由SPI_CR2的SSI位控制,此時PE5引腳可作為GPIO引腳使用,具體情況如表8-8所示。在STM8S系統(tǒng)中,若內(nèi)部無效(高電平),則無論是主設備還是從設備,SPI總線均處于禁用狀態(tài),輸出引腳電平由GPIO寄存器定義。表8-8從設備選通信號在STM8S系統(tǒng)中,采用硬件方式產(chǎn)生主從設備選通信號時,SPI總線在數(shù)據(jù)傳送過程中,主設備的引腳必須處于高電平狀態(tài),因此,作為主設備的SPI總線的引腳一般不能作為GPIO引腳使用。此外,當STM8內(nèi)核MCU為主設備時,考慮到STM8MCU復位前后I/O引腳處于懸空輸入狀態(tài),為防止從設備誤傳送,需在主設備的SCK引腳外接下拉(時鐘相位CPOL為0時)或上拉電阻R1(時鐘相位CPOL為1時);當從設備采用硬件選通方式,出于同樣的理由,也需在作為從設備選通信號的I/O引腳外接上拉電阻R2,以確保STM8內(nèi)核MCU復位時從設備的SCK、兩輸入信號處于期望的電平狀態(tài),如圖8-31所示。圖8-31硬件從機選通方式的SPI通信系統(tǒng)從圖8-31可以看出,在SPI通信系統(tǒng)中,主設備與從設備串行移位寄存器通過MOSI、MISO引腳首尾相連。在由STM8內(nèi)核MCU內(nèi)嵌SPI接口部件構成的“一主單從”或“一主多從”的SPI通信系統(tǒng)中,主設備、從設備均可選擇軟件從片選通方式,這樣可將主、從機的引腳均作為GPIO引腳使用。在“一主多從”的SPI通信系統(tǒng)中,如果從機采用硬件選通方式,如圖8-31(c)所示,依靠從設備引腳選定指定從機,任何時候最多只有一個從設備選通信號為低電平;如果采用軟件選通方式,可利用RXONLY控制位,使未選中的從設備僅接收而不發(fā)送。
3.數(shù)據(jù)傳輸模式
STM8系列MCUSPI總線數(shù)據(jù)傳輸模式,由控制寄存器SPI_CR2的BDM(單/雙向數(shù)據(jù)傳輸模式)、BDOE(雙向數(shù)據(jù)傳輸模式下輸入/輸出選擇)、RXONLY(輸出禁止)三個控制位來控制,如表8-9所示。表8-9數(shù)據(jù)傳輸模式注:O表示輸出(發(fā)送);I表示輸入(接收)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦產(chǎn)資源產(chǎn)權交易考核試卷
- 玻璃行業(yè)市場營銷策略考核試卷
- 玻璃加工行業(yè)的職業(yè)技能培訓考核試卷
- 2024年防腐保溫工程合同
- 電子節(jié)能照明設備升級考核試卷
- DB5133T 72-2023 亞丁牦牛規(guī)范
- 小學生課外閱讀情況總結
- 教師實習報告摘要
- DB5133T 73-2023 藏傳佛教活動場所集中供餐管理規(guī)范
- DB5133T 3-2019 藏山羊飼養(yǎng)管理技術規(guī)范
- 水上交通安全生產(chǎn)培訓
- 加強老舊小區(qū)物業(yè)管理的思考
- 超聲影像學基礎
- 倉庫溫濕度分布驗證報告
- 【A科技公司員工招聘問題調(diào)查研究及優(yōu)化策略13000字(論文)】
- 土地整治投標方案(完整技術標)
- 某煤礦潰倉事故專項安全風險辨識評估報告示例
- “雙減”背景下初中數(shù)學作業(yè)設計新思路 論文
- 【幼兒園班本課程研究文獻綜述4100字(論文)】
- 上頜竇瘺修補術課件
- 支部書記辭職申請書
評論
0/150
提交評論