STM32學(xué)習(xí)016_數(shù)據(jù)幀
在作通信工作時(shí),我們常常會(huì)遇到“幀”這個(gè)概念,我迷惑的地方在于,一幀數(shù)據(jù)包含N個(gè)(1+8bit+1+1 起始位+8位數(shù)據(jù)+校驗(yàn)位+停止位),還是(1+N*8bit+1+1),今天仔細(xì)深究了一下,現(xiàn)將收獲說一下,希望對讀者有幫助。
首先要弄清楚一些概念:
“1+8bit+1+1”是串行通訊一個(gè)字節(jié)的格式,屬于串行通信中最小數(shù)據(jù)格式的單位,1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)校驗(yàn)位+1個(gè)停止位(也有1+8+0+1等等),也就是要收發(fā)N個(gè)字節(jié),就會(huì)有N個(gè)(1+8bit+1+1)這樣的組合出現(xiàn)在TXD和RXD線路上,而不是1+nbit+1+1或者1+nx8bit+1+1。以上敘述中,
起始位和停止位:用于同步;
校驗(yàn)位:用來保證通訊的正確性;
8個(gè)數(shù)據(jù)位:設(shè)備需要的真正的數(shù)據(jù);
起始位和停止位都是收發(fā)方適配器自身的硬件完成的,校驗(yàn)位需要根據(jù)程序處理以及判斷以便知道信息是否正確,一般而言,在初始化設(shè)置完成后,寫程序者只要關(guān)注8個(gè)數(shù)據(jù)位和校驗(yàn)位就可以了。
入正題,下面說一下“幀”,
串行通信中,幀一般是需要根據(jù)自己的約定而定的,其內(nèi)容一般由多個(gè)8位單字節(jié)數(shù)據(jù)構(gòu)成的。比如說嗎,一個(gè)主機(jī)要采集外設(shè)的傳感器信號,(采集電流,電壓),這些信息需要10字節(jié),那么你一幀信息至少需要10字節(jié),也就是收發(fā)雙方都需要計(jì)數(shù),計(jì)數(shù)達(dá)到10才說明通訊完成,這是最簡單的。大多數(shù)應(yīng)用中,規(guī)范的做法是,一幀信息包含幀頭標(biāo)識符,幀長度,信息內(nèi)容,以及校驗(yàn)信息。
對于多個(gè)傳感器,應(yīng)給每一個(gè)分配唯一的地址,只有地址相符的傳感器才對主端的信息作出回應(yīng),地址信息可以包含到通訊協(xié)議中,比如:幀頭+幀長度+終端地址+信息內(nèi)容+校驗(yàn)和,如果使用51單片機(jī),可以使用串行通訊方式3。