串口通信技術與編程應用_第1頁
串口通信技術與編程應用_第2頁
串口通信技術與編程應用_第3頁
串口通信技術與編程應用_第4頁
串口通信技術與編程應用_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

串口通信技術與編程應用7.1USART的功能和內(nèi)部結(jié)構7.2USART的寄存器7.3USART的收發(fā)格式7.4USART波特率的設置7.5USART硬件流控制7.6USART中斷請求與模式配置7.7USART編程應用實例

7.1USART的功能和內(nèi)部結(jié)構

7.1.1USART的主要功能

USART提供了一種靈活的方法與工業(yè)標準的異步串行數(shù)據(jù)格式以外的外部設備進行全雙工數(shù)據(jù)交換。USART利用分數(shù)波特率發(fā)生器提供較寬范圍的波特率參數(shù)選擇。同時它也支持同步單向通信和單線半雙工通信,支持LIN(局域互聯(lián)網(wǎng))、智能卡協(xié)議和IrDA(紅外數(shù)據(jù)組織)SIRENDEC規(guī)范,以及調(diào)制解調(diào)器CTS/RTS操作。它還允許多個處理器之間進行數(shù)據(jù)通信,通過使用多緩存配置的DMA方式,實現(xiàn)高速數(shù)據(jù)通信。

USART1接口通信速率可達4.5?Mb/s,其他接口的通信速率可達2.25?Mb/s。USART1、USART2和USART3接口具有硬件的CTS和RTS信號管理,兼容ISO7816的智能卡模式和SPI通信模式。除UART5外,所有其他接口都可以使用DMA操作。1.異步模式

(1)總線在發(fā)送或接收前應處于空閑狀態(tài)。

(2)一個起始位。

(3)一個數(shù)據(jù)字(8位或9位),最低有效位在前。

(4)?0.5、1.5、2個停止位,由此表明數(shù)據(jù)幀的結(jié)束。

(5)使用分數(shù)比特率發(fā)生器(12位整數(shù)和4位小數(shù)的表示方法)。

(6)獨立的發(fā)送器和接收器使能位。

(7)接收緩沖器滿、發(fā)送緩沖器空和傳輸結(jié)束標志。

(8)溢出錯誤、噪聲錯誤、幀錯誤和校驗錯誤標志。

(9)硬件數(shù)據(jù)流控制。

(10)一個狀態(tài)寄存器(USART_SR)。

(11)數(shù)據(jù)寄存器(USART_DR)。

(12)一個比特率寄存器(USART_BRR),12位的整數(shù)和4位小數(shù)。

(13)一個智能卡模式下的保護時間寄存器(USART_GTPR)。

2.同步模式

同步模式需要用到SCLK信號,作為發(fā)送器同步傳輸?shù)臅r鐘輸出引腳。數(shù)據(jù)可在Rx引腳上利用SCLK信號同步接收。SCLK時鐘相位和極性都可用軟件編程。在智能卡通信模式中,SCLK為智能卡提供同步時鐘。

3.IrDA傳輸模式需要的引腳

(1)?IrDA_RDI為IrDA模式下的數(shù)據(jù)輸入。

(2)?IrDA_TDO為IrDA模式下的數(shù)據(jù)輸出。

4.硬件流控制模式中需要的引腳

(1)?nCTS引腳為清除發(fā)送信號。若nCTS是高電平,在當前數(shù)據(jù)傳輸結(jié)束時,可阻斷下一次的數(shù)據(jù)發(fā)送。

(2)?nRTS引腳為發(fā)送請求信號。若nRTS是低電平,表明USART已準備好接收數(shù)據(jù)。

圖7.1是幾種典型的串口通信功能示意圖。圖7.1幾種典型的串口通信方式示意圖7.1.2USART的內(nèi)部結(jié)構

接口通常通過3個引腳(Rx、Tx和GND)與其他設備連接在一起。任何USART雙向通信至少需要兩個引腳:接收數(shù)據(jù)輸入(Rx)和發(fā)送數(shù)據(jù)輸出(Tx)。

Rx通過采樣技術區(qū)別數(shù)據(jù)和噪聲,從而恢復數(shù)據(jù)。當發(fā)送器被禁止時,輸出引腳恢復到它的I/O端口配置。當發(fā)送器被激活,并且不發(fā)送數(shù)據(jù)時,Tx引腳處于高電平。USART硬件結(jié)構可分為發(fā)送與接收、控制、中斷和波特率發(fā)生器4個部分。1.發(fā)送與接收部分

USART發(fā)送與接收部分電路結(jié)構如圖7.2所示。圖7.2USART發(fā)送與接收部分電路結(jié)構圖

