在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁(yè) > 博客 > 高效,可靠,安全的串口通訊開源方案

            高效,可靠,安全的串口通訊開源方案

            發(fā)布人:xiaomaidashu 時(shí)間:2022-06-22 來(lái)源:工程師 發(fā)布文章

            大家好,我是小麥。

            在嵌入式開發(fā)中,經(jīng)常會(huì)用到串口通訊。面對(duì)不同應(yīng)用場(chǎng)景,需要不同的方案。

            今天我們來(lái)講一下高效,可靠,安全的方案,記得看到最后,會(huì)有收獲。

            常見的有串口輪詢模式,串口中斷模式,串口DMA接收傳輸?shù)鹊龋?/p>

            利用串口的空閑中斷配合DMA的環(huán)形緩沖區(qū)模式,可以高效接收不固定長(zhǎng)度的消息報(bào)文

            下圖中經(jīng)過(guò)黃色的高電平時(shí)間空閑之后,就會(huì)產(chǎn)生一個(gè)空閑事件,IDLE EVENT

            圖片

            空閑信號(hào)

            因?yàn)镈MA功能有HC和TC中斷;

            • HC  (Harf Complete)DMA傳輸一半成功標(biāo)志;
            • TC   (Total Complete)  DMA傳輸完成成功標(biāo)志;

            舉個(gè)例子;

            如下圖所示,這里分配了一個(gè)DMA緩沖區(qū),大小是12字節(jié),如果從地址1開始接收,會(huì)出現(xiàn)以下這兩種情況;

            • DMA接收到第6個(gè)字節(jié)的時(shí)候,會(huì)觸發(fā)HC事件;
            • DMA接收到第12個(gè)字節(jié)的時(shí)候,會(huì)觸發(fā)TC事件;

            圖片HC TC

            這個(gè)思路其實(shí)我之前也有實(shí)踐過(guò),但是沒(méi)有很好地利用HC和TC事件。

            所以無(wú)法處理這種情況,即DMA緩沖區(qū)處于環(huán)形模式(Circular)的時(shí)候,數(shù)據(jù)覆蓋的問(wèn)題,最近看到了一個(gè)非常棒的開源項(xiàng)目,這里的思路非常不錯(cuò),下面會(huì)詳細(xì)介紹。

            下面是DMA HC/DMA TC/Idle組合進(jìn)行串口接收的細(xì)節(jié),如下圖所示;

            圖片來(lái)自原項(xiàng)目

            再次簡(jiǎn)單介紹一下縮略詞的含義;

            • R 讀??;
            • W 寫入;
            • I 空閑信號(hào);
            • HT Half-Transfer complete DMA緩沖區(qū)半傳輸完成;
            • TC Transfer-Complete DMA緩沖區(qū)全部接收完成;

            這里簡(jiǎn)單介紹一下情況E的解決方案,上面圖片最右邊小圖;

            • 緩沖區(qū)大小20格,這里假設(shè)20字節(jié),情況E需要接收30個(gè)字節(jié),也就是說(shuō),10字節(jié)可能會(huì)被覆蓋;

            • 經(jīng)過(guò)前面的四次接收后,串口繼續(xù)從字母R處接收數(shù)據(jù)至DMA緩沖區(qū);

            • 接收4字節(jié)時(shí),會(huì)觸發(fā)TC事件,這時(shí)候可以將4字節(jié)數(shù)據(jù)處理;

              圖片第一步
            • 因?yàn)槭黔h(huán)形模式,所以回到第一個(gè)字節(jié)處,繼續(xù)接收10字節(jié),觸發(fā)HT事件,這時(shí)候可以處理10字節(jié)數(shù)據(jù);

              圖片第二步
            • 第三步,繼續(xù)接收10字節(jié),觸發(fā)TC事件,其中,已經(jīng)有4字節(jié)被覆蓋(下圖橙色所示),因?yàn)橹斑@部分?jǐn)?shù)據(jù)已經(jīng)處理了,所以,即使覆蓋也不影響;

              圖片第三步
            • 第四步,上述已經(jīng)接收了24個(gè)字節(jié),所以還有6個(gè)字節(jié)沒(méi)有接收,后面接收會(huì)產(chǎn)生空閑信號(hào),并對(duì)之前的數(shù)據(jù)區(qū)域進(jìn)行覆蓋,如下圖示所示;圖片

            所以,不難發(fā)現(xiàn),如果只使用空閑中斷,如果需要接收的數(shù)據(jù)長(zhǎng)度大于緩沖區(qū),就會(huì)出現(xiàn)數(shù)據(jù)覆蓋的情況,而加上DMA的HT和TC中斷,就完美解決了這樣的問(wèn)題;

            當(dāng)然除了這些,還有很多優(yōu)秀的方案,這個(gè)項(xiàng)目提供大量的例子。

            項(xiàng)目地址:https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx

            圖片項(xiàng)目主頁(yè)

            目前這個(gè)項(xiàng)目主要支持主流的STM32芯片平臺(tái)和一些開發(fā)板上的測(cè)試DEMO,具體如下所示;

            圖片支持平臺(tái)

            相應(yīng)的例子程序如下所示,除了裸機(jī)程序,還有環(huán)形緩沖區(qū)接收,輪詢接收,DMA+空閑中斷基于RTOS的模式接收,挺豐富的,可以參考一下;

            圖片例子程序

            作者在 STM32F413-Nucleo 開發(fā)板進(jìn)行程序的測(cè)試,發(fā)現(xiàn)優(yōu)化效果很不錯(cuò);

            在115200的串口波特率下,每秒發(fā)送1581個(gè)字節(jié),大約142ms;

            • 不使用DMA,CPU負(fù)載14%;
            • 使用DMA,CPU負(fù)載0%;

            最后,這個(gè)項(xiàng)目目前是基于STM32CubeIDE創(chuàng)建的,記得搭建一下環(huán)境。如果無(wú)法下載,公眾號(hào)后臺(tái)回復(fù)【高效串口】獲取項(xiàng)目代碼。

            Enjoy  : )


            *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

            電子鎮(zhèn)流器相關(guān)文章:電子鎮(zhèn)流器工作原理


            電子鎮(zhèn)流器相關(guān)文章:


            調(diào)光開關(guān)相關(guān)文章:
            調(diào)光開關(guān)原理



            關(guān)鍵詞: 串口通訊

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