协议篇之UART协议

news2024/12/23 10:20:35

协议篇之UART协议

  • 一、写在前面
  • 二、UART协议简介
  • 三、UART协议数据帧结构
    • 3.1 UART发送过程
    • 3.2 UART接收过程
  • 四、UART传输速率
  • 五、写在最后

一、写在前面

  由于设计需要,需要入门学习一下UART协议。本文主要学习UART协议的数据帧结构。

二、UART协议简介

  通用异步收发传输协议(Universal Asynchronous Receiver/Transmitter Protocol,UART)是一种在计算机、嵌入式系统和其他电子设备之间传输数据的通信协议。它使用串行全双工通信来传输数据,发送和接收设备之间的数据传输是异步的,也就是说,每个比特都是按照预定义的时间间隔传输的,而不是在固定的时钟周期内进行传输。
  UART协议通常使用RS-232或RS-485等物理层协议来连接发送和接收设备。由于UART协议是一种简单、易于实现的协议,因此它在很多应用中得到广泛应用,例如串口通信、控制台、模块通信等。在工业、汽车、医疗和家庭等领域,UART协议都有着广泛的应用。

三、UART协议数据帧结构

  UART协议中传输数据是串行传输的,其数据帧结构通常包含以下几个部分:

  • 起始位(Start Bit):一个低电平的比特,用于标识数据传输的开始;
  • 数据位(Data Bits):包含要传输的数据的比特数,通常是5、6、7或8个比特。数据可以是数字、字母、符号或二进制数据;
  • 奇偶校验位(Parity Bit):可选的比特,用于验证数据的正确性。奇偶校验位的值可以是奇校验或偶校验,它们根据数据位中1的个数确定;
  • 停止位(Stop Bit):一个时钟高电平的比特,用于标识数据传输的结束;

  值得注意的是,UART数据帧结构的长度和内容可以根据需要进行调整,但它们必须在发送和接收设备之间协商一致,以确保数据的正确传输。

  UART完整的数据帧结构如下图所示(这里不包含校验位)。
在这里插入图片描述

3.1 UART发送过程

  在UART数据发送的过程中,发送设备会先发送一个起始位START,然后发送数据位DATA(数据位的发送是先发送低位,后发送高位),然后发送可选的奇偶校验位PARITY(一般不设置奇偶校验位),最后发送一个停止位STOP。

3.2 UART接收过程

  UART数据接收的过程,与UART数据发送的过程是差不多的,接收设备会一直等待发送设备的一个低电平的起始位。当接收到起始位,接收设备将开始接收发送设备发送的数据位,并将多比特的数据存储在缓冲区中。然后如果使用了奇偶校验位,接收设备需要使用接收到的奇偶校验位来校验数据位,验证接收到的数据是否正确。然后等待停止位的到来,结束一帧数据的接收,并将接收到的数据从缓冲区中读出,等待下一帧数据的到来。

四、UART传输速率

  UART协议的数据传输速率有多种,其中我们常用的波特率有4种:9600bps、19200bps、38400bps和115200bps。

  • 9600bps:UART通信中最常见的传输速率之一,适用于大多数低速数据传输应用;
  • 19200bps:中等速度的传输速率,适用于一些需要快速传输数据的应用;
  • 38400bps:较快的传输速率,适用于需要更快数据传输速度的应用;
  • 115200bps:UART通信中更快的传输速率,适用于需要非常快速数据传输速度的应用;

  同样的,UART的传输速率必须保证发送设备与接收设备之间一致,否则发送设备无法传输正确的数据到接收设备。
  波特率表征串口传输的速率,比如串口波特率为9600bps,那么表示1秒可以传输9600bit,那么,每个比特传输的时间为:

1000000000 n s / 9600 = 104166 n s 1000000000ns/9600=104166ns 1000000000ns/9600=104166ns

  如果我们给系统约束的系统时钟频率为50MHz,则系统时钟周期为20ns,也就是说,每个比特传输的时钟周期个数为:

$104166/20=5208$

  也就是说,在系统时钟频率为50MHz的情况下,传输每个比特需要保持5208个时钟周期不变。

  在这里,需要补充一个重要概念:波特率Baud与比特率Bit Rate是两个不同的概念。波特率与比特率的关系也可换算成:

                          比特率 = 波特率 * 单个调制状态对应的二进制位数

  而在串口传输中,由于采用二进制传输,数值非0即1,所以在串口传输中,波特率与比特率的关系如下:

                                      比特率 = 波特率

五、写在最后

  在本文中,我们学习了UART数据帧结构以及UART协议中一些基本的概念。欢迎评论区友好交流批评指正!!!

在这里插入图片描述

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

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

相关文章

AutoGPT自主AI正在路上#趋势:自主人工智能、人机交互、终身学习

hi,大家好,我是shadow。今天分享一些我看到的人工智能正在发生的趋势,以及创新的机会。一些动态经过几个月的筹备,慢慢地我会开启2023的Mixlab故事,可查看公众号菜单栏里的2023专栏。本周六和下周六我将在上海的活动分…

Thingsboard开源物联网平台智慧农业实例快速部署教程(三)【源码部署及logo更换】

Thingsboard源码安装并更换logo 文章目录Thingsboard源码安装并更换logo1. 源码拉取2. 导入项目3. 项目编译4. 项目启动5. 修改logo6. 部署(rpm deb方式)1. 源码拉取 本教程按照3.4发行版本行进 git clone https://github.com/thingsboard/thingsboard…

深入拆解 Java 虚拟机-打卡|01 | Java代码是怎么运行的?

文章目录Java代码是怎么运行的?几个为什么为什么在虚拟机中运行?Java 虚拟机具体又是怎样运行 Java 代码的呢?Java虚拟机的运行效率怎么样?总结Java代码是怎么运行的? 来来来,运行个"Hello word !“告诉我是怎么…

