uart接口是什么_各种接口的详细介绍

uart接口是什么_各种接口的详细介绍我面试的时候一般喜欢问应聘者一个问题:UART与RS232/RS485的区别与联系?很多人对于这个问题答得都不是很好。还有些人压根就没有想过这个问题,一直认为他们是同一个东西,就是咱们俗称的串口。我刚入嵌入式的大门时,对这个问题也困惑过很久,后来终于弄明白了。跟大家一起分享一下吧。简单来说,区别在于UART是一种接口,而RS232/RS485是一种总线。UART这个接口,后面可以接TTL电平,这就是我们俗称的普通的串口。而UART如果接了RS232/RS485的转换芯片,那么后面的总线上..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

我面试的时候一般喜欢问应聘者一个问题:UART与RS232/RS485的区别与联系?很多人对于这个问题答得都不是很好。还有些人压根就没有想过这个问题,一直认为他们是同一个东西,就是咱们俗称的串口。

 

我刚入嵌入式的大门时,对这个问题也困惑过很久,后来终于弄明白了。跟大家一起分享一下吧。

 

简单来说,区别在于UART是一种接口,而RS232/RS485是一种总线。UART这个接口,后面可以接TTL电平,这就是我们俗称的普通的串口。而UART如果接了RS232/RS485的转换芯片,那么后面的总线上就是按照RS232/RS485规则来传输数据。RS232/RS485总线的具体规则我们后续再讨论,本篇主要详解TTL下的情况。UART接TTL电平时,+5V等价于逻辑“1”,0V等价于逻辑“0”。

如下例子主要说明一下UART接TTL电平这种方式是怎么传输二进制数据的。这是我在项目中的一个例子,用STM32F429的Uart4口采集TOF模块测量得到的距离信息。

UART的Rx连接测距模块TOF的Tx。TOF向UART发送了0x32 0x33 0x6d 0x6d 0x0a 五个字节,对应的ASCII码是23mm,表示测到的距离。

 

0x32 0x33 0x6d 0x6d 0x0a 对应的示波器上测到波形如下所示,我们来一起分析一下。

 

 uart接口是什么_各种接口的详细介绍

 

 

首先,UART的波特率,配置的是9600。对于串口来说,波特率=比特率,所以串口现在比特率为9600,所以每一个bit需要的时间为100us。所以示波器抓的波形对应的比特流是:

00100110010110011001010110110101011011010010100001

 

对于Uart,我配置的代码如下:

 

USART_InitStructure.USART_BaudRate = UART4_BAUD; //9600

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No ;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(UART4, &USART_InitStructure);

 

所以Uart的数据位宽为8bit,再加上起始位0,结束为1.所以比特流分割为如下:

0  0100 1100  1

0  1100 1100  1

0  1011 0110  1

0  1011 0110  1

0  0101 0000  1

考虑硬件总线上的数据时序,CPU接收到后的比特序列颠倒:  

0100 1100 颠倒为  0011 0010  即为0x32

1100 1100 颠倒为  0011 0011  即为0x33

1011 0110 颠倒为  0110 1101  即为0x6d

1011 0110 颠倒为  0110 1101  即为0x6d

0101 0000 颠倒为  0000 1010  即为0x0a

 

完美! 发送的0x32 0x33 0x6d 0x6d 0x0a 字节与示波器上测量到的高低电平信号完美相符。

作为嵌入式软件工程师,对软硬件的接口分析到这种程度,一般情况下,就够用了。

—————————–上善若水,大智若愚———————————–

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193900.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月16日 下午1:43
下一篇 2025年11月16日 下午2:15


相关推荐

  • 几个免费的国外php空间「建议收藏」

    几个免费的国外php空间「建议收藏」2019独角兽企业重金招聘Python工程师标准>>>…

    2026年2月11日
    4
  • javaweb实现即时消息推送功能

    javaweb实现即时消息推送功能在浏览某些网页的时候,例如 WebQQ、京东在线客服服务、CSDN私信消息等类似的情况下,我们可以在网页上进行在线聊天,或者即时消息的收取与回复,可见,这种功能的需求由来已久,并且应用广泛。网上关于这方面的文章也能搜到一大堆,不过基本上都是理论,真正能够运行的代码很少,原理性的东西我就不当搬运工了,本文主要是贴示例代码,最多在代码中穿插一点便于理解,本文主要的示例代码基于 javascri

    2022年5月5日
    619
  • CentOS7上ElasticSearch安装填坑记「建议收藏」

    CentOS7上ElasticSearch安装填坑记

    2022年3月13日
    37
  • 运行JavaScript代码片段的19种工具

    运行JavaScript代码片段的19种工具前端日常开发中 我们使用喜爱的 IDE 调试 JavaScript 代码 比如我喜欢的代码编辑器有两个 SublimeText3 和 VSCode 前几年还使用过 Atom 偶尔我们会遇到临时需要快速分享给同事或者朋友一段代码的场景 那么在线的 JavaScript 运行环境的重要性就体现出来了 为了解决这样的问题 业界涌现出了很多很优秀的在线编辑器 比如 JSBin JSFiddle CodePen CodeSandbox 等 接触前端这些年也陆陆续续发现了一些不错的其他选择 再看下浏

    2026年3月16日
    1
  • C语言链表操作详解

    C语言链表操作详解为什么要使用链表在未学习链表时 我们常用的存储数据的方式无非就是数组 使用数组存储数据的好处就是查询快 但是它的弊端也很明显 使用前需声明数组的长度 一旦声明长度就不能更改 插入和删除操作需要移动大量的数组元素 效率慢 只能存储一种类型的数据 而链表则可以实现以上这些数组所不具备的功能 此时引入了结构体来实现创建链表的操作 链表的特点 n 个节点离散分配 每一个节

    2026年3月19日
    1
  • 入门指南 ​

    入门指南 ​

    2026年3月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号