當需要發(fā)送數(shù)據(jù)時,內(nèi)核(或DMA外設)把數(shù)據(jù)從內(nèi)存(變量)寫入發(fā)送數(shù)據(jù)寄存器TDR,之后發(fā)送控制器自動把數(shù)據(jù)從TDR加載到發(fā)送移位寄存器中,然后通過串口線Tx,把數(shù)據(jù)逐位地從Tx引腳發(fā)送出去。在數(shù)據(jù)從TDR轉(zhuǎn)移到移位寄存器時,會產(chǎn)生發(fā)送寄存器TDR已空事件TXE。當數(shù)據(jù)從移位寄存器全部發(fā)送出去時,會產(chǎn)生數(shù)據(jù)發(fā)送完成事件TC。這些事件可以在狀態(tài)寄存器中查詢到。

而接收數(shù)據(jù)則是一個逆過程,數(shù)據(jù)從串口線Rx引腳逐位地輸入接收移位寄存器中,然后自動地把數(shù)據(jù)轉(zhuǎn)移到接收數(shù)據(jù)寄存器RDR,最后用軟件(或DMA)讀取到內(nèi)存(變量)中。

2.控制及中斷部分圖7.3USART控制及中斷部分電路結(jié)構圖

發(fā)送器與接收器控制部分,包括USART三個控制寄存器(CR1、CR2和CR3)及一個狀態(tài)寄存器(SR)。該部分通過向寄存器寫入各種控制參數(shù)來控制發(fā)送和接收狀態(tài)(如奇偶校驗位、停止位等),還包括對USART中斷的控制。串口的狀態(tài)在任何時候都可以從狀態(tài)寄存器中查詢到。

3.波特率發(fā)生器

USART波特率發(fā)生器包括發(fā)送器波特率控制、接收器波特率控制和波特率時鐘分頻器等部分,其結(jié)構如圖7.4所示。圖7.4USART波特率發(fā)生器結(jié)構圖7.2USART的寄存器圖7.5USART寄存器地址映像及復位值

7.3USART的收發(fā)格式

在STM32xx系列ARM處理器中,用戶可以通過設置USART_CR1寄存器中的M標志位來選擇是8bit字長還是9bit字長。USART串口通信中字符長度的設置如圖7.6所示。圖7.6USART字符長度的設置

在USART串口數(shù)據(jù)通信過程中,Tx引腳在起始位期間一直保持低電平,而在停止位期間則保持高電平。

在數(shù)據(jù)幀中,空閑符被認為是一個全“1”的幀,其后緊跟著包含數(shù)據(jù)的下一個幀的起始位。而間隙符是一個幀周期全接收到“0”的數(shù)。在間隙幀之后,發(fā)送器會自動插入一個或者兩個停止位,即邏輯“1”,用于應答起始位。

需要指出的是,發(fā)送和接收數(shù)據(jù)都是通過波特率產(chǎn)生器驅(qū)動的。當發(fā)送者和接收者的使能位均被設置為“1”時,則會為彼此分別產(chǎn)生驅(qū)動時鐘。7.3.1USART的發(fā)送器

1.字符發(fā)送

在USART發(fā)送數(shù)據(jù)的過程中,Tx引腳先出現(xiàn)最低有效位。在這種模式下,USART_DR寄存器包含了一個與內(nèi)部總線和發(fā)送移位寄存器之間的緩沖寄存器,即TDR。在字符發(fā)送過程中,每個字符之前都有一個邏輯低電平的起始位,用來分隔發(fā)送的字符數(shù)目。

在USART串口發(fā)送字符的過程中,TE標志位在數(shù)據(jù)發(fā)送期間不能復位(如果數(shù)據(jù)發(fā)送期間復位標志TE,將會破壞Tx發(fā)送引腳上的數(shù)據(jù)信息,因為此時波特率計數(shù)器將被凍結(jié),當前發(fā)送的數(shù)據(jù)將丟失)。在TE標志位使能之后,USART串口將發(fā)送一個空閑幀。

2.可配置的停止位

在USART串口通信的過程中,每個字符所帶的停止位的個數(shù)可以通過控制寄存器2中的第12位和第13位進行配置,如圖7.7所示。具體配置的內(nèi)容如下:

(1)?1個停止位。系統(tǒng)默認停止位數(shù)目為1個停止位。

(2)?2個停止位。通常情況下,USART在單線和調(diào)制解調(diào)器模式下支持2個停止位。

(3)?0.5個停止位。當USART處于智能卡模式下接收數(shù)據(jù)的時候支持0.5個停止位。

