<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32F10xxx架構:通用同步異步收發(fā)器USART--USART通用

          STM32F10xxx架構:通用同步異步收發(fā)器USART--USART通用

          作者: 時間:2016-11-10 來源:網絡 收藏
          USART簡介:
          USART利用分數波特率發(fā)生器提供寬范圍的波特率選擇。支持同步單向通信和半雙工單線通信,也支持LIN(局部互聯(lián)網)、智能卡協(xié)議、IrDA(紅外數據組織)SIR ENDEC規(guī)范、調制解調器(CTS/RTS)操作。允許多處理器通信。使用多級緩沖配置的DMA方式,可以實現(xiàn)高速數據通信。
          USART主要特性:
          全雙工異步通信,NRZ標準格式,分數波特率發(fā)生器系統(tǒng)(發(fā)生和接收共用的可編程波特率,最高達4.5Mbits/s),8-9位數據長度,1-2位停止位,LIN主發(fā)送同步斷開符的能力及LIN從檢測斷開符的能力(當配置成LIN時生成13位斷開符,檢測10/11位斷開符),發(fā)送方為同步傳輸提供時鐘,IRDA SIR編解碼器(正常模式下支持3/16位持續(xù)時間),智能卡模擬功能(支持ISO7816-3標準的異步智能卡協(xié)議,用到0.5/1.5個停止位),單線半雙工通信,可配置的使用DMA的多緩沖器通信(在SRAM里利用集中式DMA緩沖接收/發(fā)送字節(jié)),單獨的發(fā)送器和接收器使能位,檢測標志(接收緩沖器滿,發(fā)送緩沖器空,傳輸結束標志),校驗控制(發(fā)送校驗位,對接收數據進行校驗),四個錯誤檢測標志(溢出,噪音,幀錯誤,校驗錯誤),10個帶標志中斷源(CTS改變,LIN斷開符檢測,發(fā)送數據寄存器空,發(fā)送完成,接收數據寄存器滿,檢測到總線為空閑,溢出錯誤,幀錯誤,噪音錯誤,校驗錯誤),多處理器通信(如果地址不匹配,則進入靜默模式),從靜默模式中喚醒(通過總線檢測和地址標志檢測),兩種喚醒接收器的方式(地址位MSB 第9位,總線空閑)。
          USART功能概述:
          1、USART雙向通信至少需要兩個腳:RX(接收數據輸入)、TX(發(fā)送數據輸出)。
          RX:接收數據串行輸入,通過采樣技術來區(qū)別數據和噪音,從而恢復數據。
          TX:發(fā)送數據輸出,當發(fā)送器被禁止時,輸出引腳恢復到它的IO端口配置。當發(fā)送器被激活并且不發(fā)送數據時,TX引腳處于高電平。在單線和智能卡模式里,此引腳被同時用于數據的發(fā)送和接收。
          總線在發(fā)送和接收前應處于空閑狀態(tài),起始位(1個),數據位(1個,8-9位,最低有效位在前),停止位(0.5,1.5,2位,表明數據幀結束),分數波特率發(fā)生器(12位整數和4位小數的表示方法),狀態(tài)寄存器1個(USART_SR),數據寄存器1個(USART_DR),波特率寄存器1個(USART_BRR,12位整數和4位小數)。一個智能卡模式下的保護時間寄存器(USART_GTPR)。
          2、USART工作于同步模式時,需要一個引腳:CK。
          CK:發(fā)送器時鐘的輸出,此引腳輸出用于同步傳輸的時鐘。在start和stop位上沒有時鐘脈沖,軟件可選地,可以在最后一個數據位送出一個時鐘脈沖。數據可以在RX上同步被接收。這可以用來控制帶移位寄存器的外部設備(例如LCD驅動器),時鐘相位和極性都是軟件可編程的。在智能卡模式里,CK可以為智能卡提供時鐘。
          3、USART工作于IRDA模式時,需要兩個引腳:IRDA_RDI(數據輸入),IRDA_TDO(數據輸出)
          4、USART工作于硬件流控模式時,需要兩個引腳:nCTS,nRTS。
          nCTS:清除發(fā)送,若是高電平,在當前數據傳輸結束時阻斷下一次的數據發(fā)送。
          nRTS:發(fā)送請求,若是低電平,表明USART準備好接受數據。
          USART特性描述:
          字長可以通過編程USART_CR1寄存器中的M位,選擇成8位或者9位。在起始位期間,TX腳處于低電平,在停止位期間處于高電平。
          空閑符號被視為完全由“1”組成的完整的數據幀,后面跟著包含了數據的下一幀的開始位(“1”的位數也包含了停止位的位數)。
          斷開符號被視為在一個幀周期內全部接收到“0”(包括停止位期間,也是“0”)。在斷開幀結束時,發(fā)送器再插入1或2個停止位(“1”)來應答起始位。
          發(fā)送和接收由一共用的波特率發(fā)生器驅動,當發(fā)送器和接收器的使能分別置位時,分別為其產生時鐘。
          USART寄存器描述:
          1、USART狀態(tài)寄存器(USART_SR)
          1】地址偏移:0x00,復位值:0x00C0
          2】位31-位10:保留位,硬件強制為0
          位9:CTS(CTS標志位):在USART4和USART5上不存在這一位。參照上文所述的硬件流模式(USART功能概述里面)。如果設置了“CTSE位”,當nCTS輸入變化狀態(tài)時,該位被硬件置高。由軟件將其清零。如果USART_CR3中的CTSIE為“1”,則產生中斷。 置為0時,表示nCTS狀態(tài)線上沒有變化,置為1時,表示nCTS狀態(tài)線上發(fā)生變化。
          位8:LBD(LIN斷開檢測標志):當探測到LIN斷開時,該位由硬件置“1”,由軟件清“0”(向該位寫0)。如果USART_CR3中的LBDIE為“1”,則產生中斷。 置為0時,表示沒有檢測到LIN斷開,置為1時,表示檢測到LIN斷開。
          位7:TXE(發(fā)送數據寄存器空):當TDR寄存器中的數據被硬件轉移到移位寄存器的時候,該位被硬件置位,如果USART_CR1寄存器的TXEIE為1,則產生中斷。對USART_DR的寫操作,將該位清零。注意在單緩沖器傳輸中使用該位。 置為0時表示數據還沒有被轉移到移位寄存器,置為1時,表示數據已經被轉移到移位寄存器。
          位6:TC(發(fā)送完成):當包含數據的一幀發(fā)送完成后,并且TXE=1時,由硬件將該位置1。如果USART_CR1中的TCIE為1,則產生中斷。由軟件序列清除該位(先讀USART_SR,然后寫入USART_DR)。TC位也可以通過寫“0”來清除,只有在多緩沖通訊中才推薦這種清除程序。置為0時,表示發(fā)送未完成,置為1時,表示發(fā)送完成。
          位5:RXNE(讀數據寄存器非空):當RDR移位寄存器中的數據被轉移到USART_DR寄存器中,該位被硬件置位。如果USART_CR1寄存器中的RXNEIE為1,則產生中斷。對USART_DR的讀操作可以將該位清0。RXNE位也可以通過寫0來清除,只有在多緩沖通訊錄中才推薦這種清除程序。置為0表示數據沒有收到,置為1表示收到數據,且可以讀出。
          位4:IDLE(檢測到總線空閑):當檢測到總線空閑時,該位被硬件置位。如果USART_CR1中的IDLEIE為1,則產生中斷。由軟件序列清除該位(先讀USART_SR,然后讀USART_DR)。置為0時,表示沒有檢測到空閑總線,為1時表示檢測到空閑總線。備注:IDLE位不會被置高直到RXNE位被置起(即又一次檢測到空閑總線)
          位3:ORE(過載錯誤):當RXNE仍然是1的時候,當前被接收在移位寄存器中的數據,需要傳送至RDR寄存器時,硬件將該位置位。如果USART_CR1中的RXNEIE為1的話,則產生中斷。由軟件序列將其清零(先讀USART_SR,然后讀USART_CR)。置為0時表示沒有過載錯誤,置為1時表示檢測到過載錯誤。備注:如果該位被置位時,RDR寄存器的值不會丟失。但是移位寄存器中的數據會被覆蓋。如果設置了EIE位,在多緩沖器通信模式下,ORE標志置位會產生中斷。
          位2:NE(噪聲錯誤標志):當接收到的幀檢測到噪音時,由硬件對該位置位。由軟件序列對其清零(先讀USART_SR,然后讀USART_DR)。置為0時表示沒有檢測到噪聲,置為1時表示檢測到噪聲。備注:該位不會產生中斷,因為它和RXNE一起出現(xiàn),硬件會在設置RXNE標志時產生中斷。在多緩沖區(qū)通信模式下,如果設置了EIE位,則設置NE標志時會產生中斷。
          位1:FE(幀錯誤):當檢測到同步錯位,過多的噪聲或者檢測到斷開符,該位被硬件置位,由軟件序列將其清零,先讀USART_SR,再讀USART_DR。為0時表示沒有檢測到幀錯誤,為1時表示檢測到幀錯誤或者break符。備注:該位不會產生中斷,因為它和RXNE一起出現(xiàn),硬件會在設置RXNE標志時產生中斷。如果當前傳輸的數據既產生了幀錯誤,又產生了過載錯誤,硬件還是會擠出該數據的傳輸,并且只設置ORE標志位。在多緩沖區(qū)通信模式下,如果設置了EIE位,則設置FE標志會產生中斷。
          位0:PE(校驗錯誤):在接收模式下,如果出現(xiàn)奇偶校驗錯誤,硬件對該位置位。由軟件序列對其清零(依次讀USART_SR和USART_DR)。在清除PE位前,軟件必須等待RXNE標志位被置“1”。如果USART_CR1中的PEIE為“1”,則產生中斷。置為0時表示沒有奇偶校驗錯誤,置為1時表示存在奇偶校驗錯誤。
          2、USART數據寄存器(USART_DR)
          1】地址偏移:0x04,復位值:不定
          2】位31-9:保留位,硬件強制為0;
          位8-0:DR[8:0],數據值。包含了發(fā)送和接收的數據。由于它是由兩個寄存器組成的,一個給發(fā)送用(TDR),一個給接受用(RDR),該寄存器兼具讀和寫的功能。TDR寄存器提供了內部總線和輸出移位寄存器之間的并行接口。RDR寄存器提供了輸出移位寄存器和內部總線之間的并行接口。當使能校驗位(USART_CR1中的PCE位被置位)進行發(fā)送時,寫到MSB的值(根據數據長度不同,MSB是第7位或者第8位)會被后來的校驗位所取代。當使能校驗位進行接收時,讀到MSB位時接收到的校驗位。
          3、波特比率寄存器(USART_BRR)
          1】地址偏移:0x08,復位值:0x0000
          2】位31-16:保留位,硬件強制置為0;
          位15-4:DIV_Mantissa[11:0],USARTDIV的整數部分。這12位定義了USART分頻器除法因子(USARTDIV)的整數部分。
          位3-0:DIV_Fraction[3:0],USARTDIV的小數部分。
          分數波特率的產生:
          接收器和發(fā)送器的波特率在USARTDIV的整數和小數寄存器中的值應設置成相同。
          Tx/Rx 波特率 = fck/(16*USARTDIV)
          這里的fck是給外設的時鐘(PCLK1用于USART2,3,4,5),(PCLK2用于USART1)。
          USARTDIV是一個無符號的定點數,則12位的值設置在USART_BRR寄存器。備注在寫入USART_BRR之后,波特率計數器會被波特率寄存器的值所替換。因此,不要再通信進行中改變波特率寄存器的數值。
          從USART_BRR寄存器得到USARTDIV
          例1:若DIV_Mantissa = 27,DIV_Fraction=12(USART_BRR = 0x1BC),則:
          Mantissa(USARTDIV) = 27
          Fraction(USARTDIV) = 12/16 = 0.75
          所以此時USARTDIV = 27.75
          例2:要求USARTDIV = 25.62,則:
          DIV_Fraction = 16*0.62 = 9.92,最接近的整數是10 = 0x0A
          DIV_Mantissa = mantissa(25.620) = 25 = 0x19
          于是USART_BRR = 0x19A
          例3:要求USARTDIV = 50.99,則:
          DIV_Fraction = 16*0.99 = 15.84,最接近的整數是16 = 0x10 => DIV_frac[3:0]溢出 => 進位必須加到小數部分。
          DIV_Mantissa = mantissa(50.990+進位) = 51 = 0x33
          于是USART_BRR = 0x330,USARTDIV = 51
          4、控制寄存器1(USART_CR1)
          1】地址偏移:0x0C,復位值:0x0000
          2】位31-14:保留位,硬件強制為0
          位13:UE(USART使能):當該位被清零,在當前字節(jié)傳輸完成后的USART的分頻器和輸出停止工作,以減少功耗。該位由軟件設置和清零。置0時,USART分頻器和輸出被禁止,置1時,USART模塊使能。
          位12:M(字長):該位定義了數據字的長度,由軟件對其設置和清零。置為0時表示一個起始位,8個數據位,n個停止位。置位1時,表示一個起始位,9個數據位,n個停止位。注意在數據傳輸過程中(發(fā)送和接收時)不能修改這個位。
          位11:WAKE(喚醒的方法):該位決定了把USART喚醒的方法,由軟件對該位設置和清零。為0時,表示被空閑總線喚醒,為1時表示被地址標記喚醒。
          位10:PCE(檢驗控制使能):用該位選擇是否進行硬件校驗控制(對于發(fā)送來說就是校驗位的產生,對于接受來說,就是校驗位的檢測)。當使能了該位,在發(fā)送數據的最高位(如果M=1,最高位是第9位,如果M是0,最高位是第8位)插入校驗位。對接受到的數據檢查其檢驗位。軟件對它置“1”或者清“0”,一旦設置了該位,當前直接傳輸完成后,校驗控制才生效。置0時表示禁止校驗控制,置為1時表示使能校驗控制。
          位9:PS(校驗選擇):當校驗控制使能后,該位用來選擇采用偶校驗還是奇校驗。軟件對它置1或清0.當前字節(jié)傳輸完成后,該選擇生效。置為0時表示為偶校驗,置為1時表示為奇校驗。
          位8:PEIE(PE中斷使能):該位由軟件設置或清除。置為0時禁止產生中斷,置為1時,當USART_SR中的PE為“1”時,產生USART中斷。
          位7:TXEIE(發(fā)送緩沖區(qū)空中斷使能):該位由如軟件設置或清除。為0時禁止產生中斷,為1時,當USART_SR中的TXE為“1”時,產生USART中斷。
          位6:TCIE(發(fā)送完成中斷使能):該位由軟件設置或清除。置為0時表示禁止產生中斷,置為1時表示當USART_SR中的ORE或者RXNE為1時,產生USART中斷。
          位5:RXNEIE(接收緩沖區(qū)非空中斷使能):該位由軟件設置或清除,為0時表示禁止產生中斷,為1時表示當USART_SR中的IDLE為1時,產生USART中斷。
          位4:IDLEIE(IDLE,總線空閑中斷使能):該位由軟件設置或清除。當為0時表示禁止產生中斷,為1時當USART_SR中的IDLE為1時,產生USART中斷。
          位3:TE(發(fā)送使能):該位使能發(fā)送器,由軟件設置或清除。為0時表示禁止發(fā)送,為1時表示使能發(fā)送。備注在數據傳輸過程中,除了在智能卡模式下,如果TE位上有個0脈沖(即設置為“0”之后,再設置為“1”),會在當前數據字傳輸完成后,發(fā)送一個前導符(空閑總線)。另外,在當TE被設置后,在真正的數據發(fā)送開始前,有一個比特時間的延遲。
          位2:RE(接收使能):該位由軟件設置或清除。當設置為0時,禁止接收,當設置為1時,使能接收并開始搜尋RX引腳上的起始位。
          位1:RWU(接收喚醒):該位用來決定是否把USART設置為靜默模式。該位由軟件設置或清除,當喚醒序列到來時,硬件也會將其清零。置為0時表示接收器處于正常工作模式,置為1時,表示接收器處于靜默模式。備注,在把USART置于靜默模式(設置RWU位)之前,USART要已經先接受了一個數據字節(jié),否則在靜默模式下,不能被空閑總線檢測喚醒。另外當配置為地址標記檢測喚醒(wake位 = 1),在RXNE位被置位時,不能用軟件修改RWU位。
          位0:SBK(發(fā)送斷開幀):使用該位來發(fā)送斷開字符,該位可以由軟件設置或清除。操作過程應該是軟件設置位,然后再斷開幀的停止位時,由硬件將其復位。當該位被設置為0時,表示沒有發(fā)送斷開字符,當設置為1時,表示將要發(fā)送斷開字符。
          5、控制寄存器2(USART_CR2)
          1】地址偏移:0x10,復位值:0x0000
          2】位31-15:保留位,硬件強制為0;
          位14:LINEN(LIN模式使能):該位由軟件設置或清除。設置為0表示禁止LIN模式,設置為1表示使能LIN模式。在LIN模式下,可以用USART_CR1寄存器中的SBK位發(fā)送LIN斷開符(低13位),以及檢測LIN同步斷開符。
          位13-12:STOP(停止位):這兩位用來設置停止位的位數。00表示一個停止位,01表示0.5個停止位,10表示2個停止位,11表示1.5個停止位。備注:USART4和USART5不能用0.5停止位和1.5停止位。
          位11:CLKEN(時鐘使能):用來使能CK引腳。為0時表示禁止CK引腳,為1表示使能CK引腳。備注,在USART4和USART5上不存在這一位。
          位10:CPOL(時鐘極性):在同步模式下,可以用該位選擇SLCK引腳上時鐘輸出的極性。和CPHA位一起配合來產生需要的時鐘/數據采樣關系。為0時表示總線空閑時CK引腳上保持低電平。為1時表示總線空閑時CK引腳上保持高電平。USART4和USART5上不存在這一位。
          位9:CPHA(時鐘相位):在同步模式下,可以用該位選擇SLCK引腳上時鐘輸出的相位。和CPOL位一起配合來產生需要的時鐘/數據的采樣關系。為0時表示在時鐘的第一個邊沿進行數據捕獲,為1時表示在時鐘的第二個邊沿進行數據捕獲。備注在USART4和USART5上不存在這一位。
          位8:LBCL(最后一位時鐘脈沖):在同步模式下,使用該位來控制是否在CK引腳上輸出最后最后那個數據字節(jié)(MSB)對應的時鐘脈沖。為0時表示最后一位數據的時鐘脈沖不從CK輸出。為1時表示最后一位數據的時鐘脈沖會從CK輸出。備注:最后一個數據位就是第8或者第9個發(fā)送的位(根據USART_CR1寄存器中的M位所定義的8或9位數據幀格式),在USART4和USART5上不存在這一位。
          位7:保留位,硬件強制為0。
          位6:LBDIE(LIN斷開符檢測中斷使能):斷開符中斷屏蔽(使用斷開分隔符來檢測斷開符),為0時表示禁止中斷,為1時表示只要USART_SR寄存器中的LBD為1就產生中斷。
          位5:LBDL(LIN斷開符檢測長度):該位用來選擇是11位還是10位斷開符檢測。為0時表示為10位斷開符檢測,為1時表示為11位的斷開符檢測。
          位4:保留位,硬件強制為0。
          位3-0:ADD[3:0]:本設備的USART節(jié)點地址。該位域給出本設備USART節(jié)點的地址。這是在多處理器通信下的靜默模式中使用的,使用地址標記來喚醒某個USART設備。
          3】備注:在使能發(fā)送后不能再改寫CPOL,CPHA,LBCL三個位。
          6、控制寄存器3(USART_CR3)
          1】地址偏移:0x14,復位值:0x0000
          2】位31-11:保留位,硬件強制為0;
          位10:CTSIE(CTS中斷使能):為0時禁止中斷,為1時USART_SR寄存器中的CTS為1時產生中斷。備注,在USART4和USART5上不存在這一位。
          位9:CTSE(CTS使能):為0時禁止CTS硬件流控制,為1時CTS模式使能。只有nCTS輸入信號有效(拉成低電平)時才能發(fā)送數據。如果在數據傳輸過程中,nCTS信號變?yōu)闊o效,那么發(fā)送完這個數據后,傳輸就停止下來。如果當nCTS為無效時,往數據寄存器里面寫數據,則要等到nCTS有效時才會發(fā)送這個數據。備注,在USART4和USART5上不存在這一位。
          位8:RTSE(RTS使能):為0時表示禁止RTS硬件流控制,為1時表示RTS中斷使能,只有接受緩沖區(qū)內有空余空間時才請求下一個數據。當前數據發(fā)送完成后,發(fā)送操作就需要暫停下來,如果可以接受數據了,將nRTS輸出置為有效(拉至低電平)。備注,在USART4和USART5上不存在這一位。
          位7:DMAT(DMA使能發(fā)送):該位由軟件設置或清除。為0時表示禁止發(fā)送時的DMA模式,為1時表示為使能發(fā)送時的DMA模式。備注,在USART4和USART5上不存在這一位。
          位6:DMAR(DMA使能接收):該位由軟件設置或清除。為0時表示禁止接收時的DMA模式,為1時表示使能接收時的DMA模式。備注在USART4和USART5上不存在這一位。
          位5:SCEN(智能卡模式使能):該位用來設置智能卡模式。為0時表示禁止智能卡模式,為1時表示使能智能卡模式。備注在USART4和USART5上不存在這一位。
          位4:NACK(智能卡NACK使能):為0時表示校驗出錯時,不發(fā)送NACK,為1時表示校驗錯誤出現(xiàn)時,發(fā)送NACK。備注,在USART4和USART5上不存在這一位。
          位3:HDSEL(半雙工選擇):選擇單線半雙工模式,為0表示不選擇半雙工模式,為1表示選擇半雙工模式。
          位2:IRLP(紅外低功耗):用來選擇普通模式還是低功耗紅外模式。為0時表示為普通模式,為1時表示為低功耗模式。
          位1:IREN(紅外模式使能):該位由軟件設置或清零。為0時表示不使能紅外模式,為1時表示使能紅外模式。
          位0:EIE(錯誤中斷使能):在多緩沖區(qū)通信模式下,當有幀錯誤,過載或者噪聲錯誤時(USART_SR狀態(tài)寄存器中的FE=1,或者ORE=1,或者NE=1)產生中斷。為0時表示禁止中斷,為1時表示只要USART_CR3中的DMAR=1,并且USART_SR中的FE=1,或者ORE=1,或者NE=1,則產生中斷。
          7、保護時間和預分頻寄存器(USART_GPTR)
          1】地址偏移:0x18,復位值:0x0000
          2】位31-16:保留位,硬件強制為0
          位15-8:GT[7:0]:保護時間值,該位規(guī)定了以波特時鐘為單位的保護時間,在智能卡模式下,需要這個功能。當保護時間過去后,才會設置發(fā)送完成標志。
          位7-0:PSC[7:0]:預分頻值。
          a、在紅外(IRDA)低功耗模式下,PSC[7:0] = 紅外低功耗波特率,對系統(tǒng)時鐘分頻以獲得低功耗模式下的頻率:源時鐘被寄存器中的值(僅有8位有效)分頻。00000000:保留-不要寫入該值;00000001:對源時鐘1分頻;00000010:對源時鐘2分頻。
          b、在紅外(IRDA)正常模式下,PSC只能設置為00000001
          c、在智能卡模式下,PSC[4:0]:預分頻值,對系統(tǒng)時鐘進行分頻,給智能卡提供時鐘。寄存器中給出的值(低5位有效)乘以2后,作為對源時鐘的分頻因子。00000:保留-不要寫入該值;00001:對源時鐘進行二分頻;00010:對源時鐘進行4分頻;00011:對源時鐘進行6分頻。。。。備注,在智能卡模式下位[7:5]在智能卡模式下沒有意義,UART4和UART5上不存在這一位。


          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();