91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【STM32學(xué)習(xí)筆記】USART 硬件流控

小劉 ? 來源:辰光 ? 作者:辰光 ? 2022-02-18 17:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

本文著重探討硬件流控。

為什么需要流控?

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

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

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

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

pYYBAGIPa6GAXpd0AADF8ILZD7g144.png

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

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

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

數(shù)據(jù)線方向與流控線數(shù)據(jù)方向相反

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

數(shù)據(jù)在接收的時候具體如何操作?

poYBAGIPa8eAK15bAAEzA7WN2b0714.png

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

從圖2 - 接收與 RTS 信號原理圖中,我們可以看到,RTS 信號在數(shù)據(jù)沒有被讀取之前都是保持在高電平狀態(tài),我們可以看到在 Start 之前都是高電平,這也就是告訴發(fā)送端,數(shù)據(jù)還沒有被拿走,請發(fā)送端等待,一旦數(shù)據(jù)被 DMA 或者 CPU 從 DR 寄存器讀取之后,RTS 就釋放高電平,變?yōu)榈碗娖剑@時候發(fā)送端如果想發(fā)送數(shù)據(jù)的話就可以直接發(fā)送了。

一句話概括,就是 RTS 表示了 USART 是否已經(jīng)準(zhǔn)備好接收新的數(shù)據(jù)了。

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

pYYBAGIPa-qAJOhGAAGf5F9fTkc064.png

▲圖3,發(fā)送與CTS信號原理圖

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

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

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

這里其實我們可以簡單理解一下,在發(fā)送的時候要實時監(jiān)測 CTS 的電平狀態(tài),如果發(fā)現(xiàn)是高電平,就不會再發(fā)送新的數(shù)據(jù),直到 CTS 檢測發(fā)現(xiàn)已經(jīng)沒有高電平信號了。

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

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

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

軟件配置

pYYBAGIPbAWAVj0MAALe7TCYGqA518.png

▲圖4,軟件配置

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

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

硬件流控和軟件流控的區(qū)別

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

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

在實際的應(yīng)用開發(fā)中,大家需要根據(jù)自己的實際情況來選擇使用硬件流控還是軟件流控。

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2310

    文章

    11172

    瀏覽量

    373807
  • 硬件設(shè)計
    +關(guān)注

    關(guān)注

    18

    文章

    466

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    LAT1171+STM32F745 USART1 Bootloader 失敗原因分析與解決

    STM32 的 Bootloader 可以支持多種協(xié)議的,比如 USART,I2C,DFU 等等,USARTBootloader 是客戶使用 STM32 的時候常常會用到的協(xié)議。客戶在
    發(fā)表于 01-11 17:33 ?0次下載

    AN2606_STM32單片機系統(tǒng)內(nèi)存啟動方式應(yīng)用筆記

    自舉程序存儲在STM32器件的內(nèi)部自舉ROM(系統(tǒng)存儲器)中,由ST在生產(chǎn)期間進(jìn)行編程。其主要任務(wù)是通過一種可用的串行外設(shè)(如USART、CAN、USB、I 2C)將應(yīng)用程序下載到內(nèi)部Flash中
    發(fā)表于 01-08 14:49 ?0次下載

    USART使用中斷模式通訊

    )而開發(fā),對于其他版本的BSP,需要注意使用上的區(qū)別。 支持型號: AT32F403Axx 主要使用外設(shè): USART 1 快速使用方法 1.1 硬件資源 1) AT-START-F403A
    發(fā)表于 11-19 13:12

    AT32F系列 PWC USART接收喚醒SLEEP

    、USART、GPIO 下載示例 1 快速使用方法硬件資源 1) AT-START-F403A V1.0開發(fā)板(其他型號請使用對應(yīng)的開發(fā)板) 2) 串口PA9, PA10 1.2 軟件資源 1
    發(fā)表于 11-05 14:06

    STM32學(xué)習(xí)路線!600+講課程!軟硬件兼修:裸機+RTOS+LVGL+硬件設(shè)計+項目實戰(zhàn) (STM32多核心開發(fā)板)

    數(shù)據(jù)采集,從AIoT終端設(shè)備的低功耗運算到邊緣節(jié)點的多任務(wù)調(diào)度,STM32芯片憑借其豐富外設(shè)資源、靈活算力配置與卓越的性價比,已成為嵌入式領(lǐng)域的核心硬件載體。結(jié)合RTO
    的頭像 發(fā)表于 10-17 16:39 ?850次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>學(xué)習(xí)</b>路線!600+講課程!軟<b class='flag-5'>硬件</b>兼修:裸機+RTOS+LVGL+<b class='flag-5'>硬件</b>設(shè)計+項目實戰(zhàn) (<b class='flag-5'>STM32</b>多核心開發(fā)板)

    STM32串口發(fā)送數(shù)據(jù),USART_FLAG_TC無法置位怎么解決?

    STM32串口發(fā)送數(shù)據(jù),在經(jīng)過一段時間的數(shù)據(jù)發(fā)送,大概200ms發(fā)送一下,一次發(fā)送大概二三十個字節(jié)的數(shù)據(jù),有可能會發(fā)生USART_FLAG_TC不置位的情況,如何解決或者避免?輪詢發(fā)送,后卡在了
    發(fā)表于 07-29 11:44

    AT32 IAP using the USART

    USART是本應(yīng)用筆記中的示例。 IAP_Programmer.exe上位機軟件和嵌入式IAP USART示例的源代碼位于BSP固件庫的utilities文件夾內(nèi)。 概述 IAP
    發(fā)表于 07-11 10:51

    stm32N657配置USART2,可以發(fā)送,但是為什么無法進(jìn)入接收中斷呢?

    https://gitee.com/liu-qingchang/code/tree/master/stm32n6 main函數(shù)和usart代碼 使用stm32N657這塊評估板,使用cubeMX配置
    發(fā)表于 06-18 07:13

    第十四章 USART——串口通訊

    本章介紹了USART串口通訊,含物理層(RS-232、TTL電平)、協(xié)議層(波特率、數(shù)據(jù)幀),及W55MH32的USART功能與應(yīng)用。
    的頭像 發(fā)表于 06-14 16:30 ?1874次閱讀
    第十四章 <b class='flag-5'>USART</b>——串口通訊

    AS32X601驅(qū)動系列教程 USART_串口通訊詳解

    USART 不僅支持同步單向通信和半雙工單線通信,以及 LIN(局域互連網(wǎng)絡(luò))和調(diào)制解調(diào)器操作 (CTS/RTS) 通過配置多個緩沖區(qū)使用 DMA(直接存儲器訪問)可實現(xiàn)高速數(shù)據(jù)通信,其通信數(shù)據(jù)格式如下: 硬件設(shè)計 評估板板載了一顆CH340 usb轉(zhuǎn)ttl芯片用于串
    的頭像 發(fā)表于 05-23 16:54 ?935次閱讀
    AS32X601驅(qū)動系列教程 <b class='flag-5'>USART</b>_串口通訊詳解

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

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

    硬件原理圖學(xué)習(xí)筆記

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

    STM32F10xxx硬件開發(fā)指南

    官方STM32F10xxx硬件開發(fā)指南
    發(fā)表于 04-14 14:59 ?3次下載

    STM32學(xué)習(xí)USART之基礎(chǔ)篇(可下載)

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

    STM32Cube學(xué)習(xí)筆記 (十六篇全)

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