(4)?1.5個停止位。當USART處于智能卡模式下發(fā)送數(shù)據(jù)的時候支持1.5個停止位。

USART通信過程中空閑幀的發(fā)送已經(jīng)包含了停止位。間隙幀可以是10個低位(標志位M=0)之后加上1個對應配置的停止位,也可以是11個低位(標志位M=l)之后加上1個配置的停止位。但是,不能發(fā)送長度大于10或11個低位的長間隙。

用戶可以通過以下步驟實現(xiàn)對USART通信停止位的設置:

(1)通過將USART_CR1寄存器中的UE標志位設置為1來使能USART串口通信功能。

(2)通過配置USART_CR1寄存器中的M標志位來定義字長(當標志位M=0時,字長為10;當標志位M=1時,字長為11)。

(3)停止位的個數(shù)可通過USART_CR2寄存器配置。

(4)如果用戶釆用多緩沖通信,則需要選擇USART_CR3寄存器中的DMA使能位,即DMAT標志位。用戶可以按照多緩沖通信的方式配置DMA寄存器。

(5)通過設置USART_CR1寄存器中的TE標志位發(fā)送一個空閑幀作為第一次數(shù)據(jù)發(fā)送。

(6)通過USART_BRR寄存器選擇數(shù)據(jù)通信的波特率。

(7)向USART_DR寄存器中寫入需要發(fā)送的字符(這個操作會清除TXE標志位),停止位就會自動加在字符的末端。圖7.7USART通信中的停止位

3.單字節(jié)通信

在USART單字節(jié)通信過程中,清除TXE標志位一般都是通過向數(shù)據(jù)寄存器中寫入數(shù)據(jù)來完成的。但TXE標志位是由系統(tǒng)硬件所設置的,且該標志位用來表明以下內(nèi)容:

(1)數(shù)據(jù)已經(jīng)從TDR中轉(zhuǎn)移到移位寄存器,數(shù)據(jù)發(fā)送已經(jīng)開始。

(2)?TDR寄存器是空的。

(3)數(shù)據(jù)已寫入USART_DR寄存器,而且不會覆蓋前面的數(shù)據(jù)內(nèi)容。

如果TXEIE標志位為1,則表明將產(chǎn)生一個中斷。

如果USART接口沒有進行數(shù)據(jù)發(fā)送,用戶向USART_DR寄存器中寫入一個數(shù)據(jù),該數(shù)據(jù)將直接被放入移位寄存器中。在發(fā)送開始的時候,TXE標志位也將被設置為1。當一個數(shù)據(jù)幀發(fā)送完成,即在結(jié)束位之后,TC標志位將被設置為1。如果USART_CR1寄存器中的TCIE標志位被設置為1,將產(chǎn)生一個中斷。

用戶可以通過軟件的方式來清除TC標志位,具體操作步驟如下:

(1)讀一次USART_SR寄存器。

(2)寫一次USART_DR寄存器。

4.間隙字符

在USART通信過程中,用戶可以通過設置SBK標志位來發(fā)送一個間隙字符。間隙幀的長度與標志位M有關。

如果SBK標志位被設置為1,在完成當前的數(shù)據(jù)發(fā)送之后將在Tx線路上發(fā)送一個間隙字符。間隙字符發(fā)送完成后,由硬件對SBK標志位進行復位。USART在最后一個間隙幀的末端插入一個邏輯1,從而保證下一個幀的起始位能夠被識別。

7.3.2USART的接收器

USART通信接口中的接收器可以接收8位或9位的數(shù)據(jù)。同樣,數(shù)據(jù)字的長度取決于USART_CR1寄存器中的M標志位。

1.字符接收

在USART數(shù)據(jù)通信接收期間,Rx引腳最先接收到最低有效位。在這種模式下,USART_DR寄存器由一個內(nèi)部總線和接收位移寄存器之間的緩沖區(qū)RDR構成。

有關USART字符接收的具體流程如下。

(1)通過將USART_CR1寄存器中的UE標志位設置為1來使能USART。

(2)通過配置USART_CR1寄存器中的M標志位來定義字長。

(3)通過USART_CR2寄存器配置停止位的個數(shù)。

(4)如果發(fā)生多緩沖通信,則選擇USART_CR3寄存器中的DMA使能位,即DMAT標志位,按照多緩沖通信中的配置方法來設置DMA寄存器。

(5)通過波特率寄存器USART_BRR來選擇合適的波特率。

(6)將USART_CR1寄存器中的RE標志位設置為1,即能使接收器開始尋找起始位。

在USART通信接口中接收到一個字符的時候,系統(tǒng)將執(zhí)行如下操作:

(1)?RXNE標志位被設置為1,表明移位寄存器中的內(nèi)容被轉(zhuǎn)移到RDR,即數(shù)據(jù)已經(jīng)接收到并且可供讀取。

(2)如果RXNEIE標志位被設置為1,系統(tǒng)將產(chǎn)生一個中斷。

(3)在數(shù)據(jù)接收期間如果發(fā)現(xiàn)幀錯誤、噪聲或溢出錯誤,則錯誤標志將會被設置為1。

(4)在多緩沖接收過程中,RXNE在每接收到一個字節(jié)之后都會被設置為1,并通過DMA讀取數(shù)據(jù)寄存器來消除該標志位。

(5)在單緩沖模式下,對RXNE標志位的清除是由軟件讀取USART_DR寄存器來完成的。RXNE標志位也可通過直接對其寫0進行清除。但需要注意的是,RXNE標志位必須在下一個字符接收完成前被清除,否則將產(chǎn)生溢出錯誤。

2.溢出錯誤

當USART通信接口接收到一個字符,而RXNE標志位還沒有被復位時,系統(tǒng)將出現(xiàn)溢出錯誤。換而言之,在RXNE標志位被清除之前數(shù)據(jù)不能從移位寄存器轉(zhuǎn)移到RDR寄存器。

在每次收到一個字節(jié)的數(shù)據(jù)后,RXNE標志位都會被設置為1。如果在下一個字節(jié)已經(jīng)被接收或者前一次DMA請求尚未得到服務響應的時候,RXNE置位同樣會產(chǎn)生一個溢出錯誤。在發(fā)生溢出時會發(fā)生以下情況:

(1)?ORE標志位被設置為1。

(2)?RDR中的內(nèi)容不會丟失,用戶在讀取USART_DR寄存器的時候,前一個數(shù)據(jù)仍然保持有效。

(3)移位寄存器將被覆蓋,在此之后所有溢出期間接收到的數(shù)據(jù)都將丟失。

(4)如果RXNEIE標志位被設置為1或EIE的DMAR標志位被設置為1,系統(tǒng)將產(chǎn)生一個中斷。

(5)用戶可以通過對USART_SR寄存器進行讀數(shù)據(jù)操作后再繼續(xù)讀USART_DR寄存器來實現(xiàn)對ORE標志位的復位操作。

3.噪聲錯誤

在ARM處理器中,可以通過“過采樣”技術有效輸入數(shù)據(jù)和噪聲,從而實現(xiàn)數(shù)據(jù)恢復(不可以在同步模式下使用)。

當在USART數(shù)據(jù)幀中檢測到噪聲時,將產(chǎn)生以下動作狀態(tài):

(1)?NE標志位在RXNE位的上升沿被設置為1。

(2)無效的數(shù)據(jù)從移位寄存器轉(zhuǎn)移到USART_DR寄存器。

(3)如果是單字節(jié)通信,將不會產(chǎn)生中斷,但NE標志位將和自身產(chǎn)生中斷的RXNE標志位一起作用。

(4)在多緩沖通信中,如果USART_CR3寄存器中的EIE標志位被設置為1,將導致一個系統(tǒng)中斷。

(5)用戶可以通過依次讀取USART_SR寄存器和USART_DR寄存器的方式對NE標志位進行復位。

7.4USART波特率的設置

波特率是每秒鐘傳送二進制數(shù)的位數(shù),單位為位/秒(bitpersecond,bps)。波特率是串行通信的重要指標,用于表征數(shù)據(jù)傳輸?shù)乃俣?,但與字符的實際傳輸速度不同。字符的實際傳輸速度是指每秒鐘內(nèi)所傳字符幀的幀數(shù),與字符幀格式有關。例如,波特率為1200?b/s的通信系統(tǒng),若采用11數(shù)據(jù)位字符幀,則字符的實際傳輸速度為1200/11=109.09幀/秒,每位的傳輸時間為1/1200秒。

接收器和發(fā)送器的波特率在USARTDIV中的整數(shù)和小數(shù)位中的值應設置成相同的。波特率通過USART_BRR寄存器來設置,包括12位整數(shù)部分和4位小數(shù)部分。USART_BRR寄存器格式如圖7.8所示。圖7.8USART_BRR寄存器格式

圖7.8中,位0~位3定義了USART波特率分頻器除法因子(USARTDIV)的小數(shù)部分。位4~位15定義了USAKT波特率分頻器除法因子(USARTDIV)的整數(shù)部分。

發(fā)送和接收的波特率計算公式如下:

波特率=fPCLKx/(16×USARTDIV)

