在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

小劉 ? 來源:辰光 ? 作者:辰光 ? 2022-02-18 17:52 ? 次閱讀

流控的概念源于 RS232 這個標準,在 RS232 標準里面包含了串口、流控的定義。大家一定了解,RS232 中的“RS”是Recommend Standard 的縮寫,即”推薦標準“之意,它并不像 IEEE-1284、IEEE-1394 等標準,是由“委員會定制”。因而,不同的廠商在做 RS232 時,多少會有不同,流控也都會存在差異。以下我們與大家一起探討流控的作用、搭建及如何操作。

本文著重探討硬件流控。

為什么需要流控?

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

硬件流控就是來解決這個速度匹配的問題。它的基本含義非常簡單,當接收端接收到的數據處理不過來時,就向發送端發送不再接收的信號,發送端接收到這個信號之后就會停止發送,直到收到可以繼續發送的信號再繼續發送。因此流控本身是可以控制數據傳輸的進度,進而防止數據丟失。

一般常用的流控方式有兩種:硬件流控和軟件流控。本文主要探討硬件流控。

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

pYYBAGIPa6GAXpd0AADF8ILZD7g144.png

▲圖1,硬件流控的連接原理圖

圖1中,以前用到的 TX 和 RX,也就是簡單的三線串口的通訊方式,如果使能了硬件流控,在這個基礎上需要增加兩根控制線,一根叫 CTS(Clear To Send 為輸入信號,一根叫 RTS(Require To Send 為輸出信號)。其實從名字上也可以看到,一個是接收控制,一個是發送控制。

從硬件連接原理圖中我們可以看到,如果從 USART 1 向 USART 2 發送的話,USART 1 的 TX 和 USART 2 的 RX 相連,USART 1 的 CTS 和 USART 2 的 RTS 相連,數據的方向是從 TX 到 RX,從串口1到串口2,流控是從 RTS 到 CTS 也就是從串口2到串口1。

數據線方向與流控線數據方向相反

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

數據在接收的時候具體如何操作?

poYBAGIPa8eAK15bAAEzA7WN2b0714.png

▲圖2,接收與RTS信號原理圖

從圖2 - 接收與 RTS 信號原理圖中,我們可以看到,RTS 信號在數據沒有被讀取之前都是保持在高電平狀態,我們可以看到在 Start 之前都是高電平,這也就是告訴發送端,數據還沒有被拿走,請發送端等待,一旦數據被 DMA 或者 CPU 從 DR 寄存器讀取之后,RTS 就釋放高電平,變為低電平,這時候發送端如果想發送數據的話就可以直接發送了。

一句話概括,就是 RTS 表示了 USART 是否已經準備好接收新的數據了。

另外,我們需要注意,當 USART 的 FIFO 模式也就是緩沖模式開啟的時候,在 FIFO 滿的時候才會去拉高 RTS 信號。

pYYBAGIPa-qAJOhGAAGf5F9fTkc064.png

▲圖3,發送與CTS信號原理圖

圖3 - 發送與 CTS 信號原理圖中,TDR 是 USART 的發送寄存器,在這個寄存器中寫入數據,如果這時候在移位寄存器中沒有數據正在發送,硬件就會把 TDR 中的內容搬移到移位寄存器中,之后按照設置好的波特率、數據位等數據格式開始直接發送數據。這就是一個正常的數據發送的流程。

如果使能了硬件流控的功能,就會增加一個實時檢測的步驟。在圖3中,當沒有收到CTS信號的時候,TX 發送線上數據是連續發送的,表現形式為:在 STOP 位后緊跟著就是下一個數據的 Start bit。

當 Data 2 還在 TX 線上進行發送的時候,如果此時在 CTS 信號上檢測到了高電平,即使在 Data 2 的 STOP 位發送完之前寫入了 Data 3,在當前的字節發送完之后是不會馬上發送新寫入的數據的,而是要等待,直到在 CTS 管腳上檢測為低電平后,TX腳上才會開啟 Data 3 的 Start 信號。

這里其實我們可以簡單理解一下,在發送的時候要實時監測 CTS 的電平狀態,如果發現是高電平,就不會再發送新的數據,直到 CTS 檢測發現已經沒有高電平信號了。

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

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

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

軟件配置

pYYBAGIPbAWAVj0MAALe7TCYGqA518.png

▲圖4,軟件配置

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

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

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

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

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

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

審核編輯:符乾江

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10918

    瀏覽量

    356821
  • 硬件設計
    +關注

    關注

    18

    文章

    399

    瀏覽量

    44623
收藏 人收藏

    評論

    相關推薦

    stm32用串口燒錄怎么設置

    準備工作 確保您擁有STM32開發板和相應的硬件設備,如USB轉串口模塊。 安裝STM32CubeMX和STM32CubeProgrammer軟件,這些是ST官方提供的工具,用于配置和
    的頭像 發表于 08-22 09:33 ?1740次閱讀

    第三篇-V1.5 TB6612電機pwm控制STM32智能小車 STM32F103C8T6單片機

    通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記
    的頭像 發表于 08-12 18:29 ?1705次閱讀
    第三篇-V1.5 TB6612電機pwm控制<b class='flag-5'>STM32</b>智能小車 <b class='flag-5'>STM32</b>F103C8T6單片機

    第一篇:V1.5-STM32f103c8t6智能小車筆記 標準庫開發 6612電機驅動新手入門項目

    這是全網最詳細、性價比最高的STM32實戰項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便
    的頭像 發表于 08-12 18:25 ?1720次閱讀
    第一篇:V1.5-<b class='flag-5'>STM32</b>f103c8t6智能小車<b class='flag-5'>筆記</b> 標準庫開發 6612電機驅動新手入門項目

    如何在STM32F439 DMA中斷中區分是哪個通道產生的中斷?

    STM32F439有兩個DMA控制器DMA1和DMA2,每個控制器有8個,每個有8個通道,我做的是采用串口1DMA中斷接收數據,DMA2的2 通道4對應
    發表于 05-17 08:20

    芯海應用筆記:通用 MCU USART 自動波特率檢測

    本文檔介紹和說明芯海科技旗下 CS32 系列 MCU 的自動波特率檢測功能,并為不具備硬件自動波特率檢測的 MCU 產品提供替代軟件方法 。*附件:應用筆記:芯海通用MCU USART自動波特率檢測.pdf
    發表于 05-16 11:42

    請問STM32F207+DP83848如何實現以太網硬件控?

    在我的應用中,我用UDP傳送數據,STM32+DP83848采用UDP接收,如果PC端全速傳送一個文件,STM32處理比較慢,會存在丟數據的情況。 我看STM32存在硬件
    發表于 05-11 08:55

    USART上對應RTS的GPIO引腳不需要定義嗎?

    提到是硬件控制,在進行串口初始化的時候,把下面定義的USART_InitStructure.USART
    發表于 04-25 08:05

    STM32L151C8T6同樣的代碼,USART1正常,USART2不工作是為什么?

    請教: MCU是STM32L151C8T6。 同樣的代碼,USART1正常,USART2不工作。 請問,這是為什么 ?
    發表于 04-23 06:03

    STM32F103使用硬件SPI1,USART2不出時鐘怎么解決?

    STM32F103C8T6單片機,使用usart2的smartcard接口,單獨使用時正常,CK腳可以正常輸出clk。當我在添加一路SPI1時,CK腳就不能正常輸出CLK信號了。CK腳是SPI的NSS腳。但是沒有在cube里配置使用硬件
    發表于 04-17 07:25

    STM32 USART中斷與ADC DMA中斷沖突造成硬件錯誤的原因?

    使用STM32USART與主機設備通訊,主機設備每隔50ms會與STM32USART通訊一次,使用ADC 的DMA功能采集數據,再通過USART
    發表于 04-02 06:26

    跟優秀的人,學習筆記!文末有看海的點評

    很多同學私信我,說自己學習時不會記筆記,要么是記錄的非常潦草,沒有保留有效信息。要么是把所有信息都抄到筆記本上,結果變成了抄書,自己都不想看。 我們學習時,怎么高效記錄
    的頭像 發表于 03-22 18:19 ?1221次閱讀
    跟優秀的人,<b class='flag-5'>學習</b>記<b class='flag-5'>筆記</b>!文末有看海的點評

    STM32G051K8T6-USART1無法工作的原因?如何解決?

    問題描述:使用STM32CubeMX做簡單的測試工程,只打開USART1、USART2功能,RCC設置為LSE。 使用USART1、USART
    發表于 03-22 06:59

    allegro學習筆記

    電子發燒友網站提供《allegro學習筆記.zip》資料免費下載
    發表于 02-29 09:14 ?1次下載

    變頻器的硬件保護和軟件過保護分別是怎么判斷的?

    通用變頻器分別由硬件保護和軟件過保護,我隨便距離一個變頻器設計定標方案,舉例輸出額定電流的兩倍峰值為過流點,那么從硬件和軟件方面是怎么判斷出變頻器輸出過
    發表于 02-25 20:40

    學習筆記分享|使用C庫函數控制ELF 1開發板的LED

    (ELF1/ELF1S開發板及顯示屏)在嵌入式Linux系統開發中,通過編程控制硬件資源是至關重要的技能之一,今天跟各位小伙伴分享一篇專注于介紹如何使用C庫函數控制ELF1開發板LED的學習筆記
    的頭像 發表于 01-19 11:12 ?604次閱讀
    <b class='flag-5'>學習</b><b class='flag-5'>筆記</b>分享|使用C庫函數控制ELF 1開發板的LED
    主站蜘蛛池模板: 日本黄色片在线播放| 欧美三级不卡在线观线看高清 | 欧美日韩一区二区不卡| 午夜免费毛片| 亚洲黄色网址大全| 天天爱天天做天天爽天天躁| 欧美极品bbbbⅹxxxx| 国产精品天天干| 一级特黄a视频| 午夜干b| 奇米影视大全| 久草在线资源网| 手机看片国产在线| 久久伊人影视| 2021国产精品自在拍在线播放| 男啪女色黄无遮挡免费观看| 午夜湿影院| 亚洲一区二区电影| 色女孩网站| 久久伊人男人的天堂网站| 波多野结衣在线网址| 视频在线精品| 色网址在线观看| 白嫩少妇激情无码| 色噜噜狠狠成人影院| 激情六月色| 天天天天天操| 免费啪视频在线观看| 这里只有精品视频| 日本在线观看高清不卡免v| 激情综合站| 天天操天天擦| 国产成人啪精品午夜在线播放| 中文字幕天堂网| 欧美18同性gay视频| 在线视频午夜| riav久久中文一区二区| 国产在线视欧美亚综合| 日本暴力喉深到呕吐hd| 超黄视频网站| tube44在线观看|