嵌入式面试-回答UART

说明:

        此文章是在阅读了一些列面试相关资料之后对于一些常见问题的整理,主要针对的是嵌入式软件面试中涉及到的问答,努力精准的抓住重点进行描述。若有不足非常欢迎指出,感谢!在总结过程中有些答案没标记参考来源,若有参考到您的回答请联系我,我会将其补上,最后希望各位都能够找到理想的工作!

通用异步收发传输器(UART)特点(为什么使用UART):

  • 只需要两根线(发送线TX和接收线RX)​ 
  • 硬件简单,成本低,不需要额外的硬件支持
  • 用户可以根据需要自定义波特率(后面会涉及波特率原理和计算)和数据格式
  • UART通信不使用时钟信号来同步,(因此主设备和从设备必须在开始通信前就协商好波特率(数据传输速率),若发送设备和接收设备没有确定好互相之间的波特率,就好似跑步频率不一致的运动员,难以传递交接棒)。

UART的TX线和RX线:

为什么使用两条线来处理:

        1.单向信号传输:UART通信是基于单向信号传输的。

        2.简化错误处理和信号完整性:分开的发送和接收线路有助于简化硬件设计和信号处理。

        3.减少干扰:使用单独的线路发送和接收数据有助于减少电磁干扰和信号串扰,提高通信的可靠性。

TX和RX的协同工作方式(即UART工作原理)

  • 初始化:通信开始前,两个设备的UART接口需要被设置为相同的波特率、数据位数、停止位和校验位,以确保双方能正确解读传输的数据。

  • 发送数据:当发送设备准备发送数据时,其UART控制器将数据放置在内部的发送缓冲区中,然后按预设的格式逐位发送出去。这包括在TX线上生成起始位、数据位、校验位(如果使用)和停止位。

  • 接收数据:接收设备的UART控制器监控其RX线,检测到起始位后开始按设定的波特率接收数据位。接收的数据存入内部的接收缓冲区,等待进一步处理

  • 错误检测和校正:如果开启了校验位,接收设备还会进行错误检测,并在检测到错误时进行相应的处理,可能包括请求重发等。

UART 数据帧结构

UART的数据传输是通过数据帧来完成的,一个典型的UART数据帧包括:

  • 起始位:数据帧的开始,通常是一个逻辑“0”。
  • 数据位:通常是5到9位,承载实际的数据内容。
  • 校验位(可选):用于错误检测。
  • 停止位:标志数据帧的结束,可以是一个或两个逻辑“1”。

波特率

波特率的原理:

        波特率是衡量数据传输速率的一个重要参数,它表示每秒钟可以传输的符号数。在串行通信中,这些符号通常是数据位,包括起始位、数据位、可选的校验位以及停止位。

波特率的计算:

        波特率定义了每秒中传输的符号数。在UART通信中,波特率的计算公式为:

        其中时钟频率由微控制器提供,分频因数是UART设置中的一个参数。选择合适的波特率需要确保通信双方都设置相同的值以避免数据错误。

  • 以115200,8n1为例:波特率115200,数据位:8,n并表示校验位位(n表示没有),1表示停止位

        那么每传输1bit所需要的时间为:t = 1/115200

        传输一个byte需要10位(start,data(8bit),stop)t = 10 /115200

        1秒钟传输:1/t = 11520个字节

电平标准:

为什么有时候我们还会对串口转换成RS232、RS485、USB呢?

  • TTL电平:逻辑“1”通常为高电平(5V或3.3V),逻辑“0”为低电平(0V)。广泛应用于微控制器和数字电路中,不适合长距离传输。
  • RS232:相对于TTL电平,RS232使用更高的电压范围(通常+/-3V至+/-25V)。逻辑“1”(-3V到-25V)和逻辑“0”(+3V到+25V)的定义与TTL相反。它适用于长距离通信。
  • USB(通用串行总线):用于计算机和外围设备之间的通信,支持更高的数据传输速率和电源传输。
  • RS485:使用差分信号传输,可以实现远距离和高可靠性通信,常用于工业环境。

        这些标准(TTL, RS232, USB, RS485)在应用和物理层面有所不同,但都是实现设备间数据传输的有效方式,选择合适的标准取决于具体应用需求,如距离、速率、成本和电气环境的要求。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密码学 | 数字证书:应用

