今天我們一起學(xué)習(xí)一下單片機(jī)通信:
(第一次寫(xiě)分享,不足的地方希望大家多多指出。后面我會(huì)多加提升)
串行/并行通信
串行通信:只有一條通訊線(xiàn),每次只能發(fā)送一個(gè)數(shù)據(jù)。
并行通信:多條通訊線(xiàn),每次可以發(fā)送多個(gè)數(shù)據(jù)。
并行通信傳輸?shù)乃俣炔灰欢ū却型ㄐ趴欤驗(yàn)楫?dāng)傳輸速度達(dá)到很高時(shí),并行通信相互之間會(huì)存在干擾。
通信傳輸分為三種:全雙工傳輸-半雙工傳輸-單工傳輸
全雙工傳輸 | 雙方可以同時(shí)發(fā)送數(shù)據(jù)或者同時(shí)接收數(shù)據(jù) |
半雙工傳輸 | 一方發(fā)送數(shù)據(jù)的時(shí)候,另一方只能接收 |
單工傳輸 | 只存在一個(gè)方向數(shù)據(jù)的發(fā)送,不存在對(duì)方接收數(shù)據(jù)或者發(fā)送數(shù)據(jù)給對(duì)方 |
如圖1:
同步/異步通信
異步通信:雙方要規(guī)定相同的傳輸速度才可以進(jìn)行傳輸,通信雙方約定某一個(gè)條件。
一旦雙方傳輸速度不相同,傳輸?shù)臄?shù)據(jù)就會(huì)出現(xiàn)亂碼。就像我們使用串口打印數(shù)據(jù),代碼配置的是115200,串口工具選擇的是9600,此時(shí)看到打印的數(shù)據(jù)就會(huì)變成亂碼。
同步通信:通信的雙方需要連接一個(gè)時(shí)鐘線(xiàn)CLK,這樣傳輸?shù)臄?shù)據(jù)雙方保持一致。例如,當(dāng)一方認(rèn)為2ms接收一個(gè)數(shù)據(jù),另一方1ms接收一個(gè)數(shù)據(jù),這樣就會(huì)造成傳輸數(shù)據(jù)錯(cuò)亂問(wèn)題。CLK就是給雙方約定好,一個(gè)時(shí)鐘會(huì)有一個(gè)數(shù)據(jù)的發(fā)送或者接收。
如何判斷異步通信和同步通信:可以根據(jù)是否有時(shí)鐘信號(hào)線(xiàn)CLK來(lái)判斷。
典型的異步通信:SPI,UART
典型的串口通信:IIC
接下來(lái)我們進(jìn)入串口通信:
1、串口電平
平常我們使用杜邦線(xiàn)去連接兩個(gè)通信模塊的時(shí)候,傳輸距離較短,可以用TTL電平。當(dāng)兩個(gè)通信模塊距離很遠(yuǎn),幾十米以上的時(shí)候,全程使用TTL電平干擾會(huì)很大,信號(hào)損耗較高。我們此時(shí)就要用到RS232/RS422/RS485電平進(jìn)行轉(zhuǎn)接。
TTL電平:2.4V-5V 等效于邏輯1--高電平
TTL電平:0V-0.4V 等效于邏輯0--低電平
2、串口連接和時(shí)序
傳輸時(shí)序:
①空閑狀態(tài)電平為1,高電平
②電平為0,低電平,標(biāo)志數(shù)據(jù)將要開(kāi)始
③數(shù)據(jù)發(fā)送(數(shù)據(jù)發(fā)送多少可以更改)
④奇偶校驗(yàn)位(校驗(yàn)前面的數(shù)據(jù)發(fā)送是否正確)
⑤停止位,電平置1,高電平
⑥波特率傳輸:波特率越高傳輸速度越快,波特率越低傳輸速度越慢。(波特率的速度是有限的,GPIO的IO口電平的變化速度限制了波特率的傳輸速度)
這就是今天的分享,明天我會(huì)與大家分享使用串口接收和發(fā)送數(shù)據(jù)的代碼編寫(xiě)思路。
感謝各位能給予評(píng)價(jià),我也會(huì)慢慢學(xué)習(xí)如何去寫(xiě)好一篇知識(shí)總結(jié)。