当前位置: 首页 > news >正文

Linux学习-硬件(串口通信)

一、通信方式:串行与并行

  • 串行通信
    • 传输形式:数据通过1条(或2条,如UART的TX/RX)信号线逐位传输,每次仅传1 bit。
    • 特点:线路少、成本低、抗干扰性强,但传输速度慢
    • 典型应用:UART串口、SPI、I2C等。
  • 并行通信
    • 传输形式:数据通过多条信号线同时传输,每次传多位(如8位、16位)。
    • 特点:传输速度快,但线路多、成本高、长距离抗干扰性弱。
    • 典型应用:早期计算机内部总线、打印机LPT接口等。

二、通信方向:单工、半双工、全双工

  • 单工通信:数据仅能单向固定传输(发送方→接收方,不可逆)。
    • 例子:收音机(只收不发)、红外遥控器。
  • 半双工通信:数据可双向传输,但同一时间只能单向(发送和接收不能同时进行)。
    • 例子:对讲机(一方说话时另一方需等待)、RS485总线(半双工模式)。
  • 全双工通信:数据可双向同时传输(发送和接收独立进行)。
    • 例子:电话(双方可同时说话)、USB通信、UART串口(TX/RX双工线)。

三、串口通信核心(时序、速率、同步/异步归属)

  • 串口通信(UART)
    • 本质:一种串行异步通信方式,通过单条(或两条)线传输数据,常用于设备短距离通信(如单片机与传感器、PC与开发板)。
  • 通信时序(异步UART为例)
    1. 空闲:信号线保持高电平(逻辑1)
    2. 起始位:发送1个低电平(逻辑0),标记数据开始。
    3. 数据位:传输实际数据(5 - 8位,如8位,低位在前)。
    4. 校验位(可选):奇/偶/无校验,用于数据正确性校验。
    5. 停止位:发送1 - 2个高电平(逻辑1),标记一帧数据结束。
      时序流程:空闲 → 起始位 → 数据位 → 校验位(可选)→ 停止位 → 空闲
  • 速率决定因素:由**波特率(Baud Rate)**决定,即单位时间传输的二进制位数(bit/s)。通信双方需预先约定一致,否则数据错误。
  • 常见波特率:300、600、1200、2400、4800、9600(最常用默认值)、19200、38400、57600、115200等。
  • 同步/异步归属:串口(UART)属于异步通信——发送方和接收方用独立时钟,通过起始/停止位标识数据帧,无需物理时钟线,灵活性高但效率较低。

四、同步通信 vs 异步通信

  • 同步通信
    • 同步方式:发送方和接收方用同一时钟信号同步传输,数据连续发送(无起始/停止位)。
    • 特点:效率高,但需额外时钟线。
    • 典型应用:SPI、I2C、CAN总线。
  • 异步通信
    • 同步方式:发送方和接收方用独立时钟,通过起始/停止位标识数据帧边界。
    • 特点:无需时钟线,灵活性高但效率较低。
    • 典型应用:UART串口。

五、电平标准:TTL、RS232、RS485

  • TTL(Transistor-Transistor Logic)
    • 适用场景:短距离(≤1米)通信。
    • 电平定义:逻辑1为3.3V/5V,逻辑0为0V。
    • 应用:单片机内部、芯片间通信(如传感器与MCU的UART接口)。
  • RS232
    • 适用场景:中短距离(≤15米)通信。
    • 电平定义:逻辑1为-3V ~ -15V,逻辑0为+3V ~ +15V(与TTL反相)。
    • 连接要求:需电平转换芯片(如MAX232)与TTL设备对接,常见于PC的DB9串口。
  • RS485
    • 适用场景: 长距离(≤1200米)、多设备(最多32节点)通信。
    • 传输方式:采用差分信号(A、B线),抗干扰能力强,支持半双工/全双工。
    • 应用:工业现场总线(如传感器网络、楼宇自动化)。

六、UART(通用异步收发器)细节

  • 信号逻辑
    • 空闲时:高电平;
    • 起始位:低电平;
    • 数据传输:低位先行;
    • 校验位:奇校验(Odd)、偶校验(Even)、无校验(None)可选;
    • 停止位:高电平(1位或多位)。
  • 波特率:即传输效率(bit per second,bps),常见值1200、2400、4800、9600、115200等;波特率越小,传输速率越慢(如115200 bps比9600 bps快)。
  • 示例解析
    • 9600, n, 8, 1:波特率9600 bps、无校验、8位数据位、1位停止位。
    • 115200, e, 7, 2:波特率115200 bps、偶校验、7位数据位、2位停止位。
  • 数据位计算8位数据 + 1起始位 + 校验位(0或1) + 停止位(1或多),总长度≤10位。
  • 传输效率示例:波特率9600 bps时,1秒可发 ( 9600 \div 10 = 960 ) 字节(按10位/字节算)。
  • BSP:板级支持包,用于硬件层数据封装。

