【硬件操作入门】3--同步与异步、半双工传输、UART硬件介绍、bps速率计算

news2024/9/19 15:01:30

【硬件操作入门】3–同步与异步、半双工传输、UART硬件介绍、bps速率计算

文章目录

  • 【硬件操作入门】3--同步与异步、半双工传输、UART硬件介绍、bps速率计算
    • 一、同步与异步
      • 1.1. 概念
      • 1.2 同步信号
      • 1.3 异步信号
      • 1.4 举个例子:红外遥控器解码器(异步)
      • 1.5. 同步与异步的差别
    • 2、使用一线传输双向数据(半双工)
      • 2.1. 面临的问题
      • 2.2. 解决方法
      • 2.3. 双向传输示例
    • 3、UART硬件介绍
      • 3.1. 串口的硬件介绍
      • 3.2. 串口的参数
      • 3.3 怎么发送一字节数据,比如‘A‘?
      • 3.4 逻辑电平
      • 3.5. 串口电平
      • 3.6. 串口内部结构
    • 4、Bps速率计算

参考自:韦东山(100ask)

一、同步与异步

1.1. 概念

同步(synchronous)异步(asynchronous)
栗子朋友打电话说到我家吃饭,我在家里等他们朋友没有提前打招呼,突然就到我家来了
信号线时钟信号、数据信号数据信号
读取信号方式通过时钟信号的上升沿/下降沿来读取数据信号通过模块的数据格式判断起始位、数据位(0/1)、结束位

1.2 同步信号

在电子产品中,使用同步信号进行传输时,一般涉及两个信号:

  • 时钟信号(CLK):用来通知对方要读取数据了

    • 可以在时钟的下降沿、或者上升沿来读取数据线信号 (打电话,起约定作用);
    • 可以通过调节波特率(bps)来控制读取数据线信号的速率;
  • 数据信号(DATA):用来传输数据
    请添加图片描述

1.3 异步信号

使用异步信号传输数据时,A、B 双方遵守相同的约定(数据格式):

  • 起始信号:发送方可以通知接收方"注意了,我要开始传输数据了"
  • 数据信号:如何表示0/1? 在约好的时间段内判断电平状态
  • 结束信号:发送方可以通知接收方"注意了,我要传输的数据 传完了"

请添加图片描述

1.4 举个例子:红外遥控器解码器(异步)

A发送 ==> B接收,B会检测到信号到达的数据格式,来判断该信号是 起始信号、数据信号还是结束信号。每个模块的数据格式各有不同,可在手册上查找。

红外遥控器解码器 向单片机发出的数据格式如下:

  • 起始信号:解码器发出一个9ms的低电平、4.5ms的高电平,用来同时对方说"开始了"
    请添加图片描述

  • 数据信号

    • 逻辑1:0.56ms的低电平+1.69ms的高电平
    • 逻辑0:0.56ms的低电平+0.56ms的高电平

    请添加图片描述

  • 接收方、发送方都遵守这样的约定,就可以使用一条线传输数据

1.5. 同步与异步的差别

同步传输异步传输
信号线多:时钟信号、数据信号少:只需要数据信号
速率可变,提高时钟信号频率即可(bps)双方提前约定
抗干扰能力弱(不一定)

2、使用一线传输双向数据(半双工)

2.1. 面临的问题

在这里插入图片描述

两个设备之间,只使用一条数据线,能否传输双向的数据?

  • A发出高电平,B发出低电平
    • 电路可能被损坏
    • 电路上到底是高电平还是低电平?不能确定
  • 问题在于:有两个设备试图同时驱动电路

2.2. 解决方法

限制-同时驱动允许-同时驱动
双方无法约定时间,此方法不可行电路如下

在这里插入图片描述

  • DATA:集电极、OPEN电路、也叫开极电路(open collector)

沿箭头方向 电势 U发送-U地 > 截至电压,三极管导通,电子由地==>A,聚集后扩散到集电极。

真值表如下:

ABDATA
001(由上拉电阻决定)
010
100
110

从真值表和电路图我们可以知道:

  • A或B任意一个或均为高电平时,便可使对应三极管导通,DATA <== 0

  • 想让DATA输出高电平,双方都不驱动三极管 (SDA通过上拉电阻变为高电平)

  • 想让DATA输出低电平,就驱动三极管

