首页 > 其他分享 >UART——通用异步收发传输器

UART——通用异步收发传输器

时间:2023-07-17 10:01:18浏览次数:28  
标签:采样 异步 UART 传输器 数据位 模块 设计 波特率 时钟

特点:发送—并转串;接收—串转并;全双工传输

1、发送:

常见设置包含:起始位、数据位、波特率、奇偶校验类型、停止位、空闲位

(1)起始位

  先发一个逻辑0,表示传输字符开始,依靠检测起始位来实现发送与接收方的时间同步。

(2)数据位

  单个UART数据传输的数据位数,可以是5、6、7或8(默认)

(3)波特率

  用途:确定每秒钟通信的数据比特个数

举例:“使用波特率为115200bps ,则我们需要产生一个频率为115200Hz的时钟信号”

步骤:①计算波特率周期Tb;

    1秒钟为1000_000_000ns,则周期Tb = 1000_000_000/115200 = 8680.6ns,即115200信号的一个周期为8680.6ns。

    设定定时器定时时间为8680.6ns,每当定时时间到,产生一个系统时钟周期长度的高脉冲信号即可

   ②计算波特率分频计数值;

    系统时钟频率fclk为50MHz,即系统时钟周期Tclk为20ns

    波特率分频计数值 = Tb/Tclk = 8680/20

    即,只需要计数8680/20个系统时钟,就可获得8680ns 的定时

   ③计算系统时钟计数值;

    = 波特率分频计数值 – 1 = Tb/Tclk – 1 = 8680/20 – 1 = 434 -1

(4)校验位

    用途:验证数据的正确性;

    原理:①奇校验(Odd)——所有传送数位(数据位+校验位)中“1”的个数为奇数;

       ②偶校验(Even)——所有传送数位(数据位+校验位)中“1”的个数为偶数;

(5)停止位

用途:标志一次数据传输完成;可选择1(默认)、1.5或2位。

(6)空闲位

       处于逻辑“1”状态,表示没有数据传输

2.接收

使用改进型串口接收方式

原理:将每一个bit平均分成16小段,对中间浅灰色段,进行多次采样(过采样),并求高低电平发生的概率,取出现次数最多的电平为采样结果。

包含:异步信号同步设计、边沿检测设计、采样时钟生成模块设计、采样数据接受模块设计、数据状态判断模块设计

(1)异步信号同步设计——使用两级触发器(打两拍)

           理由:接收的信号如不进行处理,直接将其输入使用,容易出现时许为例导致亚稳态——单bit信号跨时钟域的处理;

(2)边沿检测设计

           理由:起始位由空闲的高变低

(3)采样时钟生成模块设计

           基于过采样方式——实际采样频率为波特率的16倍

(4)采样数据接受模块设计

   步骤:以图6-3为例,位于中间的采样时间段对应的bps_cnt值分别为6、7、8、9、10、11。

      以16作为循环,后一位数据采样时间段的bps_cns值为22、23、24、25、26、27。以此类推,得到其他位的采样时间段对应bps_cnt值。

(5)数据状态判断模块设计

   步骤:基于原理,使用数值比较器进行判断,或直接令其等于当前位的最高位数据。

标签:采样,异步,UART,传输器,数据位,模块,设计,波特率,时钟
From: https://www.cnblogs.com/suxiaoge/p/17559140.html

相关文章

  • useEffect、异步请求、定时器使用useState闭包问题
    useEffect闭包问题:问题:useEffect使用useState会使调用的所有方法内部的state值为useEffect周期的值,即使在这个过程中useState的值变化也不能影响调用方法内获取到原始值解决方式:使用useCallabck可以避免由此产生的闭包问题异步请求、定时器等js闭包问题:问题:异步请求和定时器......
  • 【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证
    测试工作中常用到的测试桩mock能力在我们的测试工作过程中,可能会遇到多个项目并行开发的时候,后端服务还没有开发完成,或者我们需要压测某个服务,这个服务测在试环境的依赖组件(如MQ)无法支撑我们svr的并发访问的场景,这个时候我们可能就需要手写一个服务,来替代测试环境的这些依赖组......
  • 【一】Ajax与异步编程之web服务端
    【一】Ajax与异步编程之web服务端Ajax属于客户端网络技术,属于js范畴。基于aiohttp模Ajax与异步编程之web服务端块构建一个提供http协议的web服务器,并准备数据给客户端请求使用。pipinstallaiohttppipinstallaiohttp_corsserver.pyfromaiohttpimportwebimporta......
  • 【三】Ajax与异步编程之数据传输格式ajax
    【三】Ajax与异步编程之数据传输格式ajax【1】什么是ajaxajax,一般中文称之为:"阿贾克斯",是英文“AsyncJavascriptAndXml”的简写译作:异步js和xml传输数据技术。ajax的作用:ajax可以让js代替浏览器向服务端程序发送http请求,与服务端进行数据通信,在用户不知道的情况下......
  • 【五】Ajax与异步编程之异步编程
    【五】Ajax与异步编程之异步编程【1】异步编程js默认是单线程运行的,这意味着两段代码不能同时运行,所以在同步代码执行过程中,代码是逐行地运行的。简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。关于在javascript中异步编程的方式......
  • 【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案
    【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案【1】同源策略同源策略(ameoriginpolicy),是浏览器为了保护用户信息在服务端的安全的而设置一种安全机制。所谓的同源就是指代通信的两个地址(例如服务端接口地址与浏览器客户端页面地址)之间比较,是否协议、域名(IP)和......
  • 为什么unity里的异步加载要配合协程使用
      在Unity中,异步加载资源时需要配合协程使用的原因是为了避免阻塞主线程。在游戏开发中,资源加载通常是一个耗时的操作,如果在主线程中进行同步加载,会导致游戏卡顿或者无响应,影响用户体验。使用协程可以将资源加载操作放在后台线程中进行,然后在加载完成后再将结果返回到主线程......
  • vue前端异步请求,数据拿的太慢,页面无法渲染
    vue中发送请求,拿到数据后打开弹窗进行页面渲染,问题:请求速度太慢,弹窗没有数据,解决:使用async和await进行同步请求 async用在方法上,await放在请求前,表示阻塞 ......
  • net core-异步,同步理解
    并发: 一个车间只有一台机器,所有的工人都需要完成相同的工作,谁先抢到这个机器谁先工作,其余人需要等待。并行: 一个车间有4台机器,有4个工人,四个工人分别使用四台机器,同时执行任务,不用等待其它工人任务执行完毕。单线程: 当有三件事要处理,乙需要在甲之后处理,同时丙需要在乙之......
  • Python异步编程
    协程不是计算机提供,程序员人为创造也称为微线程,是一种上下文切换技术(通过一个线程实现代码块互相切换执行)普通代码的执行流程自上而下顺序执行deffun1():print(1)#...print(2)deffun2():print(3)#...print(4)fun1()fun2()-结......