🥑原文:数字签名和数字证书的原理解读 - 知乎 🥑前文:密码学 | 数字签名 数字证书 - CSDN 🥑提示:把客户端想成 Alice,服务器端想成 Bob 即可。客户端实际上指的是客户端浏览器。 下面&#…

修改Ubuntu22.04系统图标

在Ubuntu 22.04中更改开机时显示的Ubuntu图标需要修改的设置。 主要思路是用自己图片替换系统图片,保持系统图片同名,同格式。 以下是一般的步骤: 修改启动界面的logo: sudo cp 新logo.png /usr/share/plymouth/themes/spinn…

MRHFR:基于不同阅读习惯的多模态虚假新闻检测

一、概述 在多模态领域中,主要存在两个核心问题:一致性对齐问题和交互融合问题。一致性对齐问题主要指不同模态的信息匹配,例如实体对齐、语义对齐,例子有:文本中的“男人”与图片中男子指代一个人。交互融合问题指不同…

Js-JavaScript-三种弹出提示框-alert-confirm-prompt-ai插件

文章目录 1.alert-提示框2.confirm-确认框3.prompt-输入框4.总结 1.alert-提示框 alert (message: string , title: string , errorIcon: Boolean ) Core JavaScript Classes Displays an alert box message: Data Type: string The text to display title (optional): Data Ty…

VSCode插件开发学习

一、环境准备 0、参考文档:VS Code插件创作中文开发文档 1、大于18版本的nodejs 2、安装Yeoman和VS Code Extension Generator: npm install -g yo generator-code 3、生成脚手架 yo code 选择内容: ? What type of extension do yo…

docker pull速度慢解决办法

在使用 Docker 时遇到拉取镜像速度慢的问题,可以使用国内的镜像源可以提高下载速度。 使用阿里镜像加速器 Docker 配置文件位于 /etc/docker/daemon.json。如果文件不存在,可以手动创建它。将以下内容添加到配置文件中: 整体复制执行命令&…

旋转数组的最小数字

旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com) 描述: 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,…

如何封装Vue组件并上传到npm

前言 环境准备 1.注册npm账号:npm | Home (npmjs.com) 2.保证当前环境安装了vue、webpack、node,以下工作将在该环境下进行(没有的小伙伴自行百度安装哈~) 3.一下用到的环境版本 webpack:v5.1.4node:v…

划分数据集,训练自己的数据集。

数据集划分是跟着up主魔傀面具做的,很好用很方便,推荐给大家,顺便做个例子讲一下怎么使用 把自己的图片数据集放在dataset/VOCdevkit/JPEGImages里面,看看自己的数据集格式,是JPEG还是png格式的还是其他。 然后就是把…

Oracle中的视图

1- 什么是视图 视图是一个虚拟表 视图是由sql查询语句产生的 视图真实存在 但是不存储数据 视图中的数据 只是对 基表(源数据表) 中的数据的引用 总的来说 视图可以简化数据 用户,订单,物流 三个表进行关联 吧很复杂的sql查询语句存储成一个视图 …

狗都不学系列——虚拟机的基本使用

前言 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 简单来讲就是我们可以通过虚拟机来安装各种不同的操作系统进行体验。 这次主…

【Flutter】多语言方案一:flutter_localizations 与 GetX 配合版

介绍 多语言方案:flutter_localizations 与 GetX 配合版,好处:命令行生成多语言字符串的引用常量类,缺点:切换语言以后,主界面需要手动触发setState,重绘将最新的Locale数据设置给GetMaterialA…