欧美日韩激情电影,久久亚洲精品毛片,日日夜夜天天综合入口,亚洲激情六月丁香

您的位置: 首頁 >游戲 >

【STM32學習筆記】USART 硬件流控

2022-06-09 21:42:01 編輯:燕剛彪 來源:
導讀 大家好,小科來為大家解答以上問題。【STM32學習筆記】USART 硬件流控這個很多人還不知道,現在讓我們一起來看看吧!1、流量控制的概念源

大家好,小科來為大家解答以上問題。【STM32學習筆記】USART 硬件流控這個很多人還不知道,現在讓我們一起來看看吧!

1、流量控制的概念源于RS232標準,其中包含了串口和流量控制的定義。大家一定知道RS232中的“RS”是推薦標準的縮寫,意思是“推薦標準”。與IEEE-1284、IEEE-1394等標準不同,它是由委員會定制的。所以不同廠家做RS232的時候會有一些差異,在流量控制上也會有差異。下面和大家探討一下流量控制的功能、構造和操作。

2、本文主要研究硬件流量控制。

3、為什么需要流量控制?

4、在兩個串口之間進行數據通信時,經常會出現數據丟失的現象,比如兩臺計算機之間或者一臺計算機與單片機之間的通信。當接收端的數據緩沖區已滿時,如果此時有數據發送,由于接收端沒有時間處理,這樣的數據可能會丟失。在工業領域或其他領域,經常會遇到這類問題。本質原因是速度和處理能力的不匹配。比如單片機主頻只有20M或者30M,ARM的處理能力可能是200M,PC的處理能力是幾個G,這就使得數據在傳輸過程中很容易丟失。

5、硬件流量控制就是為了解決這個速度匹配的問題。它的基本意思很簡單。當接收方收到的數據無法處理時,它會向發送方發送一個不再接收的信號。收到這個信號后,發送方會停止發送,直到收到可以繼續發送的信號。因此,流量控制本身可以控制數據傳輸的進度,從而防止數據丟失。

6、常見的流量控制方法有兩種:硬件流量控制和軟件流量控制。本文主要討論硬件流程控制。

7、如何在STM32上搭建硬件流控?

8、圖1,硬件流量控制的連接原理圖

9、在圖1中,之前使用的TX和RX是簡單的三線式串行通信方法。如果啟用硬件流控,需要在此基礎上增加兩條控制線,一條叫CTS(Clear To Send是輸入信號),一條叫RTS(Require To Send是輸出信號)。其實從名字就可以看出,一個是接收控制,一個是發送控制。

10、從硬件連接原理圖可以看出,如果做USART 1到USART 2的傳輸,USART 1的TX接USART 2的RX,USART 1的CTS接USART 2的RTS,數據方向是從TX到RX,從串口1到串口2,流量控制是從RTS到CTS,也就是從串口2到串口1。

11、數據線的方向與流控線的方向相反。

12、從圖1-硬件流控的連接原理圖可以發現,數據線方向與流控線方向相反。為什么呢?本文前面提到的流量控制的主要概念是指接收方沒有時間處理這樣的數據或者處理能力較弱,需要讓發送方等待。接收方發出的信號稱為RTS信號,發送方的檢測引腳稱為CTS。所以硬件連接原理圖的下半部分和上半部分正好相反,接收器接串口2的TX,RTS接串口2的CTS。

13、數據收到后如何操作?

14、圖2,接收和RTS信號示意圖

15、從圖2-接收和RTS信號示意圖可以看出,RTS信號在數據讀取前一直保持高電平,我們可以看到在開始前都是高電平,這意味著告訴發送方數據還沒有被取走,請等待發送方。一旦DMA或CPU從DR寄存器中讀取數據,RTS將釋放高電平并變為低電平。這時候如果發送方想發送數據,可以直接發送。

16、總之,RTS表明USART是否準備好接收新數據。

17、另外需要注意的是,當USART的FIFO模式,也就是緩沖模式開啟時,RTS信號不會被拉高,直到FIFO滿為止。

18、圖3,傳輸和CTS信號示意圖

19、圖3-傳輸和CTS信號原理圖中,TDR是USART的傳輸寄存器,數據寫入該寄存器。如果此時移位寄存器中沒有正在傳輸的數據,硬件會將TDR的內容移到移位寄存器中,然后開始按照設定的波特率、數據位等數據格式直接傳輸數據。這是正常的數據傳輸過程。

20、如果啟用了硬件流量控制功能,將增加一個實時檢測步驟。在圖3中,當未接收到CTS信號時,TX傳輸線上的數據被連續傳輸,這表明停止位之后是下一個數據的開始位。

