UART串口
通用異步收發器,2個串口(1個串口被用于ISP下載程序,1個串口被用于和主機之間的通信)
全雙工(兩根線TX、RX)、串行、異步
通信方式:
- 單工:
- 發送方和接收方是固定的,數據只能從發送方? 發給? 接收方
- 數據傳輸通過一根信號線實現
- 數據傳輸方向固定
- 半雙工:(I2C)
- 發送方和接收方不是固定的,通信雙方都可發可收
- 數據傳輸通過一根信號線,數據的傳輸方向是雙向的
- 但同一時刻數據傳輸方向是單一的(A給B發的時候,B只能接收)
- 全雙工:(UART)
- 通信雙方既可作為發送方,也可作為接收方
- 數據傳輸通過兩根信號線
- 數據傳輸方向在任意時刻都是雙向的
數據傳輸的順序:
Uart在傳輸數據時,遵循LSB優先原則(低位先行),先發低位數據
數據傳輸的形式:
- 串行:通過一根信號線傳輸數據,按照先后次序逐個bit逐個bit去發送數據
- 并行:通過多根信號線同時去傳輸數據
串行傳輸和并行傳輸的區別:
- 串行:
- 傳輸速率慢(只能通過一根線逐個bit去傳輸)
- 硬件成本低,實現簡單
- 傳輸距離遠,抗干擾性好(RS485差分)
- 并行:
- 傳輸速率快,可以通過多跟線同時傳輸多個Bit
- 硬件成本高,實現復雜
- 傳輸距離近,抗干擾性差(理論上30米內,)
串口通信時序:
- 串口通信時,空閑狀態為高電平
- 當由高電平變為低電平(發送一個低電平信號),代表發送了一個起始位,準備開始通信
- 發送數據(通常是8bit,遵循先發數據低位LSB原則)
- 再發送一個Bit的校驗位,(奇偶校驗)
- 校驗
奇偶校驗(串口):
- 奇 校驗:校驗位 為1,若數據位中,“1” 的個數加上校驗位 “1” 的個數,保持奇數個,代表校驗通過(奇校驗,奇數個1)。
- 偶 校驗:校驗位為0,若數據位中“1”的個數 + 校驗位“0”的個數,保持1的個數位偶數個,代表校驗通過。(偶校驗,偶數個1)
- 缺點:無法檢測 偶數個bit出錯的問題
- 累加和 校驗
- CRC校驗(Modbus協議)
串口通信參數:
波特率:
bps(bit per second),每秒鐘傳輸bit的數量,常見的波特率:2400, 4800 , 9600,115200
數據位:
8, 串口傳輸通常8bit 數據位傳輸
停止位:
1,? 1bit停止位
校驗位:
None,N,無校驗
Even,E,偶校驗
Odd,0,奇校驗
同步通信、異步通信
I2C:SCL?時鐘線
SPI:SCLK?時鐘線
UART:無時鐘線?異步
- 同步:
- 通信的雙方有一根共享的時鐘線來約定通信的頻率(同步發送數據/接收數據)
- 異步:
- 通信雙方沒有時鐘線進行同步,如Uart:可以通過設置波特率來實現同步(發:2400bps 收:2400bps)
串口寄存器配置:
串口的波特率發生器依賴于定時器1(Timer1)
SCON/PCON串口控制寄存器:
- PCON寄存器中的bit6?置0代表通過SCON寄存器中SM0和SM1兩位指定串口工作方式:
- 將SCON寄存器中的bit6和bit7清0
- 將SCON寄存器中的SM1 bit6置1,SM0 bit7清0,代表串口工作8位UART模式
- 將SCON寄存器中REN bit4置1,代表允許串口接收數據
- SCON寄存器中bit1 TI位,代表串口8位數據發送完畢硬件自動置1,但需要軟件清0(用來檢測)
- SCON寄存器bit0 RI位,代表串口8位數據接收完畢硬件自動置1,但需要軟件清0? (用來檢測)
- PCON寄存器SMOD?bit7位置1,代表波特率加倍
定時器寄存器相關配置:
- TMOD?定時器模式選擇寄存器:
- 將TMOD寄存器中的高四位清0(定時器1)
- 將TMOD寄存器中的bit5置1,bit4清0,代表定時器1工作在8位自動重裝載模式
- 將定時器初值寫入到TL1和TH1
- 將TCON寄存器中的bit6置1,代表允許定時器1開始計數
中斷寄存器相關配置:
- IE中斷控制寄存器:
- 將IE寄存器中的bit7?EA位置1,代表CPU能夠響應所有中斷
- 將IE寄存器中的bit4 ES位置1,代表允許串口產生中斷
定義數組時:xdata char buf[32] = {0xAA, 0xBB,0xCC};
存儲在片外RAM中,不加xdata,會存儲在片內RAM中(只有256byte)
主從應答:
主從應答就是通信協議里,主機發起請求,從機必須返回確認(ACK/NACK或數據幀),以保證數據傳輸的可靠性和交互性。
- 主機:擁有對通信絕對控制權,通信都是由主機發起
- 從機:無法直接發起通信,只能根據主機下發的指令完成對應操作
主機 -> 從機:
功能碼 0000 0001
從機 -> 主機:
功能碼:1000 0001? ?也就是81
bit 7最高位:數據流向位
0:主機 -> 從機
1:從機 -> 主機