那曲檬骨新材料有限公司

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

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

3天內不再提示

【代碼分享】基于樂鑫ESP32的串口不定長數據接收方法

機智云 ? 2024-11-15 01:02 ? 次閱讀

4744694a-a2aa-11ef-8084-92fbcf53809c.png串口不定長數據包

1、背景

為什么要實現串口不定長數據包的接收?

在使用串口進行數據接時,有時候我們并不知道對方的串口數據協議格式,于是沒辦法按照協議進行解析,也就無法提取完整的數據包出來,而應用層則需要完整的數據包進行處理,就迫使我們需要實現一種不定長數據包提取的實現方式;

舉個例子,如果我們串口對接的是設備的串口的日志,由于日志并不是固定長度的,那么我們如何來提取一行日志呢(通過判斷換行符是一種方法)?如果對方的日志是不可見字符呢?

通過實現串口不定長數據包的接收,可以提高系統的靈活性和適應性,使其能夠更好地應對不同的數據傳輸需求。

一句話: 本文實現了esp32串口不定長數據接收方法,當接收數據超過512個字節自動按512個字節自動打包,如果不足512個字節,則通過兩個數據的時間間隔差自動拆分包;

不想聽我啰嗦,公眾號后臺私信: 代碼分享 即可獲取完整工程;

2、實現

STM32平臺有一個串口空閑的標志位,我們通過判斷串口的空閑標志位來實現,但是如果使用ESP32,則很遺憾,我并沒有見到有此標志位可以使用,那么本文將通過軟件方式來實現串口不定長數據的接收實現;

2.1、實現平臺

idf版本: esp-idf-v5.2.0

硬件: esp32-c3

2.2、實現的邏輯

在串口接收到數據時,啟動串口數據監聽和串口數據包處理兩個線程;

監聽線程監聽到數據:判斷接收到的數據長度是否大于512個字節,如果是則把512個字節打包為一個數據包,如果數據不足512個字節,則先緩存起來,然后記錄此時的時間為T1;

如果打包之后還有數據,則繼續運行第1步,如果剩余的數據不足512個字節,則先緩存起來,然后記錄此時的時間T1;

定時器周期檢測T1與當前時間的差值,如果差值大于100ms,則把剩余的數據打包為一個數據包;

如果還有新的數據監測到,則重新開始第1步;

串口數據包處理現場監聽到有數據包處理則進行處理;

2.3、邏輯流程圖

47712836-a2aa-11ef-8084-92fbcf53809c.png串口不定長流程圖

3實現效果測試數據

3.1、 數據小于512個字節

串口輸入(20個字節):"30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30"

代碼識別:達到預期效果

uart_rx_ap|229|[uart]***********************0020**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030

串口輸入(20個字節):"30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30"(150ms周期發送)

代碼識別(自動拆分為多次多個數據包,每個數據包還是21個字節):達到預期效果

uart_rx_ap|229|[uart]***********************0020**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030

uart_rx_ap|229|[uart]***********************0020**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030

uart_rx_ap|229|[uart]***********************0020**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030

串口輸入(20個字節):"30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30"(15ms周期發送)

uart_rx_ap|229|[uart]***********************0512**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]303030303030303030303030

uart_rx_ap|229|[uart]***********************0176**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]30303030303030303030303030303030

  • 代碼識別:達到預期效果(按512個字節打包,不足的按間隔打包)

3.2、數據等于于512個字節

  • 串口輸入(512個字節):"30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 ... ... 30"
    • 代碼識別:達到預期效果

uart_rx_ap|229|[uart]***********************0512**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]303030303030303030303030

3.3、數據大于512個字節

串口輸入(565個字節):"30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 ... ... 30"

代碼識別:達到預期效果

uart_rx_ap|229|[uart]***********************0512**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]303030303030303030303030

uart_rx_ap|229|[uart]***********************0053**********************
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]3030303030303030303030303030303030303030
uart_rx_ap|229|[uart]30303030303030303030303030

溫馨提示: 公眾號后臺私信發送: 代碼分享 即可獲取完整工程;

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

    關注

    14

    文章

    1557

    瀏覽量

    77033
  • 數據包
    +關注

    關注

    0

    文章

    267

    瀏覽量

    24500
  • 數據接收
    +關注

    關注

    0

    文章

    12

    瀏覽量

    7833
  • ESP32
    +關注

    關注

    18

    文章

    978

    瀏覽量

    17523