21、當數據2仍在TX線路上傳輸時,如果此時在CTS信號上檢測到高電平,即使在數據2的停止位發送之前寫入數據3,新寫入的數據也不會在當前字節發送之后立即發送,而是等待直到在CTS引腳上檢測到低電平,并且數據3的起始信號不會在TX引腳上開啟。

22、需要注意的是在當前字節發送完之前的三個時鐘周期,CTS 需要提前置位上,也就是在Data 2 結尾的地方如果只差一個 STOP bit,那有可能把 Data 3 連續發送出去。

23、有人可能會有疑問,CTS 不是馬上就置位了嗎,而且 Data 2 還沒有完全發送出去。其實它是去檢查 CTS 的標志位,設置這個標志位至少需要兩個時鐘周期,設置好了 CTS 的標志位之后,硬件才會去檢查進而不去發送 Data 3 的 Start bit。但如果設置的 CTS 或者是檢查到的 CTS 已經是非常晚了,那后面的一個字節就已經發送過去了,因為在發送 Data 3 的時候沒看到有 CTS 的標志位,所以就要求我們至少提前三個時鐘周期把 RTS 信號釋放出來,讓 CTS 把這個信號檢測到進而讓后面的數據不再發送。RTS 是只要在接收緩沖區非空的時候就會被提前置位,也就是結果寄存器里面只要有一個東西就會把它置位,都會放在當前的移位緩沖寄存器里。

24、在原則上是不會出現由于 RTS 置位比較晚,導致 CTS比較慢的現象。但是不排除一種情況,就是 CTS 和 RTS 之間的延遲特別大,或者說串口的波特率特別快,這個時候就容易出現由于 RTS 置位比較晚使得 CTS 比較慢的現象。

25、軟件配置

▲圖4,軟件配置

27、在 CubeMX 里可以選擇一個串口模式為異步模式,之后在它下面的硬件流控 RS232 中選擇 CTS/RTS。這里要注意一下,CTS 和 RTS 是可以單獨使能的,可以根據速度來選擇使能 CTS 還是 RTS,如果我的速度比較慢的話就使能 RTS,因為 RTS 是給對方的信號,不需要考慮對方的處理能力。

28、另外,在 CubeMX 里也可以使能 RS485 的硬件流控,這里的流控實際上流控的是數據的方向,因為 RS485 是一個半雙工的通訊模式,它的數據收的時候就不能發,發的時候不能收。STM32 上有一個 DE 管腳和 RS485 的接收器芯片直接相連,控制數據的收發,所以我們要知道在 STM32 的硬件流控中其實包含兩方面的內容,一方面是關于速度的,也就是 RS232 的 CTS、RTS;另一方面是關于數據的方向的控制,它是基于 RS485 的,在軟件中只需要設置它的功能,其他使用功能和串口都是一樣的。

29、

30、硬件流控和軟件流控的區別

31、軟件流控是以特殊的字符來代表從機已經不能再接收新的數據了,基本的流程就是從機在接收數據很多的時候或主動給發送端發送一個特殊字符,當發送端接收到這個特殊字符后就不能再發送數據了。

32、軟件流控很方便,不需要增加新的硬件,還是以前的TX、RX,但是使用了軟件流控,它本身的字符也是數據,這個數據只不過是說在軟件里把它設置了一個特殊的含義。如果它是一個全雙工的通訊,在給另一個串口發送數據的時候如果也包含了這樣一個特殊字符,對方就會誤以為我讓它不要再發送數據了,會有一定的概率出現錯誤,而硬件流控就不需要考慮這方面,只需要使用 CTS 和 RTS,所有的數據都是由硬件來操作的。

33、在實際的應用開發中,大家需要根據自己的實際情況來選擇使用硬件流控還是軟件流控。

34、審核

本文到此結束,希望對大家有所幫助。


免責聲明:本文由用戶上傳,如有侵權請聯系刪除!

精彩推薦

圖文推薦

點擊排行

2016-2022 All Rights Reserved.平安財經網.復制必究 聯系QQ280 715 8082   備案號:閩ICP備19027007號-6

本站除標明“本站原創”外所有信息均轉載自互聯網 版權歸原作者所有。

主站蜘蛛池模板: 巩义市| 疏附县| 桓台县| 平昌县| 旺苍县| 邻水| 夹江县| 泽普县| 合水县| 邢台县| 湘潭市| 嵩明县| 石景山区| 西峡县| 太仆寺旗| 黄石市| 巢湖市| 荔浦县| 时尚| 湖南省| 渭源县| 凉山| 吉林市| 新乡县| 江都市| 凌海市| 乃东县| 花莲县| 瓮安县| 公主岭市| 沙河市| 清水河县| 陆良县| 玛纳斯县| 上栗县| 铁岭市| 延安市| 西华县| 修文县| 青海省| 黄梅县|