免费国产网站_秋霞午夜一区二区三区视频_99热在线看_日韩精品久久一区二区_午夜看一级毛片_天天鲁在视频在线观看

  • 您的位置:首頁 > 新聞動態 > 技術文章

    串口協議以及串口二進制整數據包解析

    2018/1/11??????點擊:

    以串口作為傳輸媒介,介紹下怎樣來發送接收一個完整的數據包。過程涉及到封包與解包。設計一個良好的包傳輸機制很有利于數據傳輸的穩定性以及正確性。串口只是一種傳輸媒介,這種包機制同時也可以用于SPI,I2C的總線下的數據傳輸。在單片機通信系統(多機通信以及PC與單片機通信)中,是很常見的問題。

    一、根據幀頭幀尾或者幀長檢測一個數據幀

    1、幀頭+數據+校驗+幀尾

    這是一個典型的方案,但是對幀頭與幀尾在設計的時候都要注意,也就是說幀頭、幀尾不能在所傳輸的數據域中出現,一旦出現可能就被誤判。如果用中斷來接收的話,程序基本可以這么實現:

    unsigned char recstatu;//表示是否處于一個正在接收數據包的狀態

    unsigned char ccnt;      //計數

    unsigned char packerflag;//是否接收到一個完整的數據包標志

    unsigned char rxbuf[100];//接收數據的緩沖區

    void UartHandler()

    {

    unsigned char tmpch;

    tmpch = UARTRBR;

    if(tmpch 是包頭)                          //檢測是否是包頭

    {  

    recstatu = 1;

    ccnt   = 0 ;

    packerflag = 0;

    return ;

    }

    if(tmpch是包尾)                          //檢測是否是包尾

    {

    recstatu = 0;

    packerflag = 1;                      //用于告知系統已經接收到一個完整的數據包

    return ;

    }

    if(recstatu ==1)                           //是否處于接收數據包狀態

    {

    rxbuf[ccnt++] = tmpch; 

    }

    }

    上面也就是接收一個數據包,但是再次提醒,包頭和包尾不能在數據域中出現,一旦出現將會出現誤判。另外一個。數據的校驗算法是很必要的,在數據傳輸中,由于受到干擾,很難免有時出現數據錯誤,加上校驗碼可在發現數據傳輸錯誤時,可以要求數據的另一方重新發送,或是進行簡單的丟棄處理。校驗算法不一定要很復雜,普通的加和,異或,以及循環冗余都是可以的。我上面的接收程序在接收數據時,已經將包頭和包尾去掉,這些可以根據自己的需求加上,關鍵是要理解原理。

    上述包協議出現了以下的幾種變種:

    1.1 幀頭+數據長度+數據+校驗值

    1.2包長+校驗值

    上面兩種其實都是知道了數據包的長度,然后根據接收字節的長度來判斷一個完整的數據包。例如,定義一個數據包的長度為256字節,那我們就可以一直接收,直到接收到256個字節,就認為是一個數據包。但是,會不會存在問題呢?比如說從機向主機發送數據,發送了一半,掉電,重啟,開機后繼續發送,這很明顯接收到的數據就不對了,所以此時很有必要定義一個超限時間,比如我們可以維護下面這樣的一個結構體。

    struct  uartrd{

    char  rd[ 256];

    unsigned int timeout;

    }

    成員變量rd用來存放接收到的數據字節;成員變量timeout用來維護超時值,這里主要討論這個。這個數值怎么維護呢,可以用一個定時器來維護,以可以放在普通的滴答中斷里面來維護,也可以根據系統運行一條指令的周期,在自己的循環中來維護,給其設置個初值,比如說100,當有第一個數據到來以后,timeout在指定的時間就會減少1,減少到0時,就認為超時,不論是否接收到足夠的數據,都應該拋棄。


    二、根據接收超時來判斷一個數據包

    2.1  數據+校驗

    核心思想是如果在達到一定的時間沒有接受到數據,就認為數據包接收完成。modbus協議里就有通過時間間隔來判斷幀結束的。具體實現是要使用一個定時器,在接收到第一個數據時候,開啟定時器,在接收到一個數據時候,就將定時器清零,讓定時器重新開始計時,如果設定的超時時間到(超時時間長度可以設置為5個正常接收的周期),則認為在這一段時間內沒有接受到新的數據,就認為接收到一個完整的數據包了。

    進行一個簡單的小的總結,上述幾種方法都還是較為常用的,在具體的實現上,可以根據具體的實際情況,設計出具體的通訊協議。數據校驗位,有時候感覺不出來其重要性,但是一定要加上,對數據進行一個相關的驗證還是必要的。現在很在MCU都帶有FIFO,DMA等功能,所以有時候利用上這些特性,可以設計出更好的通訊方式。有的人問在接受串口數據時候是應該中斷一次接收一個,還是進入中斷后接收一段數據呢,我認為應該中斷接收一個,因為CPU是很快的,至少對于串口是這樣,在接受每個數據的間隔期間,處理器還是可以做些其他工作的。在多線程中,那就可以直接建立一個數據接收線程。

    主站蜘蛛池模板: 免费观看视频91_久久91热_www.麻豆传媒_国产剧情资源在线视频_午夜毛片网_成全高清免费观看MV动漫 | 欧美性妇bbb洗澡_日韩精品中文字幕在线视频_午夜视频大全_亚洲色精品aⅴ一区区三区_在线精品国产_国产第一页无线好源 | 安眠药扒开女同学双腿玩弄_久久久久人妻精品一区三寸_亚洲老逼_欧美精品日本_成人av天堂_色综合免费 | 国产成人在线视频观看_亚洲成av人影院在线观看_sm另类首页制服av_www.爱久久_日韩精品无码专区免费视频_japanese成熟丰满熟妇 | 久热精品免费_日韩av福利_欧美午夜片欧美片在线观看_天天操夜夜操夜夜操_无码中文字幕人妻在线一区_一区二区三区免费看 | 国产中文_亚洲欧美日韩一区二区三区在线观看_久久咪咪_稀缺小u女呦精品呦_蜜臀av在线观看_综合色啪 | 国产亚洲免费观看_国产一极片_国产孕妇视频在线播放_国产美女在线一区_操操操人人人_久久综合九色综合欧美98 | 成人av一区二区兰花在线播放_爆乳无码一区二区在线观看_911成人影院_毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片_欧美丰满一区二区免费视频_嫩草影院欧美 | 国产精品日韩欧美亚洲另类_波多野42部无码喷潮在线_艳妇荡女欲乱双飞两中年熟妇_精品视频入口_久久国产精品美女_亚洲全部无码中文字幕 wwwav在线播放_久久久久9999亚洲精品_久久大屁股少妇_乱中年女人伦AV二区_亚洲精品aaaaa_亚洲成人在线免费观看 | youjizz国产在线观看_中国第一毛片_一级全黄毛片_99久久精品国产自在首页_国产精品外围_色在线免费 | 久久免费精品日本久久中文字幕_亲子乱AV一区二区三区_国产精品JIZZ在线观看无码_国产成人精品日本亚洲77美色_神马午夜不卡片_蜜臀ab | 午夜色大片在线观看免费_日韩毛片免费_一二三区精品视频_狠狠色噜噜狠狠狠狠色综合网_久久午夜夜伦鲁鲁片免费无码影视_国产精品女主播在线观看 | 欧美又粗又猛又爽的免费网站_九九影视香蕉_人人爱国产_婷婷狠狠干_cosplay福利禁视频免费观看_亚洲av天海翼一级毛片 | 美女张开腿让人桶_av亚洲在线观看_无码AV大香线蕉_制服丝袜快播_久久er99热精品一区二区_久久99免费观看 | 热久久国产精品_国产成a_www.日韩.com_一级黄色大片_精品一区久久久久久_噜噜噜老湿私人影院 | 国内外成人免费视频_久久免费大视频_夜夜女人国产香蕉久久精品_国产东北露脸熟妇_a级片久久_成人免费视频91 | 欧美黑人添添高潮A片视频_国产亚洲精AA在线观看SEE_免费观看丰满少妇做爰视频_亚洲免费在线观看_日韩欧美综合_爱爱激情免费视频 | 久久午夜精品福利一区二区_日本高清免费aaaaa大片视频_韩日毛片_国产精品99久久久久久猫咪_久久本道综合久久伊人_天天做夜夜操 | 四虎影院免费观看_欧洲在线视频_精品伊人久久97_一二区精品_久久午夜精品视频_视频国产区 | 国产亚洲免费观看_国产一极片_国产孕妇视频在线播放_国产美女在线一区_操操操人人人_久久综合九色综合欧美98 | 大地资源高清播放在线观看视频_亚洲乱码一区二区_青青草成人av_国产成人综合亚洲网站_亚洲AV色香蕉一区二区蜜桃小说_亚洲一区国产视频 | 草免费视频_国产欧美日韩免费一区二区_国产黄色观看_久久国产精品久久_人人草人人干_久久免费视频一区二区三区 | 天堂资源中文最新版在线一区_国产极品美女高潮无套_国产馆av大片免费_亚洲精品久久久久久久观小说_国产激情视频图片qvod_美女黄页网站免费进入 | 亚洲伊人中文字幕_侵犯女教师一区二区三区_性欧美欧美巨大免费_亚洲中午字幕_国产精品久久久久久久久久软件_久久视频这里只精品10 | 国产欧美日韩一级二级三级_日本高清视频www在线观看_日韩少妇内射免费播放_亚洲AV无码不卡一区二区三区_免费成人小视频_波多野结衣亚洲AV无码无在线观看 | 99久久精品免费看国产一区二区_久草aⅴ_A级无遮挡超级高清-在线观看_性xxxxBBBB_欧美日韩综合精品一区二区_四虎剧场 | 18禁裸体女免费观看_六月婷婷综合激情_亚洲AV中文无码乱人伦_给我免费播放片在线中国_一级片啪啪_欧美成人片在线 | 久久人人97超碰超碰窝窝_99久久99久久精品免费_在线播放91_97色吧_国产成人精品综合网站_精品人妻少妇一区二区 | av免费亚洲_欧美精品一区二区久久_国产欧美精品一区二区_中文字幕免费精品一区_亚洲久久久久_国产精品久久久久久久精 | 老司机午夜福利视频_成人在线观看午夜_一区二区三区四区_www.麻豆.com_黄色三级av_韩国日本久久 | 精品中文字幕视频_亚洲精品在线一区二区_人人添人人妻人人爽夜欢视AV_秋霞在线观看片无码免费_久草在线高清_91亚洲人成网污www | 国产毛A片啊久久久久久按摩_默杀在线观看_久久精品伊人_国产偷V国产偷∨精品视频_国产综合在线看_97免费国产 | 亚洲在线影院_亚洲国产日韩一区_日韩a视频_亚洲成人网在线观看_一级a毛片_久久久亚洲精品成人 | 内射人妻骚骚骚_中文字幕第86亚洲另类_日韩字幕_日本丰满少妇与黑人_本网站久久精品_亚洲AV女人18毛片水真多 | 伦一理一级一a一片_av亚洲av影院av天堂_日本三级在线观看网站_国产AV国片偷人妻麻豆郑州公司_亚洲免费二区三区_免费看片一区二区三区 | 最新网址你懂得_精精久久_综合se站_日本中文字幕高清视频_国产69精品久久久_中国一级a毛一级a看免费视频 | 噜噜综合亚洲AV中文无码_无遮挡免费看_日本成熟少妇高潮A片_国产真实夫妇视频_人妻中文字幕无码专区_少妇愉情理伦片丰满丰满午夜 | 免费观看麻豆_国产在线精品成人一区二区三区_婷婷五月综合人人网_成人毛片无码一区二区三区_91原创精品_青青草免费网站 | 全程露脸3p在线观看91_亚洲精品国产成人片在线观看_中文字幕一区二_国模大尺度福利视频在线_精品国偷自产在线_xxxxhd69日本hd | 一级毛片在线视频_18成禁人10000视频免费_久草在线亚洲_国产永久网站_蓝男色蓝摄gay裸男china_日本黄色精品 | JIZZJIZZ国产_国产第一页福利_国产成人免费无码_clubnaked艳裸舞视频_北岛玲日韩精品一区二区三区_超碰97久久 |