这种电路实现了:

  • 双方设备即使同时想输出不同的电平:
    • 电路也不会被损坏
    • 电平也是确定的;

2.3. 双向传输示例

在这里插入图片描述

  • 初始状态:一开始,双方都不驱动三极管,DATA为高

  • 起始信号和回应:A想传输数据给B,发出开始信号、得到回应信号

    • A检测DATA线,高表示对方没有占用数据线
    • A驱动三极管,使得DATA为低,用来通知B:”我就要传输数据了“
    • A释放三极管,DATA变为高
    • B驱动三极管,使得DATA为低,用来通知A:好的,我准备好了(这是一个回应信号)
    • B释放三极管,DATA变为高
  • 传输:A发送数据给B,比如传输2位数据0、1

    • 双方都使用同一套数据表示方法,比如:数值由DATA电平决定(持续60us 有效)
    • 在第1个60us,A设置DATA为低;在同一时间,B读取DATA电平得到数据0
    • 在第2个60us,A设置DATA为高;在同一时间,B读取DATA电平得到数据1
  • 结束:A释放三极管,DATA变为高电平

  • 这时候,B也可以使用一样的方法给A传输数据


3、UART硬件介绍

3.1. 串口的硬件介绍

UART的全称是Universal Asynchronous Receiver and Transmitter,即 通用的异步发送和接收
串口在嵌入式中用途非常的广泛,主要的用途有:

  • 打印调试信息;
  • 外接各种模块:GPS、蓝牙;

串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线。
请添加图片描述

  • 通过TxD->RxD把ARM开发板要发送的信息发送给PC机。
  • 通过RxD->TxD线把PC机要发送的信息发送给ARM开发板。
  • 最下面的地线统一参考地。

3.2. 串口的参数

  • **波特率:**一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit)。
  • 起始位: 先发出一个逻辑”0”的信号,表示传输数据的开始。
  • **数据位:**可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输。
  • **校验位:**数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。(可靠性)
  • **停止位:**它是一个字符数据的结束标志。

在这里插入图片描述

3.3 怎么发送一字节数据,比如‘A‘?

‘A’的ASCII值是0x41,二进制就是01000001,怎样把这8位数据发送给PC机呢?

  • 双方约定好波特率(每一位占据的时间);

  • 规定传输协议

    • 原来是高电平,ARM拉低电平,保持1bit时间;
    • PC在低电平开始处计时;
    • ARM根据数据依次驱动TxD的电平,同时PC依次读取RxD引脚电平,获得数据;
    • PC在数据位的中间读取引脚状态;

在这里插入图片描述

3.4 逻辑电平

  • 代表信号1的引脚电平是人为规定的。

  • 如图是TTL/CMOS逻辑电平下,传输‘A’时的波形:
    在这里插入图片描述

  • 在xV至5V之间,就认为是逻辑1,在0V至yV之间就为逻辑0。

  • 如图是RS-232逻辑电平下,传输‘A’时的波形:

在这里插入图片描述

  • 在-12V至-3V之间,就认为是逻辑1,在+3V至+12V之间就为逻辑0。

  • RS-232的电平比TTL/CMOS高,能传输更远的距离,在工业上用得比较多。

市面上大多数ARM芯片都不止一个串口,一般使用串口0来调试,其它串口来外接模块。

3.5. 串口电平

  • ARM芯片上得串口都是TTL电平的,通过板子上或者外接的电平转换芯片,转成RS232接口,连接到电脑的RS232串口上,实现两者的数据传输。
    在这里插入图片描述

  • 如图

在这里插入图片描述

在这里插入图片描述

  • 现在的电脑越来越少有RS232串口的接口,当USB是几乎都有的。因此使用USB串口芯片将ARM芯片上的TTL电平转换成USB串口协议,即可通过USB与电脑数据传输。
    在这里插入图片描述

    上面的两种方式,对ARM芯片的编程操作都是一样的。

  • 对于arm开发板,串口0一般用来调试打印,其他串口可以外接各种模块

3.6. 串口内部结构

