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

【单片机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”的个数 + 校验位“1”的个数,保持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)

主从应答:

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

主机 -> 从机:

功能码 0000 0001

从机 -> 主机:

功能码:1000 0001   也就是81

bit 7最高位:数据流向位

0:主机 -> 从机

1:从机 -> 主机

http://www.xdnf.cn/news/20009.html

相关文章:

  • vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储
  • 电子病历空缺句的语言学特征描述与自动分类探析(以GPT-5为例)(下)
  • LLM重排器落地难题:如何破解速度与精度的工程困局?
  • Claude Code Router实现默认回复中文回复
  • 轻量级的磁盘碎片整理程序-开箱急用快速清理磁盘垃圾和碎片-供大家学习研究参考
  • Redis 客户端与服务器:银行的 “客户服务系统” 全流程
  • LeetCode 面试经典 150_矩阵_螺旋矩阵(35_54_C++_中等)(按层模拟)
  • K8S容器POD内存快照导出分析处理方案
  • Nano-Banana使用教程
  • websocket的key和accept分别是多少个字节
  • Widget 生命周期
  • 【Python基础】 13 Rust 与 Python 注释对比笔记
  • 零基础两个月通关2025下半年软考!保姆级冲刺规划(附每日学习表)
  • 随时学英语5 逛生活超市
  • 25高教社杯数模国赛【C题顶流思路+问题解析】第三弹
  • 处理PostgreSQL中的磁盘I/O瓶颈
  • 从BERT到T5:为什么说T5是NLP的“大一统者”?
  • 一键成文,标准随行——文思助手智能写作助力政务提效
  • 常见的相机模型针孔/鱼眼(Pinhole,Mei,K
  • 从零构建一款开源在线客服系统:我的Go语言实战之旅
  • 对话A5图王:20年互联网老兵,从Web1.0到Web3.0,牛友会里藏着最真的创业情
  • 后端Long类型数据传给前端造成精度丢失
  • ReAct模式解读
  • Linux 编译 Android 版 QGroundControl 软件并运行到手机上
  • 东土正创AI交通服务器再获北京市批量应用订单
  • Agent Prompt工程:如何让智能体更“听话”?(实践指南)
  • 20250904 10:45_排查10.1.3.35新QMS系统RMAN备份失败问题(优化脚本里的环境配置,增加了check_oracle_env 函数)
  • openai-python v1.104.2版本发布:修复Web搜索工具类型别名问题
  • uni-app iOS 上架常见问题与解决方案,实战经验全解析
  • 2025数学建模国赛高教社杯C题思路代码文章助攻