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