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

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

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

3天內不再提示

單片機的通信協議該如何設計

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 作者:STM32嵌入式開發 ? 2022-07-05 17:19 ? 次閱讀

通信設計中考慮協議的靈活性,經常把協議設計成“不定長度”。

一個實例如下圖:銳米LoRa終端的通信協議幀。

25611622-fc42-11ec-ba43-dac502259ad0.jpg

如果一個系統接收上述“不定長度”的協議幀,將會有一個挑戰--如何高效接收與解析。

為簡化系統設計,我們強烈建議您采用“狀態機”來解析UART數據幀,并且把解析工作放在ISR(中斷服務程序)完成,僅當接收到最后一個字節(0x0D)時,再將整個數據幀提交給進程處理。

該解析狀態機的原理如下圖所示:

256fb7ae-fc42-11ec-ba43-dac502259ad0.jpg

那么ISR處理這個狀態機來得及嗎?答案是:so easy!因為它只有3個動作,運算量十分小:

比較接收數據 -> 更新狀態變量 -> 存儲接收數據,C語言僅3條語句,翻譯成機器指令也不超過10條。

代碼清單如下:

/*** @brief  Status of received communication frame*/typedef enum{    STATUS_IDLE = (uint8_t)0,    STATUS_HEAD, /* Rx Head=0x3C */    STATUS_TYPE, /* Rx Type */    STATUS_DATA, /* Data filed */    STATUS_TAIL, /* Tail=0x0D */    STATUS_END, /* End of this frame */} COMM_TRM_STATUS_TypeDef;

/*** @brief  Data object for received communication frame*/typedef struct{    uint8_t    byCnt; /* Count of 1 field */    uint8_t    byDataLen; /* Length of data field */    uint8_t    byFrameLen; /* Length of frame */    COMM_TRM_STATUS_TypeDef    eRxStatus;    uint8_t    a_byRxBuf[MAX_LEN_COMM_TRM_DATA];} COMM_TRM_DATA;

/**

* @brief  Data object for received communication frame.* @note  Prevent race condition that accessed by both ISR and process.*/static COMM_TRM_DATA    s_stComm2TrmData;

