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

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

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

3天內不再提示

嵌入式開發中串口通訊方案

小麥大叔 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2022-05-23 11:48 ? 次閱讀

大家好,我是小麥。

嵌入式開發中,經常會用到串口通訊。面對不同應用場景,需要不同的方案。

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

常見的有串口輪詢模式,串口中斷模式,串口DMA接收傳輸等等;

利用串口的空閑中斷配合DMA的環形緩沖區模式,可以高效接收不固定長度的消息報文

下圖中經過黃色的高電平時間空閑之后,就會產生一個空閑事件,IDLE EVENT

f8522910-da49-11ec-ba43-dac502259ad0.png空閑信號

因為DMA功能有HCTC中斷;

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

舉個例子;

如下圖所示,這里分配了一個DMA緩沖區,大小是12字節,如果從地址1開始接收,會出現以下這兩種情況;

  • DMA接收到第6個字節的時候,會觸發HC事件;
  • DMA接收到第12個字節的時候,會觸發TC事件;
f878edb6-da49-11ec-ba43-dac502259ad0.pngHC TC

這個思路其實我之前也有實踐過,但是沒有很好地利用HC和TC事件。

所以無法處理這種情況,即DMA緩沖區處于環形模式(Circular)的時候,數據覆蓋的問題,最近看到了一個非常棒的開源項目,這里的思路非常不錯,下面會詳細介紹。

下面是DMA HC/DMA TC/Idle組合進行串口接收的細節,如下圖所示;

f88bcecc-da49-11ec-ba43-dac502259ad0.png來自原項目

再次簡單介紹一下縮略詞的含義;

  • R 讀取;
  • W 寫入;
  • I 空閑信號
  • HT Half-Transfer complete DMA緩沖區半傳輸完成;
  • TC Transfer-Complete DMA緩沖區全部接收完成;

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

  • 緩沖區大小20格,這里假設20字節,情況E需要接收30個字節,也就是說,10字節可能會被覆蓋

  • 經過前面的四次接收后,串口繼續從字母R處接收數據至DMA緩沖區;

  • 接收4字節時,會觸發TC事件,這時候可以將4字節數據處理;

    f89b99f6-da49-11ec-ba43-dac502259ad0.png第一步
  • 因為是環形模式,所以回到第一個字節處,繼續接收10字節,觸發HT事件,這時候可以處理10字節數據;

    f8ae2346-da49-11ec-ba43-dac502259ad0.png第二步
  • 第三步,繼續接收10字節,觸發TC事件,其中,已經有4字節被覆蓋(下圖橙色所示),因為之前這部分數據已經處理了,所以,即使覆蓋也不影響;

    f8c07fa0-da49-11ec-ba43-dac502259ad0.png第三步
  • 第四步,上述已經接收了24個字節,所以還有6個字節沒有接收,后面接收會產生空閑信號,并對之前的數據區域進行覆蓋,如下圖示所示;f8df95e8-da49-11ec-ba43-dac502259ad0.png

所以,不難發現,如果只使用空閑中斷,如果需要接收的數據長度大于緩沖區,就會出現數據覆蓋的情況,而加上DMA的HT和TC中斷,就完美解決了這樣的問題;

當然除了這些,還有很多優秀的方案,這個項目提供大量的例子。

項目地址https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx

f9052b3c-da49-11ec-ba43-dac502259ad0.png項目主頁

目前這個項目主要支持主流的STM32芯片平臺和一些開發板上的測試DEMO,具體如下所示;

f919ab02-da49-11ec-ba43-dac502259ad0.png支持平臺

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

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

作者在 STM32F413-Nucleo 開發板進行程序的測試,發現優化效果很不錯;

115200的串口波特率下,每秒發送1581個字節,大約142ms;

  • 不使用DMA,CPU負載14%;
  • 使用DMA,CPU負載0%;

最后,這個項目目前是基于STM32CubeIDE創建的,記得搭建一下環境。如果無法下載,公眾號后臺回復【高效串口】獲取項目代碼。

Enjoy : )

原文標題:高效,可靠,安全的串口通訊開源方案

文章出處:【微信公眾號:小麥大叔】歡迎添加關注!文章轉載請注明出處。

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

    關注

    5082

    文章

    19123

    瀏覽量

    305151
  • 串口通訊
    +關注

    關注

    1

    文章

    259

    瀏覽量

    24925
  • dma
    dma
    +關注

    關注

    3

    文章

    561

    瀏覽量

    100584

原文標題:高效,可靠,安全的串口通訊開源方案

