上位機-串口通信詳解(以RS232為例))


1、什么是串口通信?
寫這個的時候我在想應該怎么解釋串口通信,因為串口通信很多朋友不了解的原因是涉及到硬件的知識,對於沒有相關專業知識的朋友很難理解串口通信。所以我這里只做部分的解釋,需要了解更多硬件相關信息的朋友可以看這篇博文: 詳解 | 還不懂串口通信?看這篇! - 專注it - 博客園 (cnblogs.com)
串口通信在百度詞條上的解釋是:
串口通信(Serial Communications)的概念非常簡單,串口按位(bit)發送和接收 字節通信方式
簡單的解釋就是:兩個人說話,一個人說,一個人聽。
是的,就是這個么簡單。如果不需要了解硬件,那么我們只需要了解通信,串口不需要理解,那是硬件工程師需要考慮的事情。我們今天講的是上位機與串口通信,重點是通信。
2、串口通信協議
所謂通信協議是指通信雙方的一種約定。約定包括對數據格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字符定義等問題做出統一規定,通信雙方必須共同遵守。
串口通信協議中,很多朋友很疑惑,RS232,RS485這些協議怎么用?
但實際上這些准確來說,是一種標准。我們可以直接使用這種標准進行通信,完全沒有任何問題。
還有一種自定義通信協議,顧名思義,自定義通信協議是基於需求編寫的,符合RS232等標准的協議。
這部分對於上位機來說,我們只需要得到第三方提供的自定義通信協議,根據其中的內容進行編程即可,具體的功能實現是由硬件工程師實現。
在通信協議中,最重要的是端口(com)、波特率、數據位、校驗位、停止位。
3、實現一個demo
通過上面的了解,上位機工程師應該有一個概念,上位機與串口的通信重點是通信,常用的通信可以直接使用標准的完成,但是如果是屬於自定義通信協議的,需要提供自定義的通信協議。
1)首先我們實現一個界面,如下:

 

 

 
2)配置串口參數-打開串口

 

 

3)發送數據

 

 

4)接收數據
1、使用異步接收數據

 

 

2、如果需要寫完之后直接讀,參考以下方法:

 

 

5)效果圖:

 

 

6)基於自定義協議的通信(發送和接收都使用16進制進行)
首先自定義一個通信協議:
1、使用RS232進行通信,設定如下:
波特率:9600
數據位:8
停止位:1
奇偶校驗:無
2、通信協議內容:
1) 寄存器1 置1 執行 功能1 地址 0b
2) 寄存器2 置1 執行 功能2 地址 1b
3)crc校驗: 將數據+地址等通過與或等操作生成的一個值(一般自定義的都會進行校驗)
4)開始位:01
5)結束位: 05
6)地址位:0a(根據不同寄存器決定)
7)結果位:0e ( 成功0e,失敗00)
發送例子:執行功能1
01 0b 01 00 00 00 00 00 00 00 06 0e 05
解析:
01是開始位,0b是對應寄存器1的地址,數據長度是8,沒有數據的置00,
06是crc校驗生成值,0e是結果位,05 是結束位。
返回成功
01 0b 01 00 00 00 00 00 00 00 06 0e 05
返回失敗
01 0b 01 00 00 00 00 00 00 00 07 00 05
 
 
以上是我們自定義的一個最簡單的一個自定義協議,非常簡略的協議。通信流程如下:
1、上位機發送數據
2、下位機接收到數據
3、下位機做crc校驗,如果失敗,那么不做反應。
4、下位機crc校驗成功,執行功能。並反饋結果。
5、上位機接收到數據,做crc校驗,如果成功,認為數據正確。否則認為數據錯誤,執行失敗。
6、完成通信
實現:
1、模擬寄存器處理上位機發送的指令:

 

 

2、指令正確返回(與協議中對應)

 

 

3、指令錯誤返回(與協議中對應)

 

 

 
以上便是上位機與串口通信的全面解析,如果有錯誤請各位幫忙指正!
demo的代碼已經上傳gitee,需要自取 : https://gitee.com/one996/studydome.git
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM