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

【单片机day03】

UART串口

通用异步收发器,2个串口(1个串口被用于ISP下载程序,1个串口被用于和主机之间的通信)

全双工(两根线TX、RX)、串行、异步

通信方式:

  • 单工:
    • 发送方和接收方是固定的,数据只能从发送方  发给  接收方
    • 数据传输通过一根信号线实现
    • 数据传输方向固定
  • 半双工:(I2C)
    • 发送方和接收方不是固定的,通信双方都可发可收
    • 数据传输通过一根信号线,数据的传输方向是双向的
    • 但同一时刻数据传输方向是单一的(A给B发的时候,B只能接收)
  • 全双工:(UART)
    • 通信双方既可作为发送方,也可作为接收方
    • 数据传输通过两根信号线
    • 数据传输方向在任意时刻都是双向的

数据传输的顺序:

Uart在传输数据时,遵循LSB优先原则(低位先行),先发低位数据

数据传输的形式:

  • 串行:通过一根信号线传输数据,按照先后次序逐个bit逐个bit去发送数据
  • 并行:通过多根信号线同时去传输数据

串行传输和并行传输的区别:

  • 串行:
    • 传输速率慢(只能通过一根线逐个bit去传输)
    • 硬件成本低,实现简单
    • 传输距离远,抗干扰性好(RS485差分)
  • 并行:
    • 传输速率快,可以通过多跟线同时传输多个Bit
    • 硬件成本高,实现复杂
    • 传输距离近,抗干扰性差(理论上30米内,)

串口通信时序:

  • 串口通信时,空闲状态为高电平
  • 当由高电平变为低电平(发送一个低电平信号),代表发送了一个起始位,准备开始通信
  • 发送数据(通常是8bit,遵循先发数据低位LSB原则)
  • 再发送一个Bit的校验位,(奇偶校验)

  • 校验
    • 奇偶校验(串口):

      • 奇 校验:校验位 为1,若数据位中,“1” 的个数加上校验位 “1” 的个数,保持奇数个,代表校验通过(奇校验,奇数个1)。
      • 偶 校验:校验位为0,若数据位中“1”的个数 + 校验位“0”的个数,保持1的个数位偶数个,代表校验通过。(偶校验,偶数个1)
      • 缺点:无法检测 偶数个bit出错的问题
    • 累加和 校验
    • CRC校验(Modbus协议)

串口通信参数:

波特率:

bps(bit per second),每秒钟传输bit的数量,常见的波特率:2400, 4800 , 9600,115200

数据位:

8, 串口传输通常8bit 数据位传输

停止位:

1,  1bit停止位

校验位:

None,N,无校验
Even,E,偶校验
Odd,0,奇校验

同步通信、异步通信

I2C:SCL 时钟线
SPI:SCLK 时钟线
UART:无时钟线 异步

  • 同步:
    • 通信的双方有一根共享的时钟线来约定通信的频率(同步发送数据/接收数据)
  • 异步:
    • 通信双方没有时钟线进行同步,如Uart:可以通过设置波特率来实现同步(发:2400bps 收:2400bps)

串口寄存器配置:

串口的波特率发生器依赖于定时器1(Timer1)

  • SCON/PCON串口控制寄存器:

  • PCON寄存器中的bit6 置0代表通过SCON寄存器中SM0和SM1两位指定串口工作方式:
    • 将SCON寄存器中的bit6和bit7清0
    • 将SCON寄存器中的SM1 bit6置1,SM0 bit7清0,代表串口工作8位UART模式
    • 将SCON寄存器中REN bit4置1,代表允许串口接收数据
    • SCON寄存器中bit1 TI位,代表串口8位数据发送完毕硬件自动置1,但需要软件清0(用来检测)
    • SCON寄存器bit0 RI位,代表串口8位数据接收完毕硬件自动置1,但需要软件清0  (用来检测)
    • PCON寄存器SMOD bit7位置1,代表波特率加倍
  • 定时器寄存器相关配置:

  • TMOD 定时器模式选择寄存器:
    • 将TMOD寄存器中的高四位清0(定时器1)
    • 将TMOD寄存器中的bit5置1,bit4清0,代表定时器1工作在8位自动重装载模式
    • 将定时器初值写入到TL1和TH1
    • 将TCON寄存器中的bit6置1,代表允许定时器1开始计数
  • 中断寄存器相关配置:

  • IE中断控制寄存器:
    • 将IE寄存器中的bit7 EA位置1,代表CPU能够响应所有中断
    • 将IE寄存器中的bit4 ES位置1,代表允许串口产生中断

定义数组时:xdata char buf[32] = {0xAA, 0xBB,0xCC};

存储在片外RAM中,不加xdata,会存储在片内RAM中(只有256byte)

主从应答:

主从应答就是通信协议里,主机发起请求,从机必须返回确认(ACK/NACK或数据帧),以保证数据传输的可靠性和交互性。

  • 主机:拥有对通信绝对控制权,通信都是由主机发起
  • 从机:无法直接发起通信,只能根据主机下发的指令完成对应操作

主机 -> 从机:

功能码 0000 0001

从机 -> 主机:

功能码:1000 0001   也就是81

bit 7最高位:数据流向位

0:主机 -> 从机

1:从机 -> 主机

http://www.dtcms.com/a/367530.html

相关文章:

  • More Effective C++ 条款28:智能指针
  • 洛谷 P3384 【模板】重链剖分/树链剖分-提高+/省选-
  • Websocket链接如何配置nginx转发规则?
  • Linux网络服务——基础设置
  • bd09转2gs84坐标算法
  • Python可视化93阅兵武器进化
  • 适应新环境:Trae编辑器下的IDEA快捷键定制
  • AgentThink:一种在自动驾驶视觉语言模型中用于工具增强链式思维推理的统一框架
  • 2025年数学建模国赛B题超详细解题思路
  • CSDN 与 掘金 高效学习指南
  • Web基础、HTTP/HTTPS协议与Nginx详解
  • 深度学习篇---MNIST:手写数字数据集
  • 【算法速成课2 | 题单】背包问题
  • RAG学习
  • Netty从0到1系列之Buffer【上】
  • Flutter之riverpod状态管理Widget UI详解
  • 投标委托测试如何选择第三方检测机构?
  • 记录SSL部署,链路不完整问题
  • Unity Standard Shader 解析(五)之ShadowCaster
  • go 初始化组件最佳实践
  • 2025数学建模国赛高教社杯A题思路代码文章助攻
  • deveco 出现hvigor版本与系统版本不匹配
  • (自用)Linux 常用命令自查文档
  • QT6 配置 Copilot插件
  • 以StarRocks为例讲解MPP架构和列式存储
  • Kafka 学习教程:从基础概念到实践操作
  • 香港云主机常见使用问题汇总
  • 【图像处理基石】图像在频域处理和增强时,如何避免频谱混叠?
  • 【C++】17. AVL树实现
  • Java基础 9.4