文章出處:【微信號:knifewheat,微信公眾號:小麥大叔】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式開發調試經驗分享

    嵌入式開發過程中的一點調試經驗嵌入式開發最麻煩的在現場調試過程或實際運營過程中出現問題很難定位。我在實際開發過程中一點經驗分享給大家嵌入式開發
    發表于 11-05 08:15

    嵌入式開發圣經

    嵌入式系統開發圣經:嵌入式開發圣經
    發表于 03-25 13:08 ?88次下載

    基于ARM的嵌入式開發

    基于ARM的嵌入式開發:華清遠見/孫天澤基于ARM的嵌入式開發內容有:ARM簡介,基于ARM的嵌入式產品,ARM架構,基于ARM的嵌入式開發
    發表于 10-04 08:49 ?83次下載

    嵌入式開發

    嵌入式開發就是指在嵌入式操作系統下進行開發嵌入式Linux是以Linux為基礎的嵌入式作業系統。這里提供了
    發表于 12-20 13:21
    <b class='flag-5'>嵌入式開發</b>

    嵌入式開發入門_學嵌入式開發需要看哪些書籍

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

    嵌入式開發好學嗎_嵌入式開發職業發展方向是什么

    本文首先來了解一下嵌入式前景及薪資待遇,其次解答了嵌入式開發好學不好學的問題,最后闡述了嵌入式開發必會知識以及嵌入式開發職業的四大發展方向,具體的跟隨小編一起來了解一下。
    的頭像 發表于 05-18 16:41 ?9182次閱讀

    嵌入式開發的產品有哪些_嵌入式開發的流程

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

    嵌入式開發(一):嵌入式開發新手入門

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

    嵌入式開發資料免費分享

    嵌入式開發資料免費分享嵌入式工程師經驗分享:如何學習嵌入式開發截取文檔部分學習嵌入式工程師經驗分享的資料分享給大家,文檔上從、嵌入式系統的概
    發表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開發</b>資料免費分享

    嵌入式開發putty串口打印亂碼

    目錄嵌入式開發putty串口打印亂碼編碼格式問題波特率設置錯誤嵌入式開發putty串口打印亂碼在使用putty連接串口打印的時候,發現打印亂
    發表于 11-02 18:21 ?12次下載
    <b class='flag-5'>嵌入式開發</b>putty<b class='flag-5'>串口</b>打印亂碼

    嵌入式開發(一):嵌入式開發新手入門(轉載后續需要修改補充)

    嵌入式開發環境及交叉編譯環境,開發完成后,編譯得到bin文件,然后在Windows下將bin文件通過串口或網絡下發到嵌入式板卡,程序在嵌入式
    發表于 11-02 20:06 ?17次下載
    <b class='flag-5'>嵌入式開發</b>(一):<b class='flag-5'>嵌入式開發</b>新手入門(轉載后續需要修改補充)

    python做嵌入式開發_Python和嵌入式的區別是什么?可以做嵌入式開發嗎?

    從概念上來說,嵌入式和Python的區別還是比較明顯的,嵌入式是一個開發領域,而Python則是一門編程語言。下面就來和大家說一說嵌入式和Python這兩個之間的區別。
    發表于 11-02 20:21 ?14次下載
    python做<b class='flag-5'>嵌入式開發</b>_Python和<b class='flag-5'>嵌入式</b>的區別是什么?可以做<b class='flag-5'>嵌入式開發</b>嗎?

    MicroPython 在嵌入式開發的興起

    MicroPython 在嵌入式開發的興起
    的頭像 發表于 01-04 11:17 ?1879次閱讀

    STM32嵌入式開發的RTOS,你用過哪些?

    STM32嵌入式開發的RTOS,你用過哪些?
    的頭像 發表于 09-18 16:21 ?2172次閱讀
    STM32<b class='flag-5'>嵌入式開發</b><b class='flag-5'>中</b>的RTOS,你用過哪些?

    Linux系統的嵌入式開發是什么

    嵌入式開發聽起來很高大上,但其實它就在我們身邊。   嵌入式開發是指將操作系統、應用程序或數據存儲在嵌入式設備,如手機、平板電腦、智能家居等。   隨著物聯網時代的到來,
    的頭像 發表于 10-12 15:40 ?1774次閱讀
    主站蜘蛛池模板: 国产综合13p| 日a在线| 中文天堂在线最新2022更新| 午夜美女视频在线观看高清| 一级视频在线免费观看| www.亚洲色图.com| 在线午夜视频| 天天黄色| 精品午夜视频| tube69xxxxhd日本| 男人午夜视频| 亚洲成人看片| 日韩视频高清| 黄 色 毛片免费| 夜夜超b天天| 黄色国产在线观看| 最好看的2019中文字幕1| 美女国产在线观看免费观看 | 免费一级e一片在线播放| 国产在线观看午夜不卡| 亚洲精品456人成在线| www.色日本| 亚洲日本一区二区三区| 亚洲 欧美 丝袜 制服 在线| 日本色高清| 成人看片在线观看| 国产精品久久久久天天影视| 一区二区亚洲视频| 天堂国产| 站长工具天天爽视频| 日本一区高清视频| 欧美一区二区精品| 正在播放国产女免费| aaaaa国产毛片| 久久免费手机视频| 色片免费网站| 人人添| 精品卡一卡二 卡四卡视频| 手机看片福利久久| 国产精品高清免费网站| 另类免费视频|