嵌入式單片機---串口通信及相關通信技術

一、通信方式分類

(一)按數據傳輸線路數量劃分:串行通信與并行通信

類別定義特點
并行通信多個比特同時通過并行線進行傳輸優點:傳輸速率較高;缺點:占用大量芯片資源
串行通信將數據拆分成一個個比特,按照先后次序在一根總線上進行發送優點:系統占用資源少,結構簡單;地位:主機間通信的常用方式

(二)按數據傳輸方向劃分:單工、半雙工、全雙工通信

通信方式定義關鍵特點
單工通信(Simplex)數據僅能沿固定單一方向傳輸,一方永久為發送端,另一方永久為接收端1. 單向不可逆;2. 僅需1根傳輸總線
半雙工通信(Half-Duplex)數據可沿兩個方向傳輸,但不能同時雙向傳輸,需切換傳輸方向1. 雙向可逆,但需分時;2. 可共用1根傳輸總線;3. 存在“發送-接收”的切換
全雙工通信(Full-Duplex)數據可沿兩個方向同時傳輸,通信雙方可同時發送和接收數據1. 雙向同步進行;2. 通常需2根獨立傳輸線(如TX/RX);3. 無切換延遲,交互效率最高

二、串口通信(UART)核心知識

(一)串口通信定義

通常指“異步串口通信(UART)”,是串行通信的一種,通過1根發送線(TX)和1根接收線(RX)實現雙向數據傳輸,靠“波特率同步”,廣泛用于短距離設備交互(如單片機與電腦、傳感器與控制器),屬于異步串行全雙工通信方式。

(二)串口通信時序

串口通信空閑時數據線為高電平,數據以“幀”為單位傳輸,1幀包含4個固定部分,時序順序如下:

? ? ? ? 空閑時為高電平

  1. 起始位:幀的開始標志,必為低電平(持續1個“位時間”,$ \text{位時間} = \frac{1}{\text{波特率}} $),用于通知接收端“即將傳數據”;
  2. 數據位:實際傳輸的二進制數據,通常為5~8位(最常用8位,即1個字節),按“低位在前(LSB)、高位在后(MSB)”傳輸;
  3. 校驗位(可選):用于檢錯,分奇校驗(數據位+校驗位總“1”的個數為奇數)、偶校驗(總“1”的個數為偶數)、無校驗(省略);
  4. 停止位:幀的結束標志,為高電平,用于接收端確認1幀結束,以保證下一個字節發送前的起始位能夠表現出來。

(三)串口通信速率

  1. 速率決定因素:串口通信速率由“波特率(Baud Rate)”決定,波特率指“每秒傳輸的信號變化次數”(對串口而言,通常1個信號變化對應1位數據,因此 $ \text{波特率} \approx \text{每秒傳輸的位數} $,即bps),且收發雙方必須設置相同的波特率,否則會因“位時間不匹配”導致數據傳輸錯誤。
  2. 常見波特率(單位:bps):1200、2400、4800、9600(常用)、115200等。

三、同步通信與異步通信

通信類型定義優點缺點
同步通信通信設備之間除了需要數據線之外,還需額外的時鐘線(如SCLK),收發雙方通過時鐘信號“同步節奏”,數據連續傳輸(無間隙),發送方負責控制時鐘線的變化,每發送一個比特,都需要將時鐘線按照規則進行改變,通常以“塊”為單位傳輸(如16位、32位)無需起始/停止位,傳輸效率高需額外時鐘線,線路成本高,時鐘干擾會影響同步
異步通信無需時鐘線,收發雙方通過“約定相同的波特率”同步節奏,數據以“幀”為單位傳輸(每幀含起始/停止位,幀間可有空隙)線路少(僅TX/RX)、成本低,適合短距離因波特率偏差可能導致誤碼(需預留容錯空間),效率略低

串口通信歸屬:串口通信(UART)屬于異步通信,無需時鐘線,靠起始/停止位和約定波特率實現數據同步。

四、常見電平標準(TTL、RS232、RS485)

三者是串口通信的“電平標準”(定義“0”和“1”對應的電壓范圍),核心差異是“電壓范圍”“傳輸距離”和“抗干擾能力”:

