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

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

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

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

單片機(jī)的通信協(xié)議該如何設(shè)計(jì)

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2022-07-05 17:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通信設(shè)計(jì)中考慮協(xié)議的靈活性,經(jīng)常把協(xié)議設(shè)計(jì)成“不定長度”。

一個(gè)實(shí)例如下圖:銳米LoRa終端的通信協(xié)議幀。

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

如果一個(gè)系統(tǒng)接收上述“不定長度”的協(xié)議幀,將會(huì)有一個(gè)挑戰(zhàn)--如何高效接收與解析。

為簡化系統(tǒng)設(shè)計(jì),我們強(qiáng)烈建議您采用“狀態(tài)機(jī)”來解析UART數(shù)據(jù)幀,并且把解析工作放在ISR(中斷服務(wù)程序)完成,僅當(dāng)接收到最后一個(gè)字節(jié)(0x0D)時(shí),再將整個(gè)數(shù)據(jù)幀提交給進(jìn)程處理。

該解析狀態(tài)機(jī)的原理如下圖所示:

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

那么ISR處理這個(gè)狀態(tài)機(jī)來得及嗎?答案是:so easy!因?yàn)樗挥?個(gè)動(dòng)作,運(yùn)算量十分小:

比較接收數(shù)據(jù) -> 更新狀態(tài)變量 -> 存儲(chǔ)接收數(shù)據(jù),C語言僅3條語句,翻譯成機(jī)器指令也不超過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

原文標(biāo)題:如何設(shè)計(jì)單片機(jī)的通信協(xié)議?

