stm32 usart相關的問題及解決思路

若是此時USART正在發送數據,對USART_DR寄存器的寫操做把數據存進TDR寄存器,並
在當前傳輸結束時把該數據複製進移位寄存器。
若是此時USART沒有在發送數據,處於空閒狀態,對USART_DR寄存器的寫操做直接把數
據放進移位寄存器, 數據傳輸開始, TXE位當即被置起。 當一幀發送完成時 (中止位發送後),
TC位被置起,而且若是USART_CR1寄存器中的TCIE位被置起時,中斷產生。
先讀一下USART_SR寄存器,再寫一下USART_DR寄存器,能夠完成對TC位的清零。
注意: TC位也能夠經過對它軟件寫0來清除。此清零方式只在多緩衝器通訊模式下推薦使用。

spa

當一字符被接收到時,
z RXNE位被置位。它代表移位寄存器的內容被轉移到RDR。換句話說,數據已經被接收
而且能夠被讀出(包括與之有關的錯誤標誌)。
z 若是RXNEIE位被設置,產生中斷。
z 在接收期間若是檢測到幀錯誤,噪音或溢出錯誤,錯誤標誌將被置起,
z 在多緩衝器通訊時, RXNE在每一個字節接收後被置起,並由DMA對數據寄存器的讀操做
而清零。
z 在單緩衝器模式裏,由軟件讀USART_DR寄存器完成對RXNE位清除。 RXNE標誌也可
以經過對它寫0來清除。 RXNE位必須在下一字符接收結束前被清零,以免溢出錯誤。
注意: 在接收數據時, RE位不該該被複位。若是RE位在接收時被清零,當前字節的接收被丟失

軟件


溢出錯誤
若是RXNE尚未被複位,又接收到一個字符,則發生溢出錯誤。數據只有當RXNE位被清
零後才能從移位寄存器轉移到RDR寄存器。 RXNE標記是接收到每一個字節後被置位的。若是
下一個數據已被收到或先前DMA請求還沒被服務時, RXNE標誌還是置起的, 溢出錯誤產生。
當溢出錯誤產生時:
z ORE位被置位。
z RDR內容將不會丟失。讀USART_DR寄存器仍能獲得先前的數據。
z 移位寄存器中之前的內容將被覆蓋。隨後接收到的數據都將丟失。
z 若是RXNEIE位被設置或EIEDMAR位都被設置,中斷產生。
z 順序執行對USART_SRUSART_DR寄存器的讀操做,可復位ORE
注意: 當ORE位置位時,代表至少有1個數據已經丟失。有兩種可能性:
若是RXNE=1,上一個有效數據還在接收寄存器RDR上,能夠被讀出。
若是RXNE=0,這意味着上一個有效數據已經被讀走, RDR已經沒有東西可讀。當上一個有
效數據在RDR中被讀取的同時又接收到新的(也就是丟失的)數據時,此種狀況可能發生。
在讀序列期間(在USART_SR寄存器讀訪問和USART_DR讀訪問之間)接收到新的數據,
此種狀況也可能發生。

請求

相關文章
相關標籤/搜索