電平標準電平定義特點應用場景
TTL(晶體管-晶體管邏輯電平)高電平(1)= 3.3V/5V,低電平(0)= 0V電壓范圍小,抗干擾能力弱,傳輸距離短(通常≤10米)設備內部短距離通信(如單片機與傳感器、模塊間的板上通信)
RS232(Recommended Standard 232)高電平(1)= -15V~-3V,低電平(0)= +3V~+15V(與TTL反相)采用正負電壓,抗干擾能力比TTL強,傳輸距離中等(通常≤15米),支持全雙工(需TX/RX兩根線)早期電腦串口(DB9接口)與外設通信(如Modem、單片機下載),需通過“TTL-RS232轉換器”與TTL設備連接
RS485(Recommended Standard 485)采用“差分信號”(兩根線A/B,通過A-B電壓差判斷電平:A>B時為1,A<B時為0),無固定電壓范圍(通常差分電壓≥200mV即可識別)差分傳輸抗干擾能力極強,傳輸距離遠(最大1200米),支持多設備聯網(最多32/128臺設備共享總線),默認半雙工(僅需A/B兩根線,全雙工需額外兩根線)工業現場長距離、多設備通信(如傳感器網絡、PLC控制、智能家居總線),需通過“TTL-RS485轉換器”與TTL設備連接

五、USB相關

USB(通用串行總線)是一種常用的串行通信接口,具有即插即用、支持熱插拔、傳輸速率較高、可同時為外部設備供電等特點,廣泛應用于電腦與外部設備(如U盤、鼠標、鍵盤、手機等)的連接與數據傳輸,其通信方式為串行通信,支持全雙工傳輸。

六、51單片機串口通信相關代碼

(一)頭文件引用

#include <reg52.h>  
#include <stdio.h>  
#include <string.h>  
#include "delay.h"  

(二)串口初始化函數

void init_uart(void)  
{  unsigned char t;  t = SCON;  t &= ~(3 << 6);  t |= (1 << 6) | (1 << 4);  SCON = t;  PCON |= (1 << 7);  t = TMOD;  t &= ~(3 << 4);  t |= (2 << 4);  t &= ~(3 << 6);  TMOD = t;  TH1 = 204;  TL1 = 204;  TCON |= (1 << 6);  IE |= (1 << 7) | (1 << 4);  
}  

(三)單個字符發送函數

void send_char(char ch)  
{  SBUF = ch;  while((SCON & (1 << 1)) == 0);  SCON &= ~(1 << 1);  
}  

(四)緩沖區發送函數

void send_buffer(const char *p, int len)  
{  while(len--)  {  send_char(*p++);  }  
}  

(五)串口中斷服務函數

void uart_handler(void) interrupt 4  
{  if((SCON & (1 << 0)) != 0)  {  P2 = SBUF;  SCON &= ~(1 << 0);  }  
}  

(六)全局變量定義

xdata char recv_buffer[64];  
int pos = 0;  

(七)主函數

int main(void)  
{  int i = 1;  int n = 10;  char *p = (char *) &p;  xdata char buffer[32];  init_uart();  while(1)  {  n = sizeof(int);  sprintf(buffer, "int size  =  %d\n", n);  send_buffer(buffer, strlen(buffer));  n = sizeof(char);  sprintf(buffer, "char size  =  %d\n", n);  send_buffer(buffer, strlen(buffer));  n = sizeof(short);  sprintf(buffer, "short size  =  %d\n", n);  send_buffer(buffer, strlen(buffer));  n = sizeof(double);  sprintf(buffer, "double size  =  %d\n", n);  send_buffer(buffer, strlen(buffer));  n = sizeof(long);  sprintf(buffer, "long size  =  %d\n", n);  send_buffer(buffer, strlen(buffer));  n = sizeof(char *);  sprintf(buffer, "char * size  =  %d\n", n);  send_buffer(buffer, strlen(buffer));  delay(0x9FFF);  }  return 0;  
}  

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95560.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95560.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95560.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch面試精講 Day 8:聚合分析與統計查詢