ARM芯片是如何发送/接收数据?
如图所示串口结构图:
在这里插入图片描述

  • UART串口线上,是逐位发送,串行通信,肯定有一个移位器(Transmit Shifter);
  • 移位器的数据,从发送缓冲寄存器(FIFO)中来;FIFO里的数据,从内存里面来;
  • arm ==> PC(发送)
    • 程序将数据从arm 内存中写入到FIFO,然后UART单元再从FIFO里面把数据放到移位器里面,逐位的发送出去(==> PC),在发送完成后产生中断提醒CPU传输完成。
  • PC ==> arm(接收)
    • 获取接收引脚的电平,逐位放进接收移位器,放入FIFO,程序把数据从FIFO中 写入arm内存;完成后产生中断提醒CPU传输完成;

4、Bps速率计算

  • 若Band rate:115200

  • 115200,8n1(Data、校验位、停止)

  • 每一位的时间:1/115200 s

  • 传输一Byte:需要10位(Start、Data、Stop) t = 10/115200 s

  • 一秒能传输11520Byte



欢迎大家一起交流讨论。

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

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

相关文章

一分钟学会系列-1电烙铁(焊台)

目录&#xff1a; ‌1、概述 2、电烙铁的种类 3、焊接步骤 4、电烙铁的保养 ‌1、概述 电烙铁‌是一种电子制作和电器维修中常用的工具&#xff0c;主要用于焊接元件及导线。使用电烙铁时&#xff0c;需要注意安全&#xff0c;并采取适当的预防措施&#xff0c;如使用风扇…

最新ssl证书在线申请源码+网站ICP备案查询源码

最新ssl证书在线申请源码网站ICP备案查询源码 经过精心调试和修复&#xff0c;我们对源码进行了优化&#xff0c;确保了证书价格的准确显示。现在&#xff0c;您可以放心使用我们的在线生成网站源码&#xff0c;完整地展示证书价格&#xff0c;并在生成证书时提供准确的价格计…

SQL-函数

1、字符串函数 # 字符函数 select concat(hello , mysql!); select lower(HELLO); select upper(hello); select lpad(01,5,-);# 左填充 select rpad(01,5,-);# 右填充 select trim( hello mysql ! );# 去除前后空格 select substring(hello mysql!,1,7);# 截取一部分字符前7…

【教学类-35-21】20240901 中2班描字帖(学号+姓名、虚拟姓名、杨任东竹石体 Regular)

背景需求&#xff1a; 8月底通知我成为中2班的班主任&#xff0c;为了快速识别幼儿的脸、姓名、学号&#xff0c;再次制作描字帖&#xff0c;并拍照。 最近做的一份字帖是中4班描字帖 【教学类-35-20】20240328 中4班描字帖&#xff08;学号姓名 A4竖版2份 横面&#xff09;…

--- 数据结构 链表 --- java

与顺序表相比&#xff0c;链表的最大优点就是不会存在空间的浪费 链表是通过将一个一个储存数据的节点&#xff08;对象&#xff09;连起来&#xff08;通过记录下他们的地址&#xff09;&#xff0c;这些数据在逻辑上就是线性的&#xff0c;但在物理上不是&#xff0c;因为地…

[Leetcode 216][Medium]组合总和 III--回溯(组合问题)

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 对于组合问题&#xff0c;首先要想到回溯法。那么可以根据回溯法模版进行设计。 void backtrace(元素){if(满足题目要求的条件){保存目前路径/状态/结果;return;}for循环,往目前状态相邻的所…

9-8 束搜索

贪心搜索 穷举搜索 束搜索 小结 序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小&#xff0c;但精度相对较低。 穷举搜索所选取序列的精度最高&#xff0c;但计算量最大。 束搜索通过灵活选择束宽&#xff0c;在正确率和计算代价之间进行权衡…

栈和队列——用队列实现栈

题目中给出&#xff0c;让我们应用两个队列实现栈&#xff0c;首先我们先来想一下&#xff0c;栈是先进后出&#xff0c;队列是先进先出。所以我们就需要应用两个队列来回导才能实现栈的特点。因为这道题是基于队列来实现的&#xff0c;所以在下方若有看不懂的函数名称可以去栈…

Java 入门指南:Java 并发编程 —— Synchronized 实现悲观锁(Pessimistic Locking)