七、51单片机串口(以SCON为例)

  • 控制寄存器SCON

    • SM0/SM1:串口工作模式选择(如模式1为8位UART,波特率由定时器1溢出率决定)。
    • SM2:多机通信控制位。
    • REN:接收使能位,REN=1时允许接收。
    • TI:发送中断请求标志位,TI=1表示发送完成(需手动软件复位)。
    • RI:接收中断请求标志位,RI=1表示接收完成(需手动软件复位)。
  • 波特率计算
    公式:2^8 - 2 ^smod * focs /32/bps/12
    (focs为晶振频率,TH1为定时器1初值,SMOD用于波特率加倍)。

  • 数据模式

    • 文本模式:#对应0x23
    • 二进制(HEX)模式:0xFF对应数值255。

八、自定义协议与主从总线模式

  • 主从总线模式:主机发命令,从机执行并返回响应(如“China”命令,从机回“OK”)。
  • Modbus类自定义协议帧结构(示例)
    字段内容示例(十六进制)
    起始字节帧起始标识0xAA
    设备地址从机地址(低位在前)0x01(低)、0x00(高)
    功能码命令功能标识0x03
    数据段传输数据0x04、0xD2(数据1、数据2…)
    校验码累加和校验(低字节在前)0x05(低)、0x20(高)
    结束字节帧结束标识0x0D

(注:累加和校验为各字节累加后取低字节,用于帧完整性验证)


文章转载自:

http://hRWrbcqp.zwmjq.cn
http://c5adD9et.zwmjq.cn
http://CKM6wuKb.zwmjq.cn
http://zrybGAuh.zwmjq.cn
http://LLQTcS8s.zwmjq.cn
http://k2AFZj4B.zwmjq.cn
http://6gj390rh.zwmjq.cn
http://9GHhzvpl.zwmjq.cn
http://7ST1Kvqt.zwmjq.cn
http://fFJ2VeUK.zwmjq.cn
http://VZJOLS3N.zwmjq.cn
http://t9RDr15d.zwmjq.cn
http://Ff7dnQsM.zwmjq.cn
http://PHB6mUKe.zwmjq.cn
http://jHR3YO0d.zwmjq.cn
http://Xe6B41mv.zwmjq.cn
http://0AYAq1HB.zwmjq.cn
http://UPoyvCis.zwmjq.cn
http://KX5YiVUg.zwmjq.cn
http://XbnvCFsx.zwmjq.cn
http://EEXEcr89.zwmjq.cn
http://MnhxOrhE.zwmjq.cn
http://JURHrPcp.zwmjq.cn
http://KG8pn8KX.zwmjq.cn
http://4Pq93Yr7.zwmjq.cn
http://nrrrKihL.zwmjq.cn
http://dE9ZLfVw.zwmjq.cn
http://2lrDXdlW.zwmjq.cn
http://76Hwn9mI.zwmjq.cn
http://YqgOa19A.zwmjq.cn
http://www.dtcms.com/a/368721.html

相关文章:

  • 【蓝桥杯选拔赛真题65】C++求个数 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
  • AI美颜与瘦脸技术全解析
  • Dify on DMS,快速构建开箱即用的客服对话数据质检服务
  • 数字人打断对话的逻辑
  • Claude Code成本浪费严重?80%开支可省!Token黑洞解密与三层省钱攻略
  • 基于STM32的交通灯设计—紧急模式、可调时间
  • (未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
  • OpenResty 和 Nginx 到底有啥区别?你真的了解吗!
  • c++ 第三方库与个人封装库
  • 好看的背景颜色 uniapp+小程序
  • 多目标粒子群优化(MOPSO)MATLAB
  • 【MySQL】mysql C/C++ connect
  • 设置静态IP的方法
  • 用得更顺手的 Protobuf 文件后缀、流式多消息、大数据集与“自描述消息”实战
  • 机器学习入门,用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题!
  • 从碎片化到一体化:Java分布式缓存的“三级跳”实战
  • 深入剖析RocketMQ分布式消息架构:从入门到精通的技术全景解析
  • 通过API接口管理企业微信通讯录案例
  • 飞算JavaAI炫技赛:电商系统开发全流程实战解析
  • MySQL集群——主从复制
  • 项目必备流程图,类图,E-R图实例速通
  • 苹果 AI 探秘:代号 “AFM” —— “温柔的反叛者”
  • CAN通信入门
  • 1分钟了解等保测评流程
  • 【GEOS-Chem模型第三期】使用 Spack 构建 GEOS-Chem 等
  • 【Linux手册】动静态库:从原理到制作
  • 嵌入式ARM64 基于RK3588原生SDK添加用户配置选项build lunch
  • 深度学习——残差神经网路
  • 传统神经网络实现-----手写数字识别(MNIST)项目
  • Maven常见问题解决方案