一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

小麥大叔 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2022-05-23 11:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是小麥。

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

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

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

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

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

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

因為DMA功能有HCTC中斷;

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

舉個例子;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Enjoy : )

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

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

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

    關(guān)注

    5152

    文章

    19675

    瀏覽量

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

    關(guān)注

    1

    文章

    265

    瀏覽量

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

    關(guān)注

    3

    文章

    576

    瀏覽量

    103269

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

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

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

    嵌入式開發(fā)

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

    學(xué)嵌入式開發(fā)入門_學(xué)嵌入式開發(fā)需要看哪些書籍

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    嵌入式開發(fā)聽起來很高大上,但其實它就在我們身邊。   嵌入式開發(fā)是指將操作系統(tǒng)、應(yīng)用程序或數(shù)據(jù)存儲在嵌入式設(shè)備,如手機、平板電腦、智能家居等。   隨著物聯(lián)網(wǎng)時代的到來,
    的頭像 發(fā)表于 10-12 15:40 ?2352次閱讀