嵌入式学习 51单片机(3)

UART 概述

通用异步收发器(UART)是一种全双工、串行、异步通信协议,常用于设备间数据传输。包含两根信号线:

  • RXD(接收信号线)
  • TXD(发送信号线)

通信方式

单工

  • 通信方向固定,仅支持单向传输(如广播)。
  • 单根信号线实现数据传输。

半双工(如I2C)

  • 通信双方可切换发送/接收角色。
  • 单根信号线双向传输,但同一时刻只能单向传输。

全双工(UART)

  • 通信双方同时收发数据。
  • 双信号线(RXD/TXD)实现双向实时传输。

数据传输规则

LSB优先

  • 数据位传输从最低位(LSB)开始。

串行 vs 并行

特性 串行 并行
速率 较慢(逐位传输) 较快(多线同时传输)
硬件成本 低 高
抗干扰性 强(适合远距离,如RS485) 弱(30米内有效)

串口通信时序

  1. 空闲状态:高电平。
  2. 起始位:高→低电平跳变,标志通信开始。
  3. 数据位:8位(LSB优先),可配置为5-9位。
  4. 校验位(可选):奇偶校验(见下文)。
  5. 停止位:高电平,标志帧结束(通常1-2位)。

奇偶校验

问题:无法检测偶数个位错误。

  • 奇校验:数据位+校验位中"1"的总数为奇数。
  • 偶校验:数据位+校验位中"1"的总数为偶数。

串口参数配置

常见参数组合:

  • 9600,8,N,1(波特率9600,8位数据,无校验,1位停止)
  • 2400,8,E,1(偶校验)
  • 115200,8,O,1(奇校验)

参数说明:

  • 波特率:bps(如9600=9600bit/s)。
  • 校验位 :N(无)、E(偶)、O(奇)。

同步与异步通信

  • 同步(如I2C/SPI):依赖共享时钟线(SCL/SCLK)同步数据。
  • 异步(UART):无时钟线,通过预定义波特率同步。

寄存器配置(以8051为例)

SCON/PCON寄存器

  • 工作模式:SM0=0,SM1=1(8位UART)。
  • 允许接收:REN=1。
  • 中断标志:TI(发送完成)、RI(接收完成),需软件清零。

定时器配置

  • 模式:TMOD=0x20(定时器1,8位自动重载)。
  • 波特率:写入TH1/TL1初值,TCON.TR1=1启动。

中断配置

  • 全局中断:IE.EA=1。
  • 串口中断:IE.ES=1。

主从应答机制

  • 主机 :发起通信请求(如发送指令01控制LED)。
  • 从机:解析指令并执行操作,返回应答信号。

补充要点

  1. 差分信号(如RS485):增强抗干扰能力,适合长距离通信。
  2. 硬件流控 :通过RTS/CTS信号线控制数据流,避免缓冲区溢出。
  3. 现代应用:USB转UART芯片(如CH340)简化嵌入式调试。

常见问题

  • 波特率误差:需保证收发双方误差<2%(如晶振精度影响)。
  • 电平标准:UART通常为TTL电平(0-3.3V/5V),与RS232(±12V)需电平转换。

通过合理配置参数和寄存器,UART可实现稳定可靠的设备间通信。

相关推荐
深圳老胡20 分钟前
STM32 开发中 Trae 内置模型怎么选:Seed、MiniMax、GLM、DeepSeek、Kimi、Qwen 全对比
笔记·stm32·单片机·嵌入式硬件·代码规范·1024程序员节
坤坤子吖1 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
西安同步电子2 小时前
时统卡驱动踩坑:Windows 和 Linux 下时间同步的底层差异
linux·stm32·单片机
女神下凡2 小时前
芯参谋(69):LED恒流驱动芯片电路设计指南
arm开发·人工智能·单片机·嵌入式硬件·设计规范
破芽3 小时前
learn-claude-code-s08-s09-学习笔记
笔记·学习
星恒随风3 小时前
Linux网络编程基础(二):彻底理解局域网通信、MAC与IP地址、数据封装、端口号、网络字节序及Socket接口
linux·网络·笔记·学习·tcp/ip·1024程序员节
wanglong37133 小时前
Keil编译后自动重命名HEX文件
单片机·1024程序员节
iCxhust4 小时前
stm32f103c8t6 boot0设置
stm32·单片机·嵌入式硬件·1024程序员节
嘻嘻嘻3214 小时前
ICLR2025|MIM‑Refiner:利用预训练掩码图像建模中间表征提升对比学习
学习
Young Doro5 小时前
从 KSG 到 InfoAtlas:互信息估计完整学习册
学习