本文主要介绍串口通信的相关内容。基于STC89C52实现电脑与串口之间的通信。

目录

一、串口介绍

二、硬件电路

三、电平标准

1. TTL 电平

2. RS-232 电平

3. RS-485 电平

四、常见通信接口比较

五、相关术语

六、51单片机的UART

七、串口参数与时序图

八、串口工作模式的硬件结构图

九、程序实现

1、串口向电脑发送数据

2、电脑通过串口控制LED

十、效果展示

1、串口向电脑发送数据

2、电脑通过串口控制LED


一、串口介绍

串口(Serial Port,串行通信接口)是设备间逐位、依次传输数据的通信接口,核心是UART 协议,搭配RS-232/RS-485等电气标准,广泛用于嵌入式调试、工业控制、传感器通信等场景。

51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

二、硬件电路

  • 简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
  • TXD与RXD要交叉连接
  • 当只需单向的数据传输时,可以直接一根通信线
  • 当电平标准不一致时,需要加电平转换芯片

三、电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

1. TTL 电平

  • 电压:3.3V 或 5V

  • 逻辑:1 = 3.3V/5V       0 = 0V(GND)

  • 距离:很短,几十厘米以内

  • 用途:

    • STM32、Arduino、ESP32 内部串口

    • USB 转 TTL 模块(CH340、CP2102)

    • 传感器、蓝牙 / WiFi 模块

2. RS-232 电平

  • 电压:±12V 左右

  • 逻辑:和 TTL 完全相反!  1 = -3V ~ -15V     0 = +3V ~ +15V

  • 距离:15 米以内

  • 特点:

    • 不能直接和单片机 TTL 相连!会烧芯片

    • 必须用 MAX3232 这类电平转换芯片

3. RS-485 电平

  • 差分信号:A、B 两根线

  • 电压差决定逻辑

  • 距离:最远 1200 米

  • 抗干扰极强,工业现场必用

  • 半双工常见通信接口比较

四、常见通信接口比较

名称 引脚定义 通信方式 特点
UART TXD、RXD 全双工、异步 点对点通信
I²C SCL、SDA 半双工、同步 可挂载多个设备
SPI SCLK、MOSI、MISO、CS 全双工、同步 可挂载多个设备
1-Wire DQ 半双工、异步 可挂载多个设备

五、相关术语

全双工:通信双方可以同时发送和接收数据,就像打电话,两边可以同时说话。代表接口:UART、SPI。

半双工:通信双方可以发送和接收数据,但同一时间只能单向传输,就像对讲机,必须 “说完等对方回复”。代表接口:I²C、1-Wire、RS-485。

单工:只能单向传输数据,一方永远发送,另一方永远接收,就像广播电台。

同步通信:通信双方共享统一的时钟信号,用时钟边沿来同步数据传输,数据传输效率高、速度快。代表接口:I²C、SPI。

异步通信:没有统一的时钟信号,通过起始位、数据位、校验位、停止位来帧同步,接线简单但速度相对较慢。代表接口:UART、1-Wire。

点对点通信:只有两个设备之间直接通信,不能接入更多设备,通信链路简单。代表接口:UART。

时钟信号:同步通信中由主机提供的周期性电平信号,用于标记数据传输的节奏,确保收发双方数据对齐。

片选信号(CS/SS):SPI 接口中用于选择特定从设备的信号,只有被选中的设备才会响应通信,避免总线冲突。

六、51单片机的UART

STC89C52有1个UART

STC89C52的UART有四种工作模式:

  模式0:同步移位寄存器

  模式1:8位UART,波特率可变(常用)

  模式2:9位UART,波特率固定

  模式3:9位UART,波特率可变

七、串口参数与时序图

波特率:串口通信的速率,代表每秒钟传输的比特数(比如 9600、115200),决定了发送 / 接收每一位数据的间隔时间。

检验位:用于数据传输错误验证(比如奇校验、偶校验),比如发送0101 0101,如果是奇校验,要让 1 的总数变成 奇数,所以校验位 = 1。如果是偶校验,要让 1 的总数保持 偶数,所以校验位 = 0。

停止位:用于标识一帧数据的结束,起到帧间隔的作用。

八、串口工作模式的硬件结构图

1. 核心数据缓存:SBUF

地址:99H物理上是两个独立寄存器(发送和接收各一个,共用一个地址)

2. 波特率生成:定时器 T1 + 分频逻辑

时钟源:由定时器 T1 溢出提供(T1溢出率

分频路径:

  • T1 溢出 → 先经过 ÷2÷1(由 SMOD 位控制波特率是否加倍)
  • 再经过 ÷16 分频,最终得到串口波特率

3. 发送流程

  1. CPU 向 发送 SBUF 写入数据

  2. 发送控制器从 SBUF 取出数据,按串口帧格式(起始位 + 数据位 + 停止位)逐位发送

  3. 发送完成后,发送中断标志位 TI 置 1,触发串口中断(如果开启)

  4. 数据通过 TXD 引脚 发送出去

4. 接收流程

  1. RXD 引脚检测到起始位(低电平),开始接收数据

  2. 接收控制器通过 移位寄存器 逐位采集数据

  3. 一帧数据接收完成后,存入 接收 SBUF

  4. 接收中断标志位 RI 置 1,触发串口中断(如果开启)

  5. CPU 读取 SBUF 获取数据

九、程序实现

1、串口向电脑发送数据

1.1 关于寄存器配置,需要去看一下手册的第8章和第7章。或者直接用STC-ISP波特率计算器生成代码。关键的UART_Init 和 UART_SendByte函数实现如下所示。UART_SendByte中发送中断标志位需要手动复位。

1.2 main实现通过串口发送当前秒计数值

2、电脑通过串口控制LED

2. 1 主要需要使能串口中断,同时需要用到串口中断服务函数。

2.2 在中断服务函数将接收到的数据发送到P2口

十、效果展示

1、串口向电脑发送数据

2、电脑通过串口控制LED

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