女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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
    +關注

    關注

    2291

    文章

    11022

    瀏覽量

    363494
  • 硬件設計
    +關注

    關注

    18

    文章

    431

    瀏覽量

    45149
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    硬件工程師煉成之路筆記(建議收藏!)

    本帖最后由 yuu_cool 于 2025-5-20 14:11 編輯 筆記內容 內容目前分為6個大章 1、常用軟件及教程 2、器件 3、硬件思維 4、常用電路分析 5、硬件器材 內容主要
    發表于 05-20 13:40

    硬件原理圖學習筆記

    這一個星期認真學習硬件原理圖的知識,做了一些筆記,方便以后查找。硬件原理圖分為三類1.管腳類(gpio)和門電路類輸入輸出引腳,上拉電阻,三極管與門,或門,非門上拉電阻:正向標志作用
    的頭像 發表于 04-30 18:40 ?792次閱讀
    <b class='flag-5'>硬件</b>原理圖<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    STM32F10xxx硬件開發指南

    官方STM32F10xxx硬件開發指南
    發表于 04-14 14:59 ?2次下載

    STM32學習USART之基礎篇(可下載)

    今天分享 USART 設計前的基礎知識我們先來了解一下有關通信的基本概念:通信:兩個設備之間進行數據交換時,稱這個過程為兩個設備間的通信并行通信:設備之間的數據是以一位一位的二進制數進行傳輸的,并行
    發表于 03-31 15:07 ?4次下載

    STM32Cube學習筆記 (十六篇全)

    資料介紹: STM32Cube學習筆記,一步一步手把手帶你進入STM32Cube的世界,包括點燈,按鍵,串口,ADC,DAC等等一共16篇。 純分享貼,有需要可以直接下載附件獲取完
    發表于 03-22 17:02

    IPC2221簡略學習筆記

    關于IPC2221的學習筆記
    發表于 03-14 18:07 ?5次下載

    STM32F107的USART2為什么進不了中斷?

    剛開始學STM32,手里有一塊公司的板子,板子上的USB接到FT232R,再從FT232R接到MCU的PD5(USART2TX)和PD6(USART2RX)。 我嘗試了公司的代碼,應該是用標準庫寫
    發表于 03-14 16:57

    請問STM32部署機器學習算法硬件至少要使用哪個系列的芯片?

    STM32部署機器學習算法硬件至少要使用哪個系列的芯片?
    發表于 03-13 07:34

    stm32g0b1中的usart5進不去HAL_UARTEx_RxEventCallback,為什么?

    請教一下關于stm32g系列的問題,stm32g0b1中的usart5進不去HAL_UARTEx_RxEventCallback,cudemx上配置跟其他串口也是一樣的,都打開中斷了,也配置了dma
    發表于 03-13 06:51

    【嵌入式學習利器】STM32全流程虛擬仿真系統,零基礎小白到軟硬件全棧工程師的修煉之路

    在嵌入式開發領域,硬件原理的抽象性和項目全流程的復雜性一直是初學者面臨的挑戰,尤其是像STM32單片機開發這種軟硬件結合的方向,初學者很容易被復雜的硬件知識、寄存器配置、PCB設計這些
    的頭像 發表于 03-11 16:20 ?141次閱讀
    【嵌入式<b class='flag-5'>學習</b>利器】<b class='flag-5'>STM32</b>全流程虛擬仿真系統,零基礎小白到軟<b class='flag-5'>硬件</b>全棧工程師的修煉之路

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,為什么?

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,參考其他代碼做了初始化操作,可以通過HAL_USART_Transmit接口發送數據,但是
    發表于 03-07 07:48

    如何快速學習硬件電路

    對于想要學習硬件電路的新手來說,一開始可能感到有些困難,但只要掌握了正確的學習方法和技巧,就能夠快速地成為一名優秀的硬件電路工程師。 首先,新手需要了解基本的電路知識,例如電阻、電容、
    的頭像 發表于 01-20 11:11 ?1026次閱讀
    如何快速<b class='flag-5'>學習</b><b class='flag-5'>硬件</b>電路

    stm32用串口燒錄怎么設置

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

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

    通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記
    的頭像 發表于 08-12 18:29 ?2711次閱讀
    第三篇-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 ?2418次閱讀
    第一篇:V1.5-<b class='flag-5'>STM32</b>f103c8t6智能小車<b class='flag-5'>筆記</b> 標準庫開發 6612電機驅動新手入門項目