式中,fPCLKx(x=1,2)是外設的時鐘,PCLK1用于USART2、USART3、USART4和USART5,PCLK2用于USART1。USARTDIV是一個無符號的定點數(shù)。例7.1要求USARTDIV=25.62d,就有

DIV_Fraction=16×0.62d=9.92d,近似等于10d=0x0A

DIV_Mantissa=mantissa(25.620d)=25d=0x19

所以,USART_BRR=0x19A。

例7.2要求USARTDIV=50.99d,就有

DIV_Fraction=16×0.99d=15.84d≈16d=0x0

DIVMantissa=mantissa(50.990d)=50d=0x32

所以,USART_BRR=0x330。

7.5USART硬件流控制

串口之間在傳輸數(shù)據(jù)時,經(jīng)常會出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象,或者兩臺計算機的處理速度不同,如臺式機與單片機之間的通信,若接收端數(shù)據(jù)緩沖區(qū)已滿,則此時繼續(xù)發(fā)送來的數(shù)據(jù)就會丟失。為了解決數(shù)據(jù)丟失現(xiàn)象,USART中設計了硬件流控制。當接收端數(shù)據(jù)處理能力不足時,就發(fā)出“不再接收”的信號,發(fā)送端即停止發(fā)送,直至收到“可繼續(xù)發(fā)送”的信號后再發(fā)送數(shù)據(jù)。因此,硬件流控制可以控制數(shù)據(jù)傳輸?shù)倪M程,防止數(shù)據(jù)的丟失。硬件流控制常用的有RTS/CTS(請求發(fā)送/清除發(fā)送)流控制和DTR/DSR(數(shù)據(jù)終端就緒/數(shù)據(jù)設置就緒)流控制。用RTS/CTS流控制時,應將通信兩端的RTS、CTS線對應相連,數(shù)據(jù)終端設備(如計算機)使用RTS來協(xié)調(diào)數(shù)據(jù)的發(fā)送,而數(shù)據(jù)通信設備(如調(diào)制解調(diào)器)則用CTS來啟動和暫停來自計算機的數(shù)據(jù)流。

利用nCTS輸入和nRTS輸出可以控制兩個設備之間的串行數(shù)據(jù)流。兩個串口之間的硬件流控制連線如圖7.9所示。圖7.9兩個串口之間的硬件流控制

1.RTS流控制

如果RTS流控制被使能(RTSE=1),只要USART接收器準備好接收新的數(shù)據(jù),nRTS就變成有效(低電平)。當接收寄存器內(nèi)有數(shù)據(jù)到達時,nRTS被釋放,由此表明希望在當前幀結(jié)束時停止數(shù)據(jù)傳輸。

2.CTS流控制

如果CTS流控制被使能(CTSE=1),發(fā)送器在發(fā)送下一幀前檢查nCTS輸入。如果nCTS有效(低電平),則下一個數(shù)據(jù)被發(fā)送(假設那個數(shù)據(jù)是準備發(fā)送的,即TXE=0),否則下一幀數(shù)據(jù)不被發(fā)送出去。若nCTS在傳輸期間變成無效,當前的傳輸完成后即停止發(fā)送。當CTSE=1時,只要nCTS輸入變換狀態(tài),硬件就自動設置CTSIE狀態(tài)位,它表明接收器是否已準備好進行通信。如果設置了USART_CR3寄存器的CTSIE位,則產(chǎn)生中斷。7.6USART中斷請求與模式配置

USART的各種中斷事件被連接到同一個中斷向量。有以下幾種中斷事件:

(1)發(fā)送期間的中斷事件包括發(fā)送完成、清除發(fā)送和發(fā)送數(shù)據(jù)寄存器空。

(2)接收期間的中斷事件包括閑總線檢測、溢出錯誤、接收數(shù)據(jù)寄存器非空中斷、檢驗錯誤、LIN斷開符號檢測、噪聲標志(僅在多緩沖器通信)和幀錯誤(僅在多緩沖器通信)。

(3)如果設置了對應的使能控制位,這些事件就會產(chǎn)生各自的中斷。

USART各種中斷事件邏輯如圖7.10所示。圖7.10USART中斷邏輯圖

7.7USART編程應用實例

7.7.1串口通信應用基礎

1.串口連接

STM32F103x4/6系列器件有兩個同步/異步串口(USART1和USART2),STM32F103xC/D/E有5個串口(USART1、USART2、USART3、UART4和UART5)。在STM32處理器中,串口引腳往下兼容(即同名的串口引腳接線相同)。圖7.11是STM32F103x系列器件的5個默認串口連接示意圖。在硬件設計中如不需要硬件流控制,可不連接nCTS和nRTS信號線。

圖7.11

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論