免费的VR全景网站是什么?免费VR全景网站有什么用?

虚拟现实(VR)技术的应用日益广泛,尤其是在旅游、教育等领域。免费VR全景网站是一个新兴的平台,为用户提供了一个全新的探索未知世界的方式。 一、介绍免费VR全景网站的特点 1.全景视角 免费VR全景网站提供了360度全景视角&#…

Spring事务原理、隔离性

1、什么是事务 事务是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事物中进行的所有数据更改均会提交,成为数据库中的永久组成部分;如果事务执行时遇到错误且必须取消或回滚,则数据将…

Vue3页面内跳转锚点-scrollIntoView()

scrollIntoView() scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。 element.scrollIntoView(); // 等同于element.scrollIntoView(true)element.scrollIntoView(alignToTop); //布尔参…

数据结构-树与二叉树

文章目录5.1 树的基本概念5.1.1 树的定义5.1.2 基本术语5.1.3 树的性质5.2 二叉树的概念5.2.1 二叉树的定义及其主要特性5.2.2 二叉树的存储结构5.3 二叉树的遍历和线索二叉树5.3.3 二叉树的遍历5.3.2 线索二叉树5.4 树、森林5.4.1 树的存储结构5.4.2 树、森林、二叉树的转换5.…

Linux学习笔记——HTTP协议

文章目录前言HTTP协议的概念URLurlencode和urldecodeHTTP协议格式HTTP协议版本HTTP协议请求方法GET方法——获取资源POST方法——获取资源PUT方法——传输⽂件PUT方法——获得报文首部在这里插入图片描述DELETE方法——删除文件OPTIONS方法——询问支持的方法HTTP的状态码HTTP常…

050:cesium加载mapbox卫星地图、mapbox地形地图

第050个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载mapbox卫星地图、mapbox地形地图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共79行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

【CE】图形化作弊教程通关手册(超真实的游戏体验)

▒ 目录 ▒🛫 导读需求开发环境1️⃣ 第一关翻译操作总结2️⃣ 第二关(代码共享)翻译操作验证3️⃣ 第三关翻译操作总结🛬 文章小结📖 参考资料🛫 导读 需求 除了Tutorial-x86_64.exe教程外,CE…

算法,离你并不遥远

算法,离你并不遥远引子什么是算法?为什么算法很重要?什么时候开始学算法?狭隘的算法定义算法从现在学起,从现在用起算法永不过时引子 今天又是搬砖摸鱼胡混的一天,在问答闲逛,看到了一个问答&a…

Linux多线程-2

“我是我境遇里的起步者。” -- 里尔克《布里格手记》 在上一节Linux多线程当中,我们讲述了Linux中线程的概念以及线程的控制内容。这一篇博客承接上次内容,我们来对线程安全进行阐述。 目录 1.线程安全 1.1互斥的实现 1.1.1互斥锁实现互斥 1.1.2互…

启动 Ethereum(上海) 主网全节点

问题描述 采用最新的geth版本之后,按照之前的方法启动geth主网节点会出现如下问题: Post-merge network, but no beacon client seen. Please launch one to follow the chain!问题原因 The above message is emitted when Geth is run without a conse…

PyTorch深度学习实战 | 神经网络的优化难题

即使我们可以利用反向传播来进行优化,但是训练过程中仍然会出现一系列的问题,比如鞍点、病态条件、梯度消失和梯度爆炸,对此我们首先提出了小批量随机梯度下降,并且基于批量随机梯度下降的不稳定的特点,继续对其做出方…

SpringBoot集成Dubbo启用gRPC协议

文章目录前言项目结构代码示例父工程api moduleservice module注意事项区别本文记录下SpringBoot集成Dubbo启用gRPC协议,以及与原生 gRPC 在代码编写过程中的区别。 下面还有投票,帮忙投个票👍 前言 Dubbo 在 2.7.5 版本开始支持原生 gRPC 协…

【软件测试】浅了解什么是软件测试及开发测试模型

目录 1.什么是软件测试? 2.什么是需求? 3.什么是测试用例 4.什么是软件错误(bug)? 5.开发模型和测试模型 5.1软件的生命周期 5.2瀑布模型 5.3螺旋模型 5.4软件测试V模型 5.5软件测试w模型 6.软件测试的生命周…

Redis第二十九讲 Redis集群发布订阅模式以及Redis集群事务

Redis集群状态下的发布订阅 在Redis的几个基本数据结构介绍中,有讲过List数据结构,可以使用List的阻塞特性实现订阅消费,关于Redis的底层数据结构可以参考我的这篇博客:Redis第六讲 Redis之List底层数据结构实现 底层数据结构基本操作可以看我的这篇博客,Redis第十五讲 R…

【从零到Offer】- 泛型

泛型是个啥 ​ Java 泛型是 JDK 5 中引入的一个新特性,其提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 ​ 通过将数据类型参数化&#xf…

用opencv+playwright过滑动验证码

目录 梳理思路 编写代码 总结与提高 在本节,我们将使用opencv和playwright这两个库通过QQ空间的滑动验证码。 梳理思路 1. 使用playwright打开浏览器,访问qq空间登录页面。 2. 点击密码登录。 3. 输入账号密码并点击登录。 4. 出现滑动验证码图片后…

大型语言模型综述,非常详细,格局打开!A Survey of Large Language Models

大型语言模型综述,非常详细,格局打开!A Survey of Large Language Models 返回论文和资料目录 论文地址 项目地址 1.导读 讲得通俗易懂,且格局拉满!基本覆盖了自ChatGPT以来的AI比较火的事件,还多次提到…