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

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

    文章

    1554

    瀏覽量

    76512
  • 數據包
    +關注

    關注

    0

    文章

    261

    瀏覽量

    24392
  • 數據接收
    +關注

    關注

    0

    文章

    12

    瀏覽量

    7813
  • ESP32
    +關注

    關注

    18

    文章

    971

    瀏覽量

    17257
收藏 人收藏

    評論

    相關推薦

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

    不定長數據接收的原理是什么?怎么實現串口數據不定長接收
    發表于 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 ?7257次閱讀
    了解在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 ?2270次閱讀
    <b class='flag-5'>樂</b><b class='flag-5'>鑫</b><b class='flag-5'>esp32</b>-c2開發演示

    STM32CubeMX之串口接收不定長數據

    基本串口通信通常只能接收定長數據,無法穩定接收不定長數據
    的頭像 發表于 05-11 09:59 ?3395次閱讀
    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 ?3168次閱讀
    【筆記】<b class='flag-5'>接收</b><b class='flag-5'>不定長串口</b><b class='flag-5'>數據</b>的方式(附<b class='flag-5'>代碼</b>)

    ESP32-DevKitS-V1.1參考設計

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

    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次下載
    主站蜘蛛池模板: 免费永久欧美性色xo影院| 黄色小视频免费| 国产精品资源手机在线播放| 色一情一乱一乱91av| baoyu污污网站入口免费| 天堂网. www在线资源| 国产一级久久免费特黄| 九色九色九色在线综合888| 高h肉宠文1v1男男| 开心激情婷婷| 久热国产精品| 一级毛片免费毛片一级毛片免费 | 六月丁香六月婷婷| 免免费看片| 一卡二卡≡卡四卡亚洲高清| 狠狠躁夜夜躁人人躁婷婷视频| 九色视频网| 亚洲 欧美 综合| 91新地址| 性夜黄a爽影免费看| 农村妇女野外一级毛片| 欧美疯狂爱爱xxxxbbbb| 一级一级特黄女人精品毛片| 国产精品成人va在线观看入口 | 成人免费视频一区二区三区| 午夜黄色网址| 日本黄色录像视频| 免费一级毛片清高播放| 性夜影院午夜看片| 亚洲色图偷窥自拍| 男女交性视频免费播放| 韩国在线视频| 黄视频网站入口| 欧美精品成人久久网站| 国产人人看| 日韩一级免费毛片| 久久dvd| 四虎影视免费| 免费一级片在线观看| 亚洲欧美成人综合久久久| 亚洲vv|