这次我们来介绍一下UART的基本时序,了解一下底层信号怎么传送的。方便以后使用Verilog HDL实现收发逻辑。

9600bit/s 的意思是每秒发送9600bit,因此可以理解为将1s分解为9600等分,对于发送端来说,每bit电平的维持时间是1/9600s,对于接收端来说,在1/9600s内要完成数据的采样。因此对于不同时间源的设备,如何实现这个发送“节拍”以及设置接收采样频率非常重要,即主从设备对各自主时钟(SCLK)的分频非常重要。

UART的基本时序:

发送端

接收端

UART的每一帧数据一般有10位分别为初始位,8位数据和结束位。对于发送端,将待发送的数据存入发送寄存器,产生起始位即将电平拉低,随后每1/9600s将寄存器中的数据一位一位的发送出去。当数据发送完毕后,将电平拉高等待下一次的发送。对于接收端来说首先要检测是否有数据来,采用下降沿检测的方式来检测起始位。对于数据位的采样,选取数据位的中点位置的电平作为采样数据,中点位置的电平较为稳定。设采样间隔为N,当采样8N后,就可以停止采样了。

采样时钟的如何获取,其实是通过设备的主时钟分频得到的。取16x或者64x倍的波特率时钟作为采用时钟是实践总结出来的,主要是为了无失真的获取数据,同时也为了方便编程。下面举个例子:

主时钟为SCLK = 40Mhz,波特率为9600,则采用频率fs = 16*9600 = 153600。Tsclk = 25ns,Ts = 1/fs = 6510.4167ns,N = Ts / Tsclk = 260.4167。也就是说在每个Ts下有260个Tsclk,以上升沿作为计数标准的话,数130下就为一个Ts,即每数130个Ts的上升沿,采样时钟的电平就翻转一次。采用这种方式就可以得到采样时钟了。对于采样间隔N的计算,每个bit电平的维持时间是Tbit = 16 * Ts = 104166.667ns = 16Ts。bit0采样的是下降沿检测,等待16Ts后,进入bit1的电平时间,在中点采样。因此第一个采样点的时间是(16+8)Ts  = 24Ts,以此类推后面的采样点分别为:40,56,72,88,104,120,136,152。

对于发送端,只需要根据波特率对SCLK进行不同的分频就好了。现总结分频如下:

波特率 T 计数上限 FPGA50Mhz频率下的计数值;Tsclk =1 / 50Mhz = 20ns
9600 104166.667 T/Tsclk 5208-1
19200 52083.333 T/Tsclk 2604-1
38400 26041.667 T/Tsclk 1302-1

57600

17361.111 T/Tsclk 868-1

115200

8680.556 T/Tsclk

434-1

综上所述,对于整个串口而言比较重要的的部分是:波特率发生器、采样时钟发生器、发送模块、接收模块、标志寄存器和中断模块。

对于STM32中的USART,组成部分如下图所示:

UART学习之路(二)基本时序介绍的更多相关文章

  1. UART学习之路(四)VerilogHDL实现的简单UART,VIVADO下完成仿真

    用VerilogHDL实现UART并完成仿真就算是对UART整个技术有了全面的理解,同时也算是Verilog入门了.整个UART分为3部分完成,发送模块(Transmitter),接收模块(Recei ...

  2. UART学习之路(一)基本概念

    第一篇博客,首先记录一下这一个多星期来的学习内容. UART学习之路第一篇,是UART的基本概念介绍.后续会用STM32F103的串口与PC机通信.最后使用Verilog HDL写出串口发送模块和接收 ...

  3. springboot 学习之路 2(注解介绍)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  4. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  5. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  6. Android开发学习之路-二维码学习

    这个月装逼有点少了,为什么呢,因为去考软件射鸡师了,快到儿童节了,赶紧写篇博纪念一下逝去的青春,唔,请忽略这句话. 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这 ...

  7. Python学习之路二

    今天主要学习了列表,python的列表真的事太强大了,由于内容比较多,今天就先简单的介绍一下新学的几个成员函数吧. 首先我们要了解list是一种序列类型,其构造方式有四种形式: (1)空列表 [] ( ...

  8. springboot 学习之路 18(webflux详细介绍(2))

    webflux的详细介绍 引言:上一节已经简单介绍webflux的一些基本概念,本章继续学习webflux的原理和实战方面的东西: Spring WebFlux架构: note:注意理解上面这张图.下 ...

  9. python学习之路 一 :编程语言介绍

    本节重点 理解编程语言是什么? 大体明白,编程语言是如何与计算机底层通信的编程语言有哪些分类? 分别列举主流编程语言的特点 什么是编程,为什么要编程 一.什么是编程语言?为什么要编程? 编程:是个动词 ...

随机推荐

  1. 【Leetcode】【Medium】Subsets

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  2. openvpn(上)

    VPN概述:(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公网中建立专用的数据通信网络的技术,可以为企业之间或者个人与企业之间提供安全的数据传输隧道 ...

  3. IOS ASI (第三方请求)

    什么是ASI全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大基于底层的CFNetwork框架,运行效率很高可惜作者早已停止更新,有一些潜在的BUG无人去解决很多公司的旧项目里面 ...

  4. BZOJ4887:[TJOI2017]可乐(矩阵乘法)

    Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...

  5. select、poll和epoll比较

    select select能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024,这也是select最大的缺点,因为现在的服务器并发量远远不止1024.即使能重新编译内核改变FD_SETS ...

  6. Semi-Supervised Dimensionality Reduction

    今天阅读了一篇关于半监督降维的论文,做个总结.这篇论文的全名叫<Semi-Supervised Dimensionality Reduction>(2006),是南大周志华老师的大作. 本 ...

  7. 前端使用ajax传到后台的实体类的多个属性,直接用Map接收

    前端ajax传过来的数据按照以上方法接收Map中 var ip = $("#ip").val(); var port = $("#port").val(); v ...

  8. async--ajax异步传输

    如图:轨迹点组编号依赖所属路口的设置. 所以ajax是异步执行,获取到所属路口还没执行完,就已经执行到根据所述路口获取轨迹点组编号,所以获取不到轨迹点组编号. async:false改成同步执行.就没 ...

  9. mongo删除、添加分片

    MongoDB 分片的原理.搭建.应用   一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处 ...

  10. Grunt中批量无损压缩图片插件--grunt-sprite

    这是什么 这是一个帮助前端开发工程师将css代码中的切片合并成雪碧图的工具,它的主要功能是: 使用二叉树排列算法,对css文件进行处理,收集切片序列,生成雪碧图 在原css代码中为切片添加backgr ...