悲观锁 悲观锁&#xff08;Pessimistic Locking&#xff09;是一种悲观的并发控制机制&#xff0c;它基于悲观的假设&#xff0c;即并发冲突会时常发生&#xff0c;因此在访问共享资源&#xff08;如数据库记录或共享变量&#xff09;之前&#xff0c;会先获取独占性的锁&…

数组结构第一周做题总结_基础练习

错误的原因是写了无参构造函数但是没有实现 id:8 A. 月份查询&#xff08;指针数组&#xff09; 题目描述 已知每个月份的英文单词如下&#xff0c;要求创建一个指针数组&#xff0c;数组中的每个指针指向一个月份的英文字符串&#xff0c;要求根据输入的月份数字输出相应的…

盘点java8 stream中隐藏的函数式接口

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 提到函数式接口&#xff0c;最常见的就是lambda表达式&#xff0c;IDEA也有智能的提示&#xff1a; 最后改成这样的就是最简洁的、IDEA希望的风格&#…

机器学习:基于机器学习的中文评论情感分析

通过机器学习技术对中文评论进行情感分析。我们使用了jieba进行中文分词&#xff0c;移除了停用词&#xff0c;并利用词袋模型&#xff08;Bag of Words&#xff09;和多项式朴素贝叶斯分类器对评论进行了情感分类。实验结果表明&#xff0c;该模型在测试集上达到了较高的准确率…

如何构建高效的中药材进存销管理系统?——运用Java SpringBoot和Vue实现库存实时监控,简化销售流程,提升药材管理效率。

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

前端宝典二十一:前端异步编程规范手写Promise、async、await

本文主要探讨前端异步编程的处理方式、处理场景&#xff0c;并且手写Promise的全家桶&#xff0c;介绍async、await方法使用 一、异步处理方式有&#xff1a; 1. 回调函数 function fetchDate(callback) {setTimeout(() > {const date new Date();callback(date);}, 100…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token&#xff08;刷新令牌&#xff09;3. Client Credentials&#xff08;客户端凭证模式&#xff09; 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…

嵌入式Linux C应用编程指南-高级I/O(速记版)

第十三章 高级I/O 13.1 非阻塞I/O 阻塞其实就是进入了休眠状态&#xff0c;交出了 CPU 控制权。比如 wait()、pause()、sleep()等函数都会进入阻塞。 阻塞式 I/O 顾名思义就是对文件的 I/O 操作&#xff08;读写操作&#xff09;是阻塞式的&#xff0c;非阻塞式 I/O 同理就是对…

SpringSecurity Oauth2 - 访问令牌续期

文章目录 1. 访问令牌的续期2. CustomUserDetailsService3. 配置 AuthorizationServerEndpointsConfigurer4. 测试项目 1. 访问令牌的续期 在Spring Security OAuth2中&#xff0c;访问令牌的续期通常是通过使用**刷新令牌&#xff08;Refresh Token&#xff09;**来实现的。当…

走进酒厂,探寻白酒酿造的奥秘

在华夏大地深处&#xff0c;隐藏着一座座充满神秘色彩的酒厂&#xff0c;它们是白酒酿造的地方&#xff0c;也是中华酒文化的摇篮。今天&#xff0c;就让我们一起走进这些酒厂&#xff0c;探寻白酒酿造的奥秘&#xff0c;感受豪迈白酒&#xff08;HOMANLISM&#xff09;的不同魅…

当网络适配器的Wireless出现感叹号

1.出现如下情况 链接&#xff1a; &#xff1a;一招搞定Intel(R) Wireless-AC 9560显示感叹号&#xff0c;无法打开wifi模块&#xff01;_intel(r)wireless-ac9560感叹号-CSDN博客z 重点&#xff1a; 原因是因为电脑静电的问题。

昇腾AI处理器的计算核心 - AI Core即DaVinci Core

昇腾AI处理器的计算核心 - AI Core即DaVinci Core flyfish 从一段代码的解释开始 template <typename T> class GlobalTensor { public:void setGlobalBuffer(T* buffer, uint32_t buffersize) {// 在这里实现设置全局缓冲区的逻辑} };语法的说明&#xff0c;主要用于…