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

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嵌入式開發】歡迎添加關注!文章轉載請注明出處。

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

    關注

    6039

    文章

    44588

    瀏覽量

    636762
  • 通信協議
    +關注

    關注

    28

    文章

    899

    瀏覽量

    40348
收藏 人收藏

    評論

    相關推薦

    總線通信協議解析及應用

    在現代計算機系統中,總線通信協議扮演著至關重要的角色。它們定義了數據如何在處理器、內存、輸入/輸出設備等組件之間傳輸。 總線通信協議的基本概念 總線通信協議是一組規則,它規定了數據在系統總線上的傳輸
    的頭像 發表于 12-31 10:07 ?135次閱讀

    常見串口通信協議 如何設置串口參數

    串口通信是一種常見的通信方式,廣泛應用于計算機、嵌入式系統和各種電子設備之間。串口通信協議主要是指在串行通信中,數據傳輸的格式和規則。 常見串口通信
    的頭像 發表于 12-27 09:51 ?460次閱讀

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

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

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

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

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

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

    PROFINET通信協議是什么

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

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

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

    簡單認識UART通信協議

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

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

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

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

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

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

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

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

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

    UART串口通信協議是什么?

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

    RK3568-MQTT通信協議案例

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

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

    通信協議的設備上,有什么調試測試軟件推薦,盡量不要借助硬件設備,直接使用上位和支持協議的設備相連接,直接發送幀讀寫參數?最常見的協議就是
    發表于 01-19 14:46
    主站蜘蛛池模板: 日本三级网站在线线观看| 色婷婷在线观看视频| 麻豆色哟哟网站| 欧美色欧美亚洲高清在线视频| 你懂的在线观看视频| 久久99色| xx视频在线| 手机在线你懂的| www天堂在线观看| 夜夜爽天天爽| 国产精品成人va在线观看入口 | 午夜短视频| 国产成人精品高清在线| 欧美一区二区三区免费高| 亚洲成a人片在线观看中| 精品国产免费观看一区高清| 国产精品久久久香蕉| 日本一区二区三区欧美在线观看| 欧美成人性色区| 综合五月激情| 亚洲精品老司机综合影院| 5566在线观看| 成人啪啪免费视频| 黄网站视频在线观看| 涩五月婷婷| 黄色大片网| 国产色av| 天天搞天天操| 啪啪免费观看| 苍井优一级毛片免费观看| 卡2卡三卡四卡精品公司| 天堂男人网| 国产免费私拍一区二区三区| 国产精品激情综合久久| 天天干天天爱天天射| 欧美成人性色生活片天天看| 天堂在线网站| 欧美在线区| 亚洲第一成人影院| 无遮挡很爽很污很黄很色的网站| 日本www色视频|