色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

嵌入式開(kāi)發(fā)中串口通訊方案

小麥大叔 ? 來(lái)源:小麥大叔 ? 作者:小麥大叔 ? 2022-05-23 11:48 ? 次閱讀

大家好,我是小麥。

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

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

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

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

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

f8522910-da49-11ec-ba43-dac502259ad0.png空閑信號(hào)

因?yàn)镈MA功能有HCTC中斷;

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

舉個(gè)例子;

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

  • DMA接收到第6個(gè)字節(jié)的時(shí)候,會(huì)觸發(fā)HC事件;
  • DMA接收到第12個(gè)字節(jié)的時(shí)候,會(huì)觸發(fā)TC事件;
f878edb6-da49-11ec-ba43-dac502259ad0.pngHC TC

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

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

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

f88bcecc-da49-11ec-ba43-dac502259ad0.png來(lái)自原項(xiàng)目

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

  • R 讀取;
  • W 寫(xiě)入;
  • 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ù)處理;

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

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

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

所以,不難發(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

f9052b3c-da49-11ec-ba43-dac502259ad0.png項(xiàng)目主頁(yè)

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

f919ab02-da49-11ec-ba43-dac502259ad0.png支持平臺(tái)

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

f9537e9a-da49-11ec-ba43-dac502259ad0.png例子程序

作者在 STM32F413-Nucleo 開(kāi)發(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 : )

原文標(biāo)題:高效,可靠,安全的串口通訊開(kāi)源方案

文章出處:【微信公眾號(hào):小麥大叔】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304809
  • 串口通訊
    +關(guān)注

    關(guān)注

    1

    文章

    258

    瀏覽量

    24914
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    560

    瀏覽量

    100546

原文標(biāo)題:高效,可靠,安全的串口通訊開(kāi)源方案

文章出處:【微信號(hào):knifewheat,微信公眾號(hào):小麥大叔】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式開(kāi)發(fā)調(diào)試經(jīng)驗(yàn)分享

    嵌入式開(kāi)發(fā)過(guò)程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)嵌入式開(kāi)發(fā)最麻煩的在現(xiàn)場(chǎng)調(diào)試過(guò)程或?qū)嶋H運(yùn)營(yíng)過(guò)程中出現(xiàn)問(wèn)題很難定位。我在實(shí)際開(kāi)發(fā)過(guò)程中一點(diǎn)經(jīng)驗(yàn)分享給大家嵌入式開(kāi)發(fā)
    發(fā)表于 11-05 08:15

    嵌入式開(kāi)發(fā)圣經(jīng)

    嵌入式系統(tǒng)開(kāi)發(fā)圣經(jīng):嵌入式開(kāi)發(fā)圣經(jīng)
    發(fā)表于 03-25 13:08 ?88次下載

    基于ARM的嵌入式開(kāi)發(fā)

    基于ARM的嵌入式開(kāi)發(fā):華清遠(yuǎn)見(jiàn)/孫天澤基于ARM的嵌入式開(kāi)發(fā)內(nèi)容有:ARM簡(jiǎn)介,基于ARM的嵌入式產(chǎn)品,ARM架構(gòu),基于ARM的嵌入式開(kāi)發(fā)。
    發(fā)表于 10-04 08:49 ?83次下載

    嵌入式開(kāi)發(fā)

    嵌入式開(kāi)發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),嵌入式Linux是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng)。這里提供了
    發(fā)表于 12-20 13:21
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>

    學(xué)嵌入式開(kāi)發(fā)入門(mén)_學(xué)嵌入式開(kāi)發(fā)需要看哪些書(shū)籍

    現(xiàn)在嵌入式開(kāi)發(fā)越來(lái)越吃香,很多人都想要學(xué)習(xí)卻不知道要從何下手。本文分析了學(xué)習(xí)嵌入式軟件開(kāi)發(fā)需要具備哪些基本知識(shí)和技能,開(kāi)發(fā)學(xué)習(xí)的基本步驟,并給出了各種參考資料及網(wǎng)站,同時(shí)小編還推薦了學(xué)
    的頭像 發(fā)表于 04-04 10:25 ?2.5w次閱讀

    嵌入式開(kāi)發(fā)好學(xué)嗎_嵌入式開(kāi)發(fā)職業(yè)發(fā)展方向是什么

    本文首先來(lái)了解一下嵌入式前景及薪資待遇,其次解答了嵌入式開(kāi)發(fā)好學(xué)不好學(xué)的問(wèn)題,最后闡述了嵌入式開(kāi)發(fā)必會(huì)知識(shí)以及嵌入式開(kāi)發(fā)職業(yè)的四大發(fā)展方向,具體的跟隨小編一起來(lái)了解一下。
    的頭像 發(fā)表于 05-18 16:41 ?9168次閱讀

    嵌入式開(kāi)發(fā)的產(chǎn)品有哪些_嵌入式開(kāi)發(fā)的流程

    本文主要闡述了嵌入式開(kāi)發(fā)的產(chǎn)品,其次介紹了嵌入式開(kāi)發(fā)的流程。
    發(fā)表于 08-31 15:38 ?1.1w次閱讀

    嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門(mén)

    嵌入式開(kāi)發(fā)環(huán)境及交叉編譯環(huán)境,開(kāi)發(fā)完成后,編譯得到bin文件,然后在Windows下將bin文件通過(guò)串口或網(wǎng)絡(luò)下發(fā)到嵌入式板卡,程序在嵌入式
    發(fā)表于 10-14 10:58 ?79次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>(一):<b class='flag-5'>嵌入式開(kāi)發(fā)</b>新手入門(mén)

    嵌入式開(kāi)發(fā)資料免費(fèi)分享

    嵌入式開(kāi)發(fā)資料免費(fèi)分享嵌入式工程師經(jīng)驗(yàn)分享:如何學(xué)習(xí)嵌入式開(kāi)發(fā)截取文檔部分學(xué)習(xí)嵌入式工程師經(jīng)驗(yàn)分享的資料分享給大家,文檔上從、嵌入式系統(tǒng)的概
    發(fā)表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>資料免費(fèi)分享

    嵌入式開(kāi)發(fā)putty串口打印亂碼

    目錄嵌入式開(kāi)發(fā)putty串口打印亂碼編碼格式問(wèn)題波特率設(shè)置錯(cuò)誤嵌入式開(kāi)發(fā)putty串口打印亂碼在使用putty連接串口打印的時(shí)候,發(fā)現(xiàn)打印亂
    發(fā)表于 11-02 18:21 ?12次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>putty<b class='flag-5'>串口</b>打印亂碼

    嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門(mén)(轉(zhuǎn)載后續(xù)需要修改補(bǔ)充)

    嵌入式開(kāi)發(fā)環(huán)境及交叉編譯環(huán)境,開(kāi)發(fā)完成后,編譯得到bin文件,然后在Windows下將bin文件通過(guò)串口或網(wǎng)絡(luò)下發(fā)到嵌入式板卡,程序在嵌入式
    發(fā)表于 11-02 20:06 ?17次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>(一):<b class='flag-5'>嵌入式開(kāi)發(fā)</b>新手入門(mén)(轉(zhuǎn)載后續(xù)需要修改補(bǔ)充)

    python做嵌入式開(kāi)發(fā)_Python和嵌入式的區(qū)別是什么?可以做嵌入式開(kāi)發(fā)嗎?

    從概念上來(lái)說(shuō),嵌入式和Python的區(qū)別還是比較明顯的,嵌入式是一個(gè)開(kāi)發(fā)領(lǐng)域,而Python則是一門(mén)編程語(yǔ)言。下面就來(lái)和大家說(shuō)一說(shuō)嵌入式和Python這兩個(gè)之間的區(qū)別。
    發(fā)表于 11-02 20:21 ?14次下載
    python做<b class='flag-5'>嵌入式開(kāi)發(fā)</b>_Python和<b class='flag-5'>嵌入式</b>的區(qū)別是什么?可以做<b class='flag-5'>嵌入式開(kāi)發(fā)</b>嗎?

    MicroPython 在嵌入式開(kāi)發(fā)的興起

    MicroPython 在嵌入式開(kāi)發(fā)的興起
    的頭像 發(fā)表于 01-04 11:17 ?1871次閱讀

    STM32嵌入式開(kāi)發(fā)的RTOS,你用過(guò)哪些?

    STM32嵌入式開(kāi)發(fā)的RTOS,你用過(guò)哪些?
    的頭像 發(fā)表于 09-18 16:21 ?2151次閱讀
    STM32<b class='flag-5'>嵌入式開(kāi)發(fā)</b><b class='flag-5'>中</b>的RTOS,你用過(guò)哪些?

    Linux系統(tǒng)的嵌入式開(kāi)發(fā)是什么

    嵌入式開(kāi)發(fā)聽(tīng)起來(lái)很高大上,但其實(shí)它就在我們身邊。   嵌入式開(kāi)發(fā)是指將操作系統(tǒng)、應(yīng)用程序或數(shù)據(jù)存儲(chǔ)在嵌入式設(shè)備,如手機(jī)、平板電腦、智能家居等。   隨著物聯(lián)網(wǎng)時(shí)代的到來(lái),
    的頭像 發(fā)表于 10-12 15:40 ?1752次閱讀
    主站蜘蛛池模板: 大地影院在线播放| 自拍偷拍12p| 亚洲不卡视频在线观看| 无码人妻精品国产婷婷| 午夜伦理在线观看| 亚洲欧美高清在线| 这里只有精品网| 99婷婷久久精品国产一区二区| 99在线免费视频| 国产成人精品一区二区三区视频| 国产精品亚洲第一区二区三区| 国产在线精彩视频| 巨乳中文无码亚洲| 欧美日韩1区| 神电影院午夜dy888我不卡| 午夜一个人在线观看完整版| 亚洲日本在线不卡二区| 做暧暧免费30秒体验| 超碰人人澡人人胔| 国产精品乱码一区二区三| 久久精品国产男包| 欧美写真视频一区| 午夜插插插| 在线观看免费视频a| yw193龙物免费官网在线| 福利一区国产| 精品伊人久久| 欧美写真视频一区| 亚洲欧洲精品成人久久曰影片| 8090碰成年女人免费碰碰尤物| 岛国片免费看| 久久精品免费观看久久| 日产精品久久久久久久蜜殿| 亚洲久久少妇中文字幕| fyeex性欧美人与曾| 国语自产二区高清国语自产拍| 男女一边摸一边做羞羞的事情免费| 无毒成人社区| 99re6久久在热线视频| 国产免费人成在线视频有码 | 最近免费视频中文2019完整版 |