USART又叫通用同步異步收發(fā)器,塔提供了一種靈活的方法與工業(yè)使用標準NRZ異步春航數(shù)據(jù)格式的外部設備之間進行全雙工數(shù)據(jù)交換。USART利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇,支持同步單向通信和半雙工單線通信,也支持LIN(局部互聯(lián)網(wǎng)),智能卡協(xié)議和IrDA(紅外數(shù)據(jù)組織)SIR ENDEC規(guī)范以及調(diào)制解調(diào)器(CTS/RTS)操作,它還允許多處理器通信,使用多換成器配置的DMA方式,可以實現(xiàn)高速數(shù)據(jù)通信。
USART寄存器控制框圖如下
可通過對 USART_CR1 寄存器中的 M 位進行編程來選擇 8(置0) 位或 9(置1) 位的字長。TX 引腳在起始位工作期間處于低電平狀態(tài)。在停止位工作期間處于高電平狀態(tài)。
空閑字符可理解為整個幀周期內(nèi)電平均為“1”(停止位的電平也是“1”),該字符后是下一個數(shù)據(jù)幀的起始位。
停止字符可理解為在一個幀周期內(nèi)接收到的電平均為“0”。發(fā)送器在中斷幀的末尾插入 1 或 2 個停止位(邏輯“1”位)以確認起始位。
發(fā)送和接收由通用波特率發(fā)生器驅(qū)動,發(fā)送器和接收器的使能位分別置 1 時將生成相應的發(fā)送時鐘和接收時鐘。
字符發(fā)送
USART 發(fā)送期間,首先通過 TX 引腳移出數(shù)據(jù)的最低有效位。該模式下,USART_DR 寄存 器的緩沖區(qū) (TDR) 位于內(nèi)部總線和發(fā)送移位寄存器之間。
每個字符前面都有一個起始位,其邏輯電平在一個位周期內(nèi)為低電平。字符由可配置數(shù)量的停止位終止。
USART 支持以下停止位:0.5(智能卡模式下接收數(shù)據(jù)使用)、1(默認)、1.(智能卡模式下發(fā)送與接收使用)5 和 2(正常USART模式,單線模式和調(diào)制解調(diào)器模式支持該值) 個停止位。
注意:數(shù)據(jù)發(fā)送期間不應復位 TE 位。發(fā)送期間復位 TE 位會凍結(jié)波特率計數(shù)器,從而將損壞 TX 引 腳上的數(shù)據(jù)。當前傳輸?shù)臄?shù)據(jù)將會丟失。
使能 TE 位后,將會發(fā)送空閑幀。
停止位的配置
步驟:
1.通過向%20USART_CR1%20寄存器中的%20UE%20位寫入%201%20使能%20USART。
2.%20對%20USART_CR1%20中的%20M%20位進行編程以定義字長。
3.%20對%20USART_CR2%20中的停止位數(shù)量進行編程。
4.%20如果將進行多緩沖區(qū)通信,請選擇%20USART_CR3%20中的%20DMA%20使能%20(DMAT)。按照多緩沖區(qū)%20通信中的解釋說明配置%20DMA%20寄存器。
5.%20使用%20USART_BRR%20寄存器選擇所需波特率。
6.%20將%20USART_CR1%20中的%20TE%20位置%201%20以便在首次發(fā)送時發(fā)送一個空閑幀。
7.%20在%20USART_DR%20寄存器中寫入要發(fā)送的數(shù)據(jù)(該操作將清零%20TXE%20位)。為每個要在單緩%20沖區(qū)模式下發(fā)送的數(shù)據(jù)重復這一步驟。
8.%20向%20USART_DR%20寄存器寫入最后一個數(shù)據(jù)后,等待至%20TC=1。這表明最后一個幀的傳送已%20完成。禁止%20USART%20或進入暫停模式時需要此步驟,以避免損壞最后一次發(fā)送。
單字節(jié)通信
始終通過向數(shù)據(jù)寄存器寫入數(shù)據(jù)來將%20TXE%20位清零。
TXE%20位由硬件置%201,它表示:
●%20數(shù)據(jù)已從%20TDR%20移到移位寄存器中且數(shù)據(jù)發(fā)送已開始。
●%20TDR%20寄存器為空。
●%20USART_DR%20寄存器中可寫入下一個數(shù)據(jù),而不會覆蓋前一個數(shù)據(jù)。
TXEIE%20位置%201%20時該標志位會生成中斷。
發(fā)送時,要傳入%20USART_DR%20寄存器的寫指令中存有%20TDR%20寄存器中的數(shù)據(jù),該數(shù)據(jù)將在當%20前發(fā)送結(jié)束時復制到移位寄存器中。
未發(fā)送時,要傳入%20USART_DR%20寄存器的寫指令直接將數(shù)據(jù)置于移位寄存器中,數(shù)據(jù)發(fā)送開%20始時,TXE%20位立即置%201。
如果幀已發(fā)送(停止位后)且%20TXE%20位置%201,TC%20位將變?yōu)楦唠娖?。如?20USART_CR1%20寄存器%20中的%20TCIE%20位置%201,將生成中斷。
向%20USART_DR%20寄存器中寫入最后一個數(shù)據(jù)后,必須等待至%20TC=1,之后才可禁止%20USART%20或使微控制器進入低功率模式。
TC%20位通過以下軟件序列清零:
1.從%20USART_SR%20寄存器讀取數(shù)據(jù)
2.%20向%20USART_DR%20寄存器寫入數(shù)據(jù)
注意:還可通過向%20TC%20位寫入“0”將其清零。建議僅在多緩沖區(qū)通信時使用此清零序列。
中斷字符
將 SBK 位置 1 將發(fā)送一個中斷字符。中斷幀的長度取決于 M 位。(見上圖USART字符說明)
如果 SBK 位置“1”,當前字符發(fā)送完成后,將在 TX 線路上發(fā)送一個中斷字符。中斷字符 發(fā)送完成時(發(fā)送中斷字符的停止位期間),該位由硬件復位。USART 在上一個中斷幀的 末尾插入一個邏輯“1”位,以確保識別下個幀的起始位。
注意:如果軟件在中斷發(fā)送開始前對 SBK 位進行了復位,將不會發(fā)送中斷字符。對于兩個連續(xù)的中 斷,應在上一個中斷的停止位發(fā)送完成后將 SBK 位置 1。
空閑字符
將 TE 位置 1 會驅(qū)動 USART 在第一個數(shù)據(jù)幀之前發(fā)送一個空閑幀。(見上圖USART字符說明)
字符接收(位數(shù)取決于M位)
起始位檢測
無論設置為16 倍或 8 倍過采樣時,起始位檢測序列相同都以16倍過采樣檢測。
在 USART 中,識別出特定序列的采樣時會檢測起始位。該序列為:1 1 1 0 X 0 X 0 X 0 0 0 0。
注意:如果序列不完整,起始位檢測將中止,接收器將返回空閑狀態(tài)(無標志位置 1)等待下降沿。
如果 3 個采樣位均為 0(針對第 3 位、第 5 位和第 7 位進行首次采樣時檢測到這 3 位均為 0; 針對第 8 位、第 9 位和第 10 位進行第二次采樣時檢測到這 3 位均為 0),可確認起始位 (RXNE 標志位置 1,RXNEIE=1 時生成中斷)。
如果兩次采樣時(對第 3 位、第 5 位和第 7 位進行采樣以及對第 8位、第 9 位和第 10 位進 行采樣),3 個采樣位中至少有 2 個為 0,則可驗證起始位(RXNE 標志位置 1,RXNEIE=1 時生成中斷)但 NE 噪聲標志位置 1。如果不滿足此條件,則啟動檢測中止,接收器返回空 閑狀態(tài)(無標志位置 1)。
如果其中一次采樣時(對第 3 位、第 5 位和第 7 位進行采樣或?qū)Φ?8 位、第 9 位和第 10 位 進行采樣),3 個采樣位中有 2 個為 0,則可驗證起始位但 NE 噪聲標志位置 1。
字符接收
USART 接收期間,首先通過 RX 引腳移入數(shù)據(jù)的最低有效位。該模式下,USART_DR 寄存 器的緩沖區(qū) (RDR) 位于內(nèi)部總線和接收移位寄存器之間。
步驟:
1.通過向 USART_CR1 寄存器中的 UE 位寫入 1 使能 USART。
2. 對 USART_CR1 中的 M 位進行編程以定義字長。
3. 對 USART_CR2 中的停止位數(shù)量進行編程。
4. 如果將進行多緩沖區(qū)通信,請選擇 USART_CR3 中的 DMA 使能 (DMAR)。按照多緩沖 區(qū)通信中的解釋說明配置 DMA 寄存器。步驟 3
5. 使用波特率寄存器 USART_BRR 選擇所需波特率
6. 將 RE 位 USART_CR1 置 1。這一操作將使能接收器開始搜索起始位。
接收到字符時
● RXNE 位置 1。這表明移位寄存器的內(nèi)容已傳送到 RDR。也就是說,已接收到并可讀取數(shù)據(jù)(以及其相應的錯誤標志)。
● 如果 RXNEIE 位置 1,則會生成中斷。
● 如果接收期間已檢測到幀錯誤、噪聲錯誤或上溢錯誤,錯誤標志位可置 1。
● 在多緩沖區(qū)模式下,每接收到一個字節(jié)后 RXNE 均置 1,然后通過 DMA 對數(shù)據(jù)寄存器執(zhí)行讀操作清零。
● 在單緩沖區(qū)模式下,通過軟件對 USART_DR 寄存器執(zhí)行讀操作將 RXNE 位清零。RXNE標志也可以通過向該位寫入零來清零。RXNE 位必須在結(jié)束接收下一個字符前清零,以避免發(fā)生上溢錯誤。
注意:接收數(shù)據(jù)時,不應將 RE 位復位。如果接收期間禁止了 RE 位,則會中止接收當前字節(jié)。
中斷字符
接收到中斷字符時,USART 將會按照幀錯誤對其進行處理。
空閑字符
檢測到空閑幀時,處理步驟與接收到數(shù)據(jù)的情況相同;如果 IDLEIE 位為 1,則會產(chǎn)生中斷。
上溢錯誤
如果在 RXNE 未復位時接收到字符,則會發(fā)生上溢錯誤。RXNE 位清零前,數(shù)據(jù)無法從移位 寄存器傳送到 RDR 寄存器。
每接收到一個字節(jié)后,RXNE 標志位都將置 1。當 RXNE 標志位是 1 時,如果在接收到下一 個數(shù)據(jù)或尚未處理上一個 DMA 請求時,則會發(fā)生上溢錯誤。發(fā)生上溢錯誤時: ● ORE 位置 1。
● RDR 中的內(nèi)容不會丟失。對 USART_DR 執(zhí)行讀操作時可使用先前的數(shù)據(jù)。
● 移位寄存器將被覆蓋。之后,上溢期間接收到的任何數(shù)據(jù)都將丟失。
● 如果 RXNEIE 位置 1 或 EIE 與 DMAR 位均為 1,則會生成中斷。
● 通過先后對 USART_SR 寄存器和 USART_DR 寄存器執(zhí)行讀操作將 ORE 位清除。
注意:ORE 位置 1 時表示至少 1 個數(shù)據(jù)丟失。存在兩種可能:
● 如果 RXNE=1,則最后一個有效數(shù)據(jù)存儲于接收寄存器 RDR 中并且可進行讀??;
● 如果 RXNE=0,則表示最后一個有效數(shù)據(jù)已被讀取,因此 RDR 中沒有要讀取的數(shù)據(jù)。接收到新(丟失)數(shù)據(jù)的同時已讀取 RDR中的最后一個有效數(shù)據(jù)時,會發(fā)生該情況。讀取序列期間(在 USART_SR 寄存器讀訪問與 USART_DR 讀訪問之間)接收到新數(shù)據(jù)時也會發(fā)生該情況。
選擇合適的過采樣方法
接收器采用不同的用戶可配置過采樣技術(除了同步模式下),可以從噪聲中提取有效數(shù)據(jù)。
可通過編程 USART_CR1 寄存器中的 OVER8 位來選擇采樣方法,且采樣時鐘可以是波特率 時鐘的 16 倍或 8 倍。
根據(jù)應用:
● 選擇 8 倍過采樣 (OVER8=1) 以獲得更高的速度(高達 fPCLK/8)。這種情況下接收器對時鐘偏差的最大容差將會降低。
● 選擇 16 倍過采樣 (OVER8=0) 以增加接收器對時鐘偏差的容差。這種情況下,最大速度限制為最高 fPCLK/16可通過編程 USART_CR3 寄存器中的 ONEBIT 位選擇用于評估邏輯電平的方法。有兩種選擇:
● 在已接收位的中心進行三次采樣,從而進行多數(shù)表決。這種情況下,如果用于多數(shù)表決的 3 次采樣結(jié)果不相等,NF 位置 1。
● 在已接收位的中心進行單次采樣
根據(jù)應用:
— 在噪聲環(huán)境下工作時,請選擇三次采樣的多數(shù)表決法 (ONEBIT=0);在檢測到噪聲時請拒絕數(shù)據(jù),因為這表示采樣過程中產(chǎn)生了干擾。
— 線路無噪聲時請選擇單次采樣法 (ONEBIT=1) 以增加接收器對時鐘偏差的容差。這種情況下NF 位始終不會置 1。
幀中檢測到噪聲時:
● 在 RXNE 位的上升沿時 NF 位置 1。
● 無效數(shù)據(jù)從移位寄存器傳送到 USART_DR 寄存器。
● 單字節(jié)通信時無中斷產(chǎn)生。然而,在 RXNE 位產(chǎn)生中斷時,該位出現(xiàn)上升沿。多緩沖區(qū)通信時,USART_CR3 寄存器中的 EIE 位置 1 時將發(fā)出中斷。
通過先后對 USART_SR 寄存器和 USART_DR 寄存器執(zhí)行讀操作將 NF 位清零。
注意:智能卡、IrDA 和 LIN 模式下不可采用 8 倍過采樣。在這些模式下,OVER8 位由硬件強制 清零。
評論
查看更多