大家好,我是小小的電子之路,這是我的第7篇原創文章,很高興與大家一起分享~
原文出自微信公眾號【小小的電子之路】
串口是串行接口的簡稱,串行接口是采用串行通信方式的接口。串行通信是一種將需要傳輸的數據由低位到高位一位一位地在一條傳輸線上逐個傳輸的通信方式。
一、串行通信的數據格式
首先來了解一下串行通信的數據格式,如下圖所示,串行通信的一幀數據由起始位、數據位、校驗位以及停止位組成。
起始位:低電平,標志著一幀數據的開始;
數據位:數據內容,可選擇為5、6、7、8位;
校驗位:用于確保傳輸數據的正確性,可分為奇校驗和偶校驗。奇校驗時數據位和校驗位中1的總數應為奇數,同理,偶校驗時數據位和校驗位中1的總數應為偶數;
停止位:高電平,標志著一幀數據的結束。
二、異步串行通信的波特率
串行通信可以分為兩種形式:同步串行通信和異步串行通信。
同步串行通信:通信雙方在同一時鐘控制下同步傳輸數據;
異步串行通信:通信雙方使用各自的時鐘控制數據傳輸。
對于異步串行通信來說,雖然沒有同步時鐘,但是通信雙方必須約定并遵循同樣的設置,這就需要異步串行通信中一個重要的參數來設置,該參數即波特率。
波特率即串口通信的速率,它表示每秒傳輸二進制數據的位數,單位是bps,即位/秒,常用的波特率有9600、19200、38400、57600和115200等。
以115200的波特率為例,即一秒傳輸115200個二進制數據位,那么每一位的持續時間
因此,在通信雙方約定波特率為115200的情況下,只要發送方發送的每位比特位的持續時間為8.68us,那么正常情況下接收方就能準確無誤地解析數據。
三、實驗測試
接下來利用實驗來簡單驗證一下上述分析:波特率為115200,一位停止位,八位數據位,無奇偶校驗位,發送數據為10110101,每組發送間隔100us。
1、仿真測試
仿真測試結果如下圖所示,可以看出,發送的二進制數據依次為0101011011,每個比特位持續時間為8680ns,數據發送間隔為117360-2×8680=100000ns,均符合設計要求。
2、輸出波形測試
下載程序,測試對應引腳的輸出波形,如下圖所示,可以看出與仿真結果基本相符。
3、通信測試
通過上位機的串口調試助手接收發送的數據,通過下圖所示的結果可以看出,接收到的數據為0xB5,對應的二進制數據為0b10110101,與發送端發送數據相符,通信成功。
以上就是本次分享的全部內容,謝謝大家!