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

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

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

3天內不再提示

串口通信協議的制定及配置流程

PoisonApple ? 來源:網絡整理 ? 2018-02-01 15:33 ? 次閱讀

串口通信協議

串口通信指串口按位(bit)發送和接收字節。盡管比按字節(byte)的并行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。在串口通信中,常用的協議包括RS-232、RS-422和RS-485。

里以串口作為傳輸媒介,介紹下怎樣來發送接收一個完整的數據包。過程涉及到封包與解包。設計一個良好的包傳輸機制很有利于數據傳輸的穩定性以及正確性。串口只是一種傳輸媒介,這種包機制同時也可以用于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個正常接收的周期),則認為在這一段時間內沒有接受到新的數據,就認為接收到一個完整的數據包了。流程大體如下圖所示:

串口通信協議的制定及配置流程

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

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

    關注

    34

    文章

    1626

    瀏覽量

    55528
  • 串口通信協議

    關注

    2

    文章

    11

    瀏覽量

    10315
收藏 人收藏

    評論

    相關推薦

    【LabVIEW串口通信】串行通信協議的可配置轉換問題

    本帖最后由 fantek 于 2013-12-31 18:26 編輯 目前存在的問題:主機( 計算機,PLC等)通過串口連接兩臺或多臺通信協議不一樣的儀器設備,而這些設備都是自定義協議,適合
    發表于 09-29 02:26

    USART串行通信協議配置流程

    USART串行通信協議STM32 USART串口介紹USART配置流程
    發表于 12-18 06:34

    怎樣使用STM32CubeMX來配置USART串口通信協議

    UART串口通信協議的工作原理是什么?怎樣使用STM32CubeMX來配置USART串口通信協議呢?
    發表于 12-06 06:53

    單線串口通信協議

    單線串口通信協議如下:需要發送的數據幀:
    發表于 12-07 08:16

    串口通信協議的相關資料分享

    目錄一、串口通信協議1、UART簡介2、 UART通信協議(1)起始位(2)數據幀(3)奇偶校驗位(4)停止位(5)下個起始位(6)波特率二、STM32的USART串口
    發表于 02-22 07:16

    高效的串行通信協議制定及實現

    探討了一種基于串行通信的簡單、高效的通信協議制定方法。實驗結果證明,該協議有效提高了串行通信通信
    發表于 12-03 17:22 ?18次下載
    高效的串行<b class='flag-5'>通信協議</b>的<b class='flag-5'>制定</b>及實現

    串口通信協議詳解

    串口是計算機上一種非常通用設備通信協議。大多數計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備通用的
    發表于 11-09 14:51 ?8702次閱讀

    一種高效的串行通信協議制定及實現

    一種高效的串行通信協議制定及實現
    發表于 11-09 18:08 ?56次下載

    基于狀態機的串口通信協議的設計與實現

    設計并實現了一種基于狀態機的串口通信協議,并將此協議應用到稱重儀表的上位機通信中。本文介紹了串口通信協議
    發表于 05-08 15:22 ?169次下載
    基于狀態機的<b class='flag-5'>串口</b><b class='flag-5'>通信協議</b>的設計與實現

    PC與單片機串口通信協議

    PC與單片機串口通信協議
    發表于 12-26 22:12 ?0次下載

    科爾摩根伺服驅動器串口通信協議

    科爾摩根伺服驅動器串口通信協議
    發表于 09-03 09:30 ?24次下載
    科爾摩根伺服驅動器<b class='flag-5'>串口</b><b class='flag-5'>通信協議</b>

    制定通信協議,實現單片機與PC機通信

    單片機與PC機串口通信編程實驗目的利用PROTUES仿真軟件、串口調試助手、虛擬串口,搭建單片機與PC通信仿真平臺,熟悉單片機
    發表于 12-17 18:30 ?22次下載
    <b class='flag-5'>制定</b><b class='flag-5'>通信協議</b>,實現單片機與PC機<b class='flag-5'>通信</b>

    UART串口通信協議是什么?

    ,廣泛應用于嵌入式領域。 在UART串口通信協議中,數據以字節的形式進行傳輸。發送和接收端的通信流程如下: 1、通信波特率設置:發送端和接收
    的頭像 發表于 03-19 17:26 ?1397次閱讀

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

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

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

    串口通信是一種常見的通信方式,廣泛應用于計算機、嵌入式系統和各種電子設備之間。串口通信協議主要是指在串行
    的頭像 發表于 12-27 09:51 ?107次閱讀
    主站蜘蛛池模板: 黄视频网站免费| 性生活黄色毛片| 色在线免费视频| 国产精品www视频免费看| 日本特级黄录像片| 日本一区视频在线观看| 日韩不卡毛片| 午夜精品久久久久久影视riav| 免费免费啪视频在线| 四虎成人影院网址| 亚洲欧美性另类春色| 亚洲黄网免费| 你懂的视频在线看| 乱码精品一区二区三区| 69国产| 狠狠躁夜夜躁人人爽天天天天 | 人人干狠狠操| 男人呻吟双腿大开男男h互攻| 欧美一级视频在线| 欧美日韩色片| 亚洲综合成人在线| www.最色| 69日本xxxhd| 免费毛片大全| 国产未成女年一区二区| 网站在线你懂的| 亚洲天天在线| 国产精品第九页| 国产欧美一区二区三区观看| 人人澡人人澡碰人人看软件| 日韩色网| 女人被两根一起进3p在线观看| 伊人久久成人成综合网222| 凹凸福利视频导航| 色视频免费观看高清完整| 精品国产香港三级| 最近高清免费观看视频| 欧美午夜色大片在线观看免费| 免费人成黄页在线观看1024| 网友偷自拍原创区| 天天操夜夜嗨|