zoukankan      html  css  js  c++  java
  • 波特率

    ✍ 什么是波特率,波特率怎么计算➹

    概述:
      ☆简而言之,串口传输的波特率即为每秒钟传输二进制的位数。
      ☆脱离枯燥乏味的文字描述,我们用波形和数字来看看波特率是什么吧☟。
      ☆说明:系统时钟50M(为串口提供时钟的时钟频率),波特率115200。
      
    基础知识:

    系统时钟(为串口提供时钟的时钟频率)-50M 时钟周期 1 50 ∗ 1 0 6 {{ m{1}} over {{ m{50*1}}{{ m{0}}^{ m{6}}}}} 501061
    1个时钟周期可以计数1次 50M时钟1s计数50 000 000个
    系统时钟-50M 计1个数需要 1 50 ∗ 1 0 6 {{ m{1}} over {{ m{50*1}}{{ m{0}}^{ m{6}}}}} 501061s
    波特率-115200 1s传输二进制的位数115200bit
    波特率-115200 传输1bit需要 1/115200s=8.68us
    50M系统时钟------波特率为115200 传输1bit需要计数 ( 50 ∗ 1 0 6 / 115200 ) = 434 ({ m{50*1}}{{ m{0}}^{ m{6}}}/{ m{115200}}) = 434 (50106/115200)=434

    以上重点是推导出50M系统时钟—波特率为115200条件下传输1bit需要计数个数为434。

    串口传输格式
    ●我们通常用的串口传输格式为:1bit起始位+8bit数据位+1bit停止位(无奇偶校验位),如下图所示:
    在这里插入图片描述
    所以传输1Byte数据串口需要传输10bit数据。上面计算得传输1Bit需要的时间为8.68us,则传输1Byte需要时间为8.68*10=86.8us。

    波特率
      由基础知识知50M系统时钟—波特率为115200条件下传输1bit需要计数个数为434。那么1Byte(串口传输格式为:1bit起始位+8bit数据位+1bit停止位)是不是循环计数10次434就可以传输完毕。
    直接上图:图中描述了1Byte数据传输的示意图,重点都在图里!!!。
    在这里插入图片描述
    ✍什么时候去采样串口线上的数据呢?
      ★观察上图,Buad_Flag信号(通道2)表示了传输1Bit传输的间隔,每遇到1个Buad_Flag=1的信号,数据线上切换1次数据,所以两个Buad_Flag=1之间的数据是稳定的数据,根据抽样定理是不是应该在两个Buad_Flag=1信号的中间去采样数据呢,其实就是在1bit数据持续期间的中间点采样,才能得到最稳定的数据。见下图,重点都在图里!!!
      在这里插入图片描述
      ★图中序号①-⑩分别为10bit数据的采样点,采样点处提取数据为1010_1010(0xAA)。

    ★★★至此,从下往上再看一遍,就明白了我们所熟悉的波特率(115200/9600/…)怎么来的。
    ☞然后再想想为什么51单片机会有一个定时器专门服务于串口。
    ☞再想想为什么9600波特率和115200波特率不能对接了,原理很简单我这边2秒发一次数据,你那边1秒接一次数据,怎么能成功接收呢。

    收发波特率一致:
    在这里插入图片描述
    收发波特率不一致,导致RX端不能正常接收:
    在这里插入图片描述

    ★★★如有错误,欢迎指导。

    https://blog.csdn.net/qq_40147893/article/details/106539081

  • 相关阅读:
    Android源码之Gallery专题研究(2)
    Android源码之Gallery专题研究(1)
    Android UI 优化——使用HierarchyViewer工具
    如何打开USB OTG功能:
    JavaSE入门学习5:Java基础语法之keyword,标识符,凝视,常量和变量
    Multiply Strings
    android动态控制组件的位置、大小和新的动画
    linux系统编程:线程同步-信号量(semaphore)
    imx6q GPIO功能的用法
    NoSQL数据库概览及其与SQL语法的比較
  • 原文地址:https://www.cnblogs.com/zengpeng/p/14890006.html
Copyright © 2011-2022 走看看