收藏 人收藏

    評論

    相關推薦

    不定長數據接收的原理是什么?怎么實現串口數據不定長接收

    不定長數據接收的原理是什么?怎么實現串口數據不定長接收
    發表于 11-16 08:11

    STM32串口接收不定長數據的實現方法

    STM32串口接收不定長數據的實現方法
    發表于 12-09 06:17

    基于DMA接收利用空閑模式接收不定長數據

    的利用空閑模式接收不定長數據方法,都是基于DMA接收的,個人項目因為有低功耗需要,平時是在停機模式,在喚醒后才能
    發表于 01-12 07:44

    HAL庫下串口接收不定長數據方法

    STM32單片機HAL庫下串口接收不定長數據HAL庫下的串口接收
    發表于 01-19 06:55

    了解在MCU中實現串口不定長數據接收的過程

    在MCU的應用中,經常需要通過串口進行不定長數據包的傳輸。發送方很簡單,不需特別的考慮,而接收方則需要能夠偵測到數據包的結束。
    的頭像 發表于 08-03 16:37 ?7308次閱讀
    了解在MCU中實現<b class='flag-5'>串口</b>的<b class='flag-5'>不定長</b><b class='flag-5'>數據</b>包<b class='flag-5'>接收</b>的過程

    stm32 串口接收不定長度數據及黏包處理 + 串口DMA接收

    1.不定長度數據 為什么會存在串口接收不定長度數據呢?首先,在通信雙方進行數據傳輸的時候,由于不同的設備在實現控制,
    發表于 12-23 19:09 ?27次下載
    stm32 <b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>不定長度數據</b>及黏包處理 + <b class='flag-5'>串口</b>DMA<b class='flag-5'>接收</b>

    STM32 DMA串口接收不定長數據

    STM32 DMA串口接收不定長數據
    發表于 12-24 18:50 ?40次下載
    STM32  DMA<b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    STM32之串口DMA接收不定長數據

    目錄STM32之串口DMA接收不定長數據引言DMA簡介什么是DMA在STM32的DMA資源DMA接收數據
    發表于 12-24 19:03 ?30次下載
    STM32之<b class='flag-5'>串口</b>DMA<b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    esp32-c2開發演示

    esp32-c2開發演示
    的頭像 發表于 11-17 15:39 ?2383次閱讀
    <b class='flag-5'>樂</b><b class='flag-5'>鑫</b><b class='flag-5'>esp32</b>-c2開發演示

    STM32CubeMX之串口接收不定長數據

    基本串口通信通常只能接收定長數據,無法穩定接收不定長數據
    的頭像 發表于 05-11 09:59 ?3567次閱讀
    STM32CubeMX之<b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    【筆記】接收不定長串口數據的方式(附代碼)

    不定長串口數據接收方面,有多種方式可供選擇。以下是幾種常見的方法:1.基于幀頭幀尾:通過在數據幀的開頭和結尾添加特定的幀頭和幀尾標識來確定
    的頭像 發表于 06-07 10:00 ?3322次閱讀
    【筆記】<b class='flag-5'>接收</b><b class='flag-5'>不定長串口</b><b class='flag-5'>數據</b>的方式(附<b class='flag-5'>代碼</b>)

    ESP32-LyraTD-DSPG_用戶手冊

    ESP32-LyraTD-DSPG_用戶手冊多年來深耕?AIoT?領域軟硬件產品的研發與設計,專注于研發高集成、低功耗、性能卓越、安
    發表于 10-19 16:13 ?1次下載

    ESP32-WROOM-32UE參考設計

    ESP32-WROOM-32UE參考設計ESP32將天線開關、RFbalun、功率放大器、接收低噪聲放大器、濾波器、電源管理模塊等功能集
    發表于 10-19 16:13 ?14次下載

    ESP32-SenseKit參考設計

    ESP32-SenseKit參考設計ESP32將天線開關、RFbalun、功率放大器、接收低噪聲放大器、濾波器、電源管理模塊等功能集于一
    發表于 10-19 16:13 ?2次下載

    ESP32-MINI-1參考設計

    ESP32-MINI-1參考設計多年來深耕?AIoT?領域軟硬件產品的研發與設計,專注于研發高集成、低功耗、性能卓越、安全穩定、高性
    發表于 10-19 16:13 ?13次下載
    大发888 894| 稳赢的百家乐官网投注方法| 顶级赌场371betcwm| 大发888 asia| 奇博| 网上百家乐官网可靠| 思南县| 玩百家乐官网会犯法吗| 百家乐官网是否有规律| 遂川县| 百家乐官网翻天粤语下载| 太阳城百家乐官网群| 真人百家乐官网澳门娱乐城| 百家乐官网2号说名书| 同花顺百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城简介| 中华德州扑克论坛| 博狗| 金赞娱乐| 百家乐官网博彩软件| 小孟百家乐官网的玩法技巧和规则| 百家乐最新赌王| 华人百家乐官网博彩论| 百家乐是多少个庄闲| 澳门百家乐真人娱乐城| 四方百家乐的玩法技巧和规则 | 大世界百家乐官网娱乐网| 网上百家乐官网内| 百家乐画哪个路单| 大发888娱乐场17| 网上现金博彩网| 百家乐官网园选百利宫| 百家乐真人娱乐注册| 希尔顿百家乐娱乐城| 大发888是什么游戏| 浮山县| 诺贝尔百家乐官网的玩法技巧和规则| 网络百家乐模拟投注| 德州扑克牌| 网络百家乐官网投注| 赌博百家乐的乐趣|