/**  * @brief  Put a data that received by UART into buffer.  * @note  Prevent race condition this called by ISR.   * @param  uint8_t byData: the data received by UART.  * @retval  None  */void comm2trm_RxUartData(uint8_t byData){    /* Update status according to the received data */    switch (s_stComm2TrmData.eRxStatus)    {        case STATUS_IDLE:            if (COMM_TRM_HEAD == byData) /* Is Head */            {                s_stComm2TrmData.eRxStatus = STATUS_HEAD;            }            else            {                goto rx_exception;            }            break;        case STATUS_HEAD:            if (TYPE_INVALID_MIN < byData && byData < TYPE_INVALID_MAX) /* Valid type */            {                s_stComm2TrmData.eRxStatus = STATUS_TYPE;            }            else            {                goto rx_exception;            }            break;        case STATUS_TYPE:            if (byData <= MAX_LEN_UART_FRAME_DATA) /* Valid data size */            {                s_stComm2TrmData.eRxStatus = STATUS_DATA;                s_stComm2TrmData.byDataLen = byData;            }            else            {                goto rx_exception;            }            break;        case STATUS_DATA:            if (s_stComm2TrmData.byCnt < s_stComm2TrmData.byDataLen)            {                ++s_stComm2TrmData.byCnt;            }            else            {                s_stComm2TrmData.eRxStatus = STATUS_TAIL;            }            break;        case STATUS_TAIL:            if (COMM_TRM_TAIL == byData)            {                /* We received a frame of data, now tell process to deal with it! */                process_poll(&Comm2TrmProcess);            }            else            {                goto rx_exception;            }            break;        default:            ASSERT(!"Error: Bad status of comm2trm_RxUartData().
");            break;    }

    /* Save the received data */    s_stComm2TrmData.a_byRxBuf[s_stComm2TrmData.byFrameLen++] = byData;    return;

rx_exception:    ClearCommFrame();    return;}

原文:

https://blog.csdn.net/jiangjunjie_2005/article/details/50619884

原文標題:如何設計單片機的通信協議?

文章出處:【微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

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

    關注

    6035

    文章

    44554

    瀏覽量

    634651
  • 通信協議
    +關注

    關注

    28

    文章

    879

    瀏覽量

    40297
收藏 人收藏

    評論

    相關推薦

    AUTOSAR通信協議解析 如何實現AUTOSAR通信

    通信協議棧是一個復雜的系統,它涵蓋了多種通信方式和模塊,以實現車內ECU之間的高效、可靠的數據交換。以下是對AUTOSAR通信協議的解析及實現AUTOSAR通信的方法: 一、AUTOS
    的頭像 發表于 12-17 14:54 ?335次閱讀

    上位通信協議詳解 嵌入式上位機設計流程

    上位通信協議詳解 上位通信協議是指上位(通常是指具有強大計算能力和數據處理能力的計算機系統)與下位
    的頭像 發表于 12-04 10:21 ?467次閱讀

    串口通信協議解析 串口通信應用實例

    串口通信協議解析 串口通信協議是指規定了數據包的內容,內容包含了起始位、主體數據、校驗位及停止位,雙方需要約定一致的數據包格式才能正常收發數據的有關規范。以下是串口通信協議的介紹: 基本概念
    的頭像 發表于 11-21 17:03 ?488次閱讀

    PLC控制系統的通信協議解析

    在現代工業自動化中,PLC控制系統扮演著至關重要的角色。它們不僅需要處理復雜的邏輯控制任務,還需要與其他系統和設備進行通信。為了實現這一目標,PLC系統必須遵循一系列的通信協議。 PLC通信協議
    的頭像 發表于 11-08 09:46 ?601次閱讀

    PROFINET通信協議是什么

    PROFINET通信協議是一種專為工業自動化領域設計的基于以太網的實時通信協議。以下是對PROFINET通信協議的詳細解析,包括其定義、特點、體系結構、工作原理、通信方式、應用領域以及
    的頭像 發表于 09-25 18:13 ?1492次閱讀

    #單片機 #人工智能 #pcb設計 #通信協議

    通信協議
    深圳市北天通訊有限公司
    發布于 :2024年09月03日 09:27:07

    簡單認識UART通信協議

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發傳輸器)通信協議是一種常見的串行通信協議,廣泛應用于計算機、嵌入式系統、傳感器、無線通信
    的頭像 發表于 07-25 18:07 ?1417次閱讀

    說明白了,Modbus RTU通信協議解析-成都電路板單片機開發

    Modbus協議在工業控制、電氣、電子領域是個很常見的一種通信協議,很多遇見的傳感器、控制器、變頻器、驅動器之類的基本都支持協議,常見到什么程度呢,就是你看到的一個設備如果支持串口
    發表于 06-30 22:28

    上位與下位通信協議的優化策略

    在現代工業自動化系統中,上位與下位之間的通信是不可或缺的環節。上位通常指負責監控、管理和控制功能的計算機或設備,而下位則負責執行具體
    的頭像 發表于 06-28 16:36 ?913次閱讀

    can的通信協議主要由什么完成

    CAN(Controller Area Network)是一種基于消息的通信協議,主要用于汽車和工業領域。它是一種局域網技術,允許多個設備在同一網絡上進行通信。CAN協議的主要特點包括高可靠性、實時
    的頭像 發表于 06-16 10:29 ?593次閱讀

    RS485通信協議的特性和應用范圍

    隨著工業自動化和物聯網技術的飛速發展,數據通信協議的重要性日益凸顯。RS485通信協議作為一種廣泛應用于工業自動化領域的串行通信協議,其穩定性和可靠性得到了廣泛的認可。本文將對RS485通信協
    的頭像 發表于 05-23 16:27 ?1694次閱讀

    UART串口通信協議是什么?

    UART (Universal Asynchronous Receiver/Transmitter) 是一種通信接口協議,用于實現串口通信。它是一種簡單的、可靠的、廣泛應用的串口通信協議
    的頭像 發表于 03-19 17:26 ?1367次閱讀

    TLT507-MQTT通信協議案例

    TLT507-MQTT通信協議案例
    的頭像 發表于 01-26 10:06 ?811次閱讀
    TLT507-MQTT<b class='flag-5'>通信協議</b>案例

    RK3568-MQTT通信協議案例

    RK3568-MQTT通信協議案例
    的頭像 發表于 01-19 15:31 ?1797次閱讀
    RK3568-MQTT<b class='flag-5'>通信協議</b>案例

    工業控制通信協議的報文幀分別是什么樣的?

    通信協議的設備上,有什么調試測試軟件推薦,盡量不要借助硬件設備,直接使用上位和支持協議的設備相連接,直接發送幀讀寫參數?最常見的協議就是
    發表于 01-19 14:46
    主站蜘蛛池模板: 98久久无码一区人妻A片蜜| 欧美又粗又大AAAA片| 日本高清免费观看| 91精品一区二区三区在线观看| 国产精品成人影院在线观看| 欧美午夜a级精美理论片| 中国人泡妞xxxxxxxx19| 国外色幼网| 小草高清视频免费直播| 处xxxx.88| 日本精品久久久久中文字幕 1| 97色伦久久视频在观看| 毛片网站视频| 中文字幕亚洲第一| 激情丛林电影完整在线| 亚洲免费在线观看| 黑人娇小BBW| 野花视频在线观看免费| 护士们的母狗| 亚洲综合小说久久另类区| 国内高清在线观看视频| 亚洲日本欧美产综合在线| 京香在线播放| 岳的奶大又白又胖| 老师我好爽再深一点老师好涨| 538在线视频一区二区视视频| 久久视热频这里只精品| 97在线视频免费| 亲伦在线观看| 国产午夜精品理论片久久影视| 学生精品国产在线视频| 花蝴蝶在线高清视频观看免费播放| 亚洲免费视频在线| 伦理片 qvod| 纯肉巨黄H爆粗口男男分卷阅读| 三级黄色在线看| 国产毛片A级久久久不卡精品| 亚洲一区精品伊人久久伊人| 久久中文字幕综合不卡一二区| 97超在线视频| 色窝窝亚洲AV在线观看|