文章出處:【微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    6067

    文章

    44962

    瀏覽量

    648975
  • 通信協(xié)議
    +關(guān)注

    關(guān)注

    28

    文章

    1023

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Modbus 轉(zhuǎn) Profinet:工業(yè)通信協(xié)議的橋梁

    1. 引言 在工業(yè)自動(dòng)化領(lǐng)域,Modbus 和 Profinet 是兩種廣泛使用的通信協(xié)議。Modbus 是一種串行通信協(xié)議,常用于連接工業(yè)電子設(shè)備,而 Profinet 是一種基于以太網(wǎng)的工業(yè)
    的頭像 發(fā)表于 02-24 11:11 ?319次閱讀
    Modbus 轉(zhuǎn) Profinet:工業(yè)<b class='flag-5'>通信協(xié)議</b>的橋梁

    PCM4201與DSP之間的通信協(xié)議是什么?

    關(guān)于PCM4201 與 DSP 之間的通信協(xié)議
    發(fā)表于 02-08 08:17

    Dali通信的工作原理 如何使用Dali通信協(xié)議

    一、引言 Dali(Digital Addressable Lighting Interface,數(shù)字可尋址照明接口)是一種用于照明控制產(chǎn)品之間雙向通信協(xié)議。通過Dali通信協(xié)議,可以實(shí)現(xiàn)對(duì)照
    的頭像 發(fā)表于 01-31 10:33 ?1850次閱讀

    詳解REST API通信協(xié)議

    的一環(huán)。 為了實(shí)現(xiàn)這一目標(biāo),我們采用了多種通信協(xié)議,包括MQTT、OPC UA、AMQP和REST API,它們共同構(gòu)成了智能通信的堅(jiān)實(shí)基礎(chǔ)。本期內(nèi)容,讓我們聚焦REST API通信協(xié)議,探索它如何在IIoT領(lǐng)域中發(fā)揮關(guān)鍵作用。
    的頭像 發(fā)表于 01-17 12:40 ?945次閱讀
    詳解REST API<b class='flag-5'>通信協(xié)議</b>

    總線通信協(xié)議解析及應(yīng)用

    在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,總線通信協(xié)議扮演著至關(guān)重要的角色。它們定義了數(shù)據(jù)如何在處理器、內(nèi)存、輸入/輸出設(shè)備等組件之間傳輸。 總線通信協(xié)議的基本概念 總線通信協(xié)議是一組規(guī)則,它規(guī)定了數(shù)據(jù)在系統(tǒng)總線上的傳輸
    的頭像 發(fā)表于 12-31 10:07 ?986次閱讀

    常見串口通信協(xié)議 如何設(shè)置串口參數(shù)

    串口通信是一種常見的通信方式,廣泛應(yīng)用于計(jì)算機(jī)、嵌入式系統(tǒng)和各種電子設(shè)備之間。串口通信協(xié)議主要是指在串行通信中,數(shù)據(jù)傳輸?shù)母袷胶鸵?guī)則。 常見串口通信
    的頭像 發(fā)表于 12-27 09:51 ?3247次閱讀

    AUTOSAR通信協(xié)議解析 如何實(shí)現(xiàn)AUTOSAR通信

    通信協(xié)議棧是一個(gè)復(fù)雜的系統(tǒng),它涵蓋了多種通信方式和模塊,以實(shí)現(xiàn)車內(nèi)ECU之間的高效、可靠的數(shù)據(jù)交換。以下是對(duì)AUTOSAR通信協(xié)議的解析及實(shí)現(xiàn)AUTOSAR通信的方法: 一、AUTOS
    的頭像 發(fā)表于 12-17 14:54 ?2671次閱讀

    上位機(jī)通信協(xié)議詳解 嵌入式上位機(jī)設(shè)計(jì)流程

    上位機(jī)通信協(xié)議詳解 上位機(jī)通信協(xié)議是指上位機(jī)(通常是指具有強(qiáng)大計(jì)算能力和數(shù)據(jù)處理能力的計(jì)算機(jī)系統(tǒng))與下位
    的頭像 發(fā)表于 12-04 10:21 ?2859次閱讀

    串口通信協(xié)議解析 串口通信應(yīng)用實(shí)例

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

    PLC控制系統(tǒng)的通信協(xié)議解析

    在現(xiàn)代工業(yè)自動(dòng)化中,PLC控制系統(tǒng)扮演著至關(guān)重要的角色。它們不僅需要處理復(fù)雜的邏輯控制任務(wù),還需要與其他系統(tǒng)和設(shè)備進(jìn)行通信。為了實(shí)現(xiàn)這一目標(biāo),PLC系統(tǒng)必須遵循一系列的通信協(xié)議。 PLC通信協(xié)議
    的頭像 發(fā)表于 11-08 09:46 ?2524次閱讀

    如何實(shí)現(xiàn)51單片機(jī)與PC機(jī)的串行通信

    51單片機(jī)與PC機(jī)的串行通信是一種常見的通信方式,它允許單片機(jī)通過串行接口與PC機(jī)進(jìn)行數(shù)據(jù)交換。
    的頭像 發(fā)表于 10-21 11:35 ?2587次閱讀

    PROFINET通信協(xié)議是什么

    PROFINET通信協(xié)議是一種專為工業(yè)自動(dòng)化領(lǐng)域設(shè)計(jì)的基于以太網(wǎng)的實(shí)時(shí)通信協(xié)議。以下是對(duì)PROFINET通信協(xié)議的詳細(xì)解析,包括其定義、特點(diǎn)、體系結(jié)構(gòu)、工作原理、通信方式、應(yīng)用領(lǐng)域以及
    的頭像 發(fā)表于 09-25 18:13 ?4873次閱讀

    dht11采用什么通信協(xié)議

    DHT11是一款廣泛使用的溫濕度傳感器,它通過簡單的數(shù)字接口與微控制器或其他數(shù)字設(shè)備進(jìn)行通信。DHT11使用單總線通信協(xié)議,這意味著所有的數(shù)據(jù)傳輸都通過單一的數(shù)據(jù)線完成。這種通信方式簡單且成本低
    的頭像 發(fā)表于 09-04 09:06 ?5454次閱讀

    #單片機(jī) #人工智能 #pcb設(shè)計(jì) #通信協(xié)議

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

    簡單認(rèn)識(shí)UART通信協(xié)議

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)傳輸器)通信協(xié)議是一種常見的串行通信協(xié)議,廣泛應(yīng)用于計(jì)算機(jī)、嵌入式系統(tǒng)、傳感器、無線通信
    的頭像 發(fā)表于 07-25 18:07 ?2077次閱讀
    主站蜘蛛池模板: 超h 高h 污肉男男 | 久草cm| 国产在线精品一区二区夜色 | 高清人人天天夜夜曰狠狠狠狠 | 久月婷婷 | 国产精品久久自在自2021 | 五月综合激情网 | 特黄特级高清免费视频毛片 | 在线免费看一级片 | 天天插视频 | 男人的天堂在线精品视频 | 加勒比一到三区 | 精品国产第一国产综合精品gif | 国模私拍一区二区三区 | 九色国产在线 | 色妞网站| 天堂网传媒 | 国产无套视频在线观看香蕉 | 奇米影视一区 | 有码日韩| 福利片免费一区二区三区 | 521色香蕉网在线观看免费 | 色多多黄| 日本美女黄色一级片 | 亚洲欧美日韩国产一区二区三区精品 | 免费人成在线观看视频色 | 亚洲精品第一 | 日本三级香港三级三级人!妇久 | 黄色视屏免费在线观看 | 91学院派女神 | 人人添人人澡人人澡人人人爽 | 欧美资源在线 | 国产小视频在线免费观看 | 亚洲欧美精品成人久久91 | 久草五月| 天堂网2014 | 天堂网久久 | 色网站免费看 | 午夜影院性 | 久久久久国产精品免费看 | 久久精品国产大片免费观看 |