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

UART串口数据分析

串口基础知识详细介绍:

该链接详细介绍了串并行、单双工、同异步、连接方式

https://blog.csdn.net/weixin_43386810/article/details/127156063

该文章将介绍串口数据的电平变化、波特率计算、脉宽计算以及数据传输量的计算。

捕获工具:逻辑分析仪(LA1010)

波特率:115200

数据位:8bit

校验位:无

停止位:1bit

1.空闲态: UART总线不在传输数据的时候,总线处于空闲状态,为高电平
2.起始信号 开始信号,串口通信的开始标志位
3.数据位 串口发送数据,先发低位,再发高位
4.奇/偶校验位:校验数据是否正确
        奇校验:数据位和校验位1的个数为奇数 假设数据位0x55(0101 0101),校验位1 假设数据位0x51(0101 0001),校验位0
        偶校验:数据位和校验位1的个数为偶数 假设数据位0x55(0101 0101),校验位0 假设数据位0x51(0101 0001),校验位1
5.停止信号:发送数据结束,回到高电平状态,校准时钟信号 一帧数据发送结束后,需要校准时钟信号,为什么需要校准时钟信号呢? 因为串口采用的是异步通信方式,双方都有自己独立的时钟源,虽然设置了双方的时钟源保持一致, 但是在发送数据时,每发送一帧数据时,都会产生误差,越往后,发送的数据,累计误差越大, 所以每发送一帧数据之后,需要校准时钟信

使用逻辑分析仪(LA1010)进行捕获和分析串口数据。

截取其中一帧数据进行分析,无数据传输时为高电平:

起始位 1bit(绿色)、高电平 --> 低电平。
数据位 8bit(白色)、高 / 低电平。
停止位 1bit(红色)、高 / 低电平位 --> 高电平。

下图为起始位、数据位、停止位的具体时间:

C2-C1起始位 8.64us。
A2-A1:数据位中的某一位 8.61us。
B2-B1停止位 8.62us。
可以看出起始位停止位都是1bit。

 

根据数据位时间8.61us可以计算出大概波特率为:

1000 000 us / 8.61us ≈ 116144 bit/s
计算得出1s时间可传输约116144 bit 数据,和设定的115200波特率基本符合,偏差为约0.99%。
通信设备(主机和从机)之间的波特率偏差可以影响通信的稳定性和可靠性。一般来说,在串口通信中,波特率的偏差在正负5%以内是可以正常通信的。
波特率的偏差指的是实际通信速率与预期通信速率之间的差异。例如,如果主机和从机之间的波特率设定为115200 bps,那么在实际通信中,波特率可以偏差在115200 bps的正负5%范围内,即109440 bps到120960 bps之间。
超出正负5%的波特率偏差可能导致接收到的数据出现误码,通信错误率增加,甚至无法正常通信。因此,为了确保通信的稳定性,通常在主机和从机之间的波特率设置时应尽量控制在正负5%以内的偏差范围内。

一帧数据包含起始位停止位数据位,一共10 bit 数据,即传输一字节数据需要:

8.61us * 10bit  = 86.1us

当我们传输一组33字节的数据,则需要:

33Byte * 86.1us  =  2841.3us  =  2.8413ms

通过标尺验证该计算方法准确性:

和计算的2.8413ms差别不大,计算正确。
http://www.lryc.cn/news/517834.html

相关文章:

  • NFS 组件容器化部署实战指南
  • 嵌入式软件C语言面试常见问题及答案解析(三)
  • nvm安装教程
  • 单片机-定时器中断
  • Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x
  • AI中的神经元与权重矩阵之间的关系;神经元连接角度看行和列的意义
  • mysql、postgresql、druid链接池踩坑记录
  • NRF24L01模块STM32通信-通信初始化
  • 高比例压缩:Linux 中的压缩命令与技巧
  • LabVIEW软件Bug的定义与修改
  • 基于Springboot + vue实现的办公用品管理系统
  • B+树的原理及实现
  • (四)结合代码初步理解帧缓存(Frame Buffer)概念
  • python注意事项:range遍历越索引现象、列表边遍历边修改出现的问题
  • 【C++】模板与泛型编程(三):重载与模板
  • JavaScript字符串拓展:实用方法与示例全解析
  • 基于html5实现音乐录音播放动画源码
  • 初学stm32 --- ADC模拟/数字转换器工作原理
  • 导航技术的分类
  • C++语言的函数实现
  • 每日一题-两个链表的第一个公共结点
  • 细说STM32F407单片机以轮询方式读写外部SRAM的方法
  • 【3】安装cyclictest和iperf
  • C语言将点分十进制的IP字符串转成4个整数
  • go语言学习 笔记 1(变量,语法,数据类型)
  • 无网络时自动切换备用网络环境
  • 电脑32位和64位之区别(Difference between 32-Bit and 64 Bit Computers)
  • 系统思考—结构影响行为
  • 【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>
  • 2025.1.8(c++对c语言的扩充——堆区空间,引用,函数)