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