【单片机入门】UART 串行异步通信核心考点梳理

51单片机 UART串口通信 核心知识点总结

标签:#51单片机 #UART #串口通信 #嵌入式 #STC89C52

一、UART基础概念

UART:通用异步收发器(串行异步收发器) 作用:实现单片机 ↔ 单片机、单片机 ↔ 其他主控之间的数据通信。

1. 硬件引脚

UART通信最少需要3根线:

  1. RXD:接收数据线(接收对方发来的数据)
  2. TXD:发送数据线(向外发送数据)
  3. GND:共地。 ✅ 重点:必须共地!串口传输是电压差值信号,通信双方基准地电压要保持一致,否则通信出错。

2. 两种硬件接线方式

  1. 点对点设备通信(单片机 ↔ 单片机) 交叉接线:设备1.TXD → 设备2.RXD;设备1.RXD → 设备2.TXD;GND直连。 发送端接对方接收端,TXD和RXD必须交叉!
  2. 单片机 ↔ PC电脑通信 单片机TTL电平串口 → CH340芯片(USB转串口模块)→ PC的USB口。 CH340负责把单片机的TTL串口信号转换成USB信号,电脑识别为虚拟串口。

二、串口传输参数

  1. 波特率 :串口传输速率,单位bps,代表每秒传输多少bit 。 常用波特率:2400、4800、9600、115200。 ⚠️ 通信双方波特率必须完全一致,否则乱码。
  2. 三大特性
    • 串行:数据按字节逐位发送,先发最低位LSB,后发最高位MSB
    • 异步:通信两端使用各自独立时钟,只预先约定波特率。时钟存在微小偏差,波特率误差大容易通信误码。
    • 全双工 :TX、RX两根独立线路,收发可以同时进行。

三、串口通信帧时序(发送1字节)

一帧数据组成: 1位起始位 + 8位数据位 + 【可选】1位奇偶校验位 + 1位停止位

51模式1默认:无校验位,也就是 起始位 + 8bit数据 + 停止位。 空闲时总线为高电平;起始位拉低,标志一帧开始;停止位拉高,代表一帧结束。

四、波特率计算公式(51单片机,模式1、模式3)

\\text{波特率}= \\frac{2\^{\\text{SMOD}}}{32} \\times \\text{定时器T1溢出率}

  • SMOD:PCON寄存器最高位,SMOD=0波特率不倍频;SMOD=1波特率加倍
  • 定时器1溢出率:定时器每秒溢出多少次
    • 12T模式:\\text{溢出率}= \\frac{\\text{SYSclk}}{12\\times(256-\\text{TH1})}
    • 6T模式:\\text{溢出率}= \\frac{\\text{SYSclk}}{6\\times(256-\\text{TH1})} TH1:定时器T1高8位初值,用于8位自动重装模式。

五、串口发送流程(查询方式)

  1. 设置串口工作模式为模式1(8位数据,无奇偶校验)
  2. 设置波特率倍频位SMOD
  3. 根据目标波特率,计算TH1初值
  4. 配置定时器T1:
    • T1设置为8位自动重装模式
    • 写入TH1初值
    • 开启定时器T1,启动计时
  5. 向SBUF写入待发送字节,硬件自动开始发送
  6. 等待TI发送完成标志置1;软件手动清零TI(硬件置1,不会自动清0!)

六、串口接收流程(中断方式,常用)

  1. 设置串口工作模式为模式1(8位数据,无奇偶校验)
  2. 打开串口接收允许位REN
  3. 设置SMOD波特率倍频
  4. 计算TH1初值,配置波特率
  5. 配置定时器T1:8位自动重装,装载TH1初值,开启T1
  6. 编写串口中断服务函数
  7. 打开串口中断总开关、EA总中断
  8. 等待接收中断触发;收到数据存入SBUF,RI标志置1,需要软件手动清零RI

七、高频考点总结

  1. TXD、RXD交叉相连,GND必须共地
  2. 异步串口双方波特率必须一致
  3. TI(发送中断标志)、RI(接收中断标志)硬件置1,软件清零
  4. 模式1:8bit数据,常用,波特率由T1定时器控制
  5. CH340作用:TTL串口 ↔ USB协议转换,实现单片机和电脑通信
  6. 全双工:收发独立,可同时收发;异步:没有共用时钟,靠起始位同步

CSDN文章推荐开头(直接复制)

本文整理51单片机UART串口通信核心原理、硬件接线、时序、波特率计算、收发流程,适合单片机入门复习、期末备考。串口是嵌入式最基础的通信接口,掌握UART原理是学习I2C、SPI等通信协议的基础。

相关推荐
Ivanqhz28 分钟前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
H.莓飛33 分钟前
【数据结构】队列
linux·数据结构·centos
小此方1 小时前
Linux网络(十九):TCP流量控制与滑动窗口详解,超时重传和快重传到底有什么区别
linux·运维·服务器·网络·网络协议·tcp/ip
女神下凡1 小时前
芯参谋(30):EMMC eMCP 软件设计规范
arm开发·单片机·嵌入式硬件·设计规范
码上有光1 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信
沫璃染墨1 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
Java后端的Ai之路2 小时前
Python进阶探索24_应用案例_linux系统的监控
linux·开发语言·python·应用·探索
H.莓飛2 小时前
【数据结构】队列_OJ题
linux·数据结构·centos
H.莓飛2 小时前
【数据结构】栈_OJ题
linux·数据结构·算法·centos
Ruiery2 小时前
Linux 6.6内核 CPU 深度解析(一):BSP 拉起 — 从实模式到 kernel_init 的完整旅程
linux·运维·服务器