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