【Elasticsearch面試精講 Day 8】聚合分析與統計查詢 文章標簽&#xff1a;Elasticsearch, 聚合查詢, 統計分析, Aggregations, 面試, 大數據, 搜索引擎, 后端開發, 數據分析 文章簡述&#xff1a; 本文是“Elasticsearch面試精講”系列的第8天&#xff0c;聚焦聚合分析與統計…

HTML HTML基礎(2)

1.開發者文檔W3C官網&#xff1a; www.w3c.org W3School&#xff1a; www.w3school.com.cn MDN&#xff1a; developer.mozilla.org —— 推薦。2.排版標簽標簽名標簽含義單 / 雙 標簽h1 ~ h6標題雙p段落雙div沒有任何含義&#xff0c;用于整體布局雙(1). h1 最好寫一個&#x…

spring.profiles.active配置的作用

1. spring.profiles (或文件名中的 ?)&#xff1a;定義配置的名稱這是聲明一段配置屬于哪個 Profile。在同一個 application.yml 中&#xff1a;使用 spring.profiles 鍵來為一個配置段打上標簽。yamlspring:profiles: dev # 【定義】這個配置段的名稱是‘dev’ server:port: …

【開題答辯全過程】以 高校教室管理系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

Aurobay EDI 需求分析:OFTP2 與 EDIFACT 驅動的汽車供應鏈數字化

Aurobay 是由吉利汽車集團與沃爾沃汽車集團合資成立的動力系統公司&#xff0c;總部位于瑞典哥德堡。其供應鏈系統廣泛采用 EDI&#xff08;電子數據交換&#xff09;技術進行標準化通信與業務協作。通過嚴謹的 EDI 傳輸規范&#xff0c;其與供應商之間構建了高效、安全的數據交…

yolov8環境配置:從安裝到卸載,從入門到放棄。

yolov8環境配置&#xff1a;從安裝到卸載&#xff0c;從入門到放棄。 先講安裝再到刪除。 前置環境安裝&#xff1a;Conda 這里我選用MiniConda 使用清華的鏡像安裝&#xff1a;https://mirror.tuna.tsinghua.edu.cn/anaconda/miniconda/ 直接安裝到C盤&#xff08;免得后續…

神馬 M63S+ 438T礦機評測:SHA-256算法高效能挖礦利器

在加密貨幣的挖礦世界里&#xff0c;硬件設備的性能直接影響著礦工的挖礦效率與收益。而對于選擇比特幣&#xff08;BTC&#xff09;與比特幣現金&#xff08;BCH&#xff09;等基于SHA-256算法的礦工來說&#xff0c;礦機的算力、功耗、能效比等參數無疑是至關重要的。在這篇文…

vue2滑塊驗證

純 Vue 2 實現的滑塊拖動驗證組件效果說明拖動滑塊到最右側判定為驗證成功支持自定義寬度、高度、顏色、提示文字可擴展軌跡分析或后端驗證邏輯Vue 2 滑塊驗證組件代碼SliderVerify.vue注意&#xff1a;icon圖標使用的是Element ui圖標<template><div class"slid…

74、在昇騰服務器 800I A2上遷移伏羲1.0/2.0大模型,并對比cpu和npu的精度

基本思想&#xff1a;在昇騰服務器上遷移github公開鏈接的的伏羲1.0/2.0大模型&#xff0c;但是由于伏羲2.0模型沒有權重&#xff0c;這里使用自己造的的權重進行推理模型測試&#xff0c;在之前遷移過這個網站問海大模型和問天大模型人工智能天氣預報模型示范計劃AIM-FDP支撐平…

如何高效比對不同合同版本差異,避免法律風險?

智能文檔比對系統通過自動化、高精度的差異比對與結構化報告&#xff0c;鎖定合同修改、防止核心條款誤刪并實現版本清晰追溯&#xff0c;解決證券基金公司在合同范本管理中的操作風險、審核效率與歸檔難題。 如何防止業務人員誤改或誤刪合同條款&#xff1f; 這是一個典型的操…

快手Keye-VL 1.5開源128K上下文+0.1秒級視頻定位+跨模態推理,引領視頻理解新標桿

人工智能和多模態學習領域&#xff0c;視頻理解技術的突破為各類應用提供了強大的支持。快手近期開源了其創新性的大型多模態推理模型——Keye-VL 1.5&#xff0c;該模型具備超長的上下文窗口、0.1秒級的視頻時序定位能力&#xff0c;并支持視頻與文本之間的跨模態推理。這一技…

【前端教程】JavaScript 實現圖片鼠標懸停切換效果與==和=的區別

圖片鼠標懸停切換效果 功能說明 頁面展示4張默認圖片&#xff0c;當鼠標移動到任意一張圖片上時&#xff0c;該圖片會切換為對應的特定圖片&#xff08;詩、書、畫、唱&#xff09;&#xff1b;當鼠標移出時&#xff0c;圖片恢復為默認圖片。 和的區別 在講解案例前&#xff0c…

ss 原理

SSR&#xff08;服務端渲染&#xff09;技術文檔 一、SSR 概述 SSR&#xff08;Server-Side Rendering&#xff0c;服務端渲染&#xff09;是一種在服務端生成完整 HTML 頁面&#xff0c;再發送給客戶端渲染的前端渲染模式。與 CSR&#xff08;客戶端渲染&#xff0c;如 React/…

chrome 瀏覽器開發者工具技巧

$0 我們在開發者工具里面選中了哪個元素&#xff0c;他后面都會跟一個$0 ,則表示 $0 就是選擇這個標簽元素 如圖&#xff1a;

GJOI 9.4 題解

1.CF1801B Buy Gifts / 洛谷 P13532 買禮物 題意 n≤2105n\le 2\times 10^5n≤2105。 思路 神秘卡常題&#xff0c;如果等待提交記錄久一點就能知道自己 A 掉…… 題目問 A 的最大值&#xff0c;減去 B 的最大值&#xff0c;求差值最小值。但是怎么選到兩個最大值呢&#x…

Git 工具的「安裝」及「基礎命令使用」

- 第 119 篇 - Date: 2025 - 09 - 05 Author: 鄭龍浩&#xff08;仟墨&#xff09; Git 工具的「安裝」及「基礎命令使用」 學習課程&#xff1a;https://www.bilibili.com/video/BV1MU4y1Y7h5?spm_id_from333.788.player.switch&vd_source2683707f584c21c57616cc6ce8454e…

2025高教社數學建模國賽A題 - 煙幕干擾彈的投放策略(完整參考論文)

基于模擬遺傳退火的煙幕彈投遞方式的研究 摘要 煙幕干擾彈作為一種具有成本低、效費比高等優點的典型防御手段,主要通過化學燃燒或爆炸分散形成氣溶膠云團,在目標前方特定空域形成有效遮蔽,從而干擾敵方導彈攻擊路徑。隨著精確投放技術的發展,現可利用無人機實現煙幕干擾…

[源力覺醒 創作者計劃]_文心一言 4.5開源深度解析:性能狂飆 + 中文專精

文章目錄[源力覺醒 創作者計劃]_文心一言 4.5開源深度解析:性能狂飆 中文專精一. 部署實戰&#xff1a;單卡環境的極速落地1.1 &#x1f5a5;? 環境配置の手把手教程 &#x1f4dd;部署準備&#xff1a;硬件與鏡像依賴安裝&#xff1a;一行代碼搞定1.2 &#x1f680; 模型啟動…

開發微服務的9個最佳實踐

微服務架構是一種演進的模式&#xff0c;從根本上改變了服務器端代碼的開發和管理方式。這種架構模式涉及將應用程序設計和開發為松散耦合服務的集合&#xff0c;這些服務通過定義良好的輕量級 API 進行交互以滿足業務需求。它旨在通過促進持續交付和開發來幫助軟件開發公司加速…

Karmada v1.15 版本發布

Karmada 是開放的多云多集群容器編排引擎&#xff0c;旨在幫助用戶在多云環境下部署和運維業務應用。憑借兼容 Kubernetes 原生 API 的能力&#xff0c;Karmada 可以平滑遷移單集群工作負載&#xff0c;并且仍可保持與 Kubernetes 周邊生態工具鏈協同。 Karmada v1.15 版本現已…