嵌入式学习 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可实现稳定可靠的设备间通信。

相关推荐
少司府2 小时前
嵌入式入门篇(二):初识STM32F103ZET6
linux·python·stm32·单片机·嵌入式硬件·mcu·嵌入式软件
LGL6030A4 小时前
Java学习历程31——初识Spring Boot
java·spring boot·学习
Zwawa5 小时前
让屏幕动起来:OLED动画效果,丝滑光标、帧动画和一只贪吃蛇
c语言·单片机·嵌入式
阿达和自己5 小时前
springboot学习-springboot引入MyBatis-Plus
spring boot·学习·mybatis
简单电磁炮5 小时前
FWD八位单片机调试问题
单片机·嵌入式硬件
旖旎夜光6 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
菥蓂寻生17 小时前
STM32移植到GD32中以105为例
stm32·单片机·嵌入式硬件
§ꦿCFོ༉17 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
2603_9696948519 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
北京云帆互联科技1 天前
云帆培训考试系统更新说明:v9.3.0
java·学习