文章目錄
- 1. 串行通信與并行通信
- 2. 異步通信與同步通信
- 3. 單工,半雙工和全雙工通信
- 4. 通信速率和接口標準
- 5. USART 結構框圖
- 6. 串口電路
- 6.1 串口之間的連接
- 6.2 串口與 RS232 的轉換和連接
- 6.3 串口與 RS485 的轉換和連接
- 6.4 串口與 USB 的轉換和連接
- 7. USART 字符說明
1. 串行通信與并行通信
- 串行通信是一種數據逐位順序傳輸的通信方式,發送設備把 8 位數據(D0~D7)通過單條線路“順次傳送”,接收設備逐位接收后再還原成完整數據。
- 并行通信是一種多位二進制數據通過多條獨立線路同時傳輸的通信方式,下圖中:發送端先發 “詢問”,接收端回復 “應答”,發送設備與接收設備間有 8 條數據線,8 位數據通過這 8 條線同時發送,接收端在同一時刻采樣所有數據線的電平,直接還原出完整的 8 位數據。
2. 異步通信與同步通信
- 異步通信是一種 “以字符為單位、無需全局時鐘同步” 的串行通信方式,數據按 “字符 / 字節” 獨立封裝傳輸,字符與字符之間的時間間隔完全任意,發送端可隨時發送下一個字符,但每個字符中的各位是以固定的時間傳送的,收發雙方通過“起始位 + 停止位”實現字符級局部同步。
- 字符幀是異步串行通信中傳輸單個字符(或字節)的 “標準化數據包”:
- 空閑狀態:通信線路在無數據傳輸時的默認狀態;
- 起始位:標志一個字符幀的開始,固定為 1 位低電平;
- 數據位:實際傳輸的有效字符數據,位數可靈活配置(5/6/7/8 位常見);
- 校驗位:用于簡單錯誤檢測(奇校驗 / 偶校驗 / 無校驗);
- 停止位:標志一個字符幀的結束,固定為 1 位,1.5 位或 2 位高電平;
- 同步通信是一種 “依賴全局時鐘信號,實現連續數據流同步傳輸” 的通信方式,收發雙方通過 “統一時鐘節奏” 采樣數據。
- 外同步使用獨立時鐘線,發送方同時傳輸 “數據信號”(如01101)和 “時鐘信號”,接收方通過時鐘信號的邊沿(上升 / 下降沿) 采樣數據位。
- 自同步無獨立時鐘線,發送方將 “時鐘信息嵌入數據信號”,接收方通過解碼數據信號的跳變提取時鐘。
3. 單工,半雙工和全雙工通信
- 單工通信是一種 “數據只能沿單一固定方向傳輸,無法反向反饋” 的通信方式。
- 半雙工通信是一種 “數據可雙向傳輸,但同一時刻只能單向進行” 的通信方式。
- 全雙工通信是一種 “通信雙方可同時雙向傳輸數據,發送與接收完全獨立、互不干擾” 的通信方式。
4. 通信速率和接口標準
- 比特率表示每秒傳輸的二進制位數,bps(bits per second,比特 / 秒)。
- 波特率表示每秒傳輸的碼元數量,一個碼元可表示多個二進制位;比特率與波特率的關系由每個碼元攜帶的比特數決定,公式為:比特率=波特率×每個碼元的比特數。
- RS–232C 接口:25針 – DB25,9針 – DB9。
- 9針公頭和母頭
- 9針和25針管腳功能:
- RS–232C 電平標準:邏輯1:-3V ~ -15V(負電壓),邏輯0:+3V ~ +15V(正電壓)。
- 常用通信格式:96-N-8-1。
- 96:波特率9600 bps;
- N:無校驗;
- 8:數據位8位;
- 1:停止位1位;
5. USART 結構框圖
-
功能引腳
- RX:接收數據輸入引腳。
- TX:發送數據輸出引腳。
- 同步模式下需要 SCLK:發送器時鐘輸出。
- 硬件流控制模式下需要 :
- nRTS(Request To Send,低有效):
- 若接收緩沖區有空間,nRTS 輸出低電平(請求發送方 “可以發數據”)。
- 若接收緩沖區已滿,nRTS 輸出高電平(告訴發送方 “暫停發送,避免溢出”)。
- nCTS(Clear To Send,低有效):
- 若外部設備 nRTS 為低電平,USART 的 CTS 檢測到后,啟動發送。
- 若外部設備 nRTS 為高電平,USART 的發送自動掛起,直到 CTS 變低。
- nRTS(Request To Send,低有效):
-
數據寄存器
- 發送流程 CPU → 外部設備:CPU/DMA 寫并行數據 → 存入 TDR 發送數據寄存器 → 轉移到 發送移位寄存器進行并行→串行拆分 → 按幀格式逐位輸出到 TX 引腳,串行信號輸出。
- 接收流程 外部設備 → CPU:RX 引腳輸入串行信號 → 送入 接收移位寄存器進行串行→并行拼接 → 拼接為完整數據存入 RDR 接收數據寄存器 → CPU/DMA 讀并行數據。
-
控制器
- 發送控制:
- CR1 寄存器 → TE:
- 置 1 → 激活發送移位寄存器,允許從 TDR 取數據并串行輸出。
- 置 0 → 關閉發送,TX 引腳回到空閑狀態(高電平)。
- CR1 寄存器 → TE:
- 接收器控制:
- CR1 寄存器 → RE:
- 置 1 → 激活接收移位寄存器,允許從 RX 引腳采樣串行信號。
- 置 0 → 關閉接收,RX 引腳輸入被忽略。
- CR1 寄存器 → RE:
- USART 中斷:
- 發送控制:
-
波特率發生器
- 波特率=fPCLK8×(2?OVER8)×USARTDIV\text{波特率} = \frac{f_{\text{PCLK}}}{8 \times (2 - \text{OVER8}) \times \text{USARTDIV}} 波特率=8×(2?OVER8)×USARTDIVfPCLK??
- fPCLK:系統總線時鐘。
- OVER8=0:采用 16 倍過采樣;OVER8=1:采用 8 倍過采樣。
- USARTDIV=DIV_Mantissa+DIV_Fraction16\text{USARTDIV} = \text{DIV\_Mantissa} + \frac{\text{DIV\_Fraction}}{16} USARTDIV=DIV_Mantissa+16DIV_Fraction?
- 波特率=fPCLK8×(2?OVER8)×USARTDIV\text{波特率} = \frac{f_{\text{PCLK}}}{8 \times (2 - \text{OVER8}) \times \text{USARTDIV}} 波特率=8×(2?OVER8)×USARTDIVfPCLK??
6. 串口電路
6.1 串口之間的連接
- 串口數據收發線交叉連接,并且共GND。
- 帶硬件控制流:
- 無硬件控制流:
6.2 串口與 RS232 的轉換和連接
- SP3232 是一款雙通道 RS-232 電平轉換芯片,核心功能是實現 TTL/CMOS 電平與 RS-232 電平的雙向轉換,解決不同電平標準的設備間通信問題。
- 引腳功能:
- 電源與接地引腳:VCC – 接系統電源;GND – 與系統地共地。
- 電荷泵電容引腳:C1+,C2+ – 外接電容正極;C1-,C2- – 外接電容負極。
- 串口通信引腳:
- RINx – 接 RS-232 的 RX 引腳。
- ROUTx – 接單片機的 UART RX 引腳。
- DINx – 接單片機的 UART TX 引腳。
- DOUTx – 接 RS-232 的 TX 引腳。
6.3 串口與 RS485 的轉換和連接
- SP3485 是一款低功耗半雙工 RS-485 收發器芯片,核心功能是實現 TTL/CMOS 電平與 RS-485 差分電平的雙向轉換。
- 電源與接地引腳:VCC – 接系統電源;GND – 與系統地共地。
- 數據收發與使能控制引腳:
- RO – 接單片機的 UART RX 引腳。
- DI – 接單片機的 UART TX 引腳。
- RE – 通常與 DE 引腳短接。
- DE – 與 RE 短接后,接單片機的 GPIO 引腳(控制收發方向)。
- RS-485 總線差分引腳:
- A 差分正端 – 接 RS-485 總線的 A 線。
- B 差分負端 – 接 RS-485 總線的 B 線。
6.4 串口與 USB 的轉換和連接
- CH340C 是 USB 轉串口芯片,支持 USB 轉 TTL/RS232/RS485 等接口。
- 電源與接地引腳:VCC – 接系統電源;GND – 與系統地共地。
- USB 通信引腳:D+,D- 直接連接 USB 接口的 D +,D - 信號線,無需串聯電阻,芯片內置 USB 上拉電阻。
- 串口通信引腳:TXD 串口數據發送端,連接MCU 的 RXD 引腳,RXD 串口數據接收端,連接MCU 的 TXD 引腳。
- RTS#:請求發送信號,低電平有效;低電平時,三極管導通,BOOT0 被拉到高電平,進入下載模式。
- DTR#:數據終端就緒信號,低電平有效;低電平時,三極管導通,RESET 被拉到低電平,觸發復位。
7. USART 字符說明
- 可通過對 USART_CR1 寄存器中的 M 位進行編程來選擇8位或9位的字長,一般設置為8位。
- TX 引腳在起始位工作期間處于低電平狀態,在停止位工作期間處于高電平狀態。
- 空閑字符可理解為整個幀周期內電平均為“1”(停止位的電平也是“1”),該字符后是下一個數據幀的起始位。
- 停止字符可理解為在一個幀周期內接收到的電平均為“0”。發送器在中斷幀的末尾插入1或2個停止位(邏輯“1”位)以確認起始位。
- 發送和接收由通用波特率發生器驅動,發送器和接收器的使能位分別置1時將生成相應的發送時鐘和接收時鐘。