这次我们来介绍一下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. eclipse中对Hadoop项目进行mvn clean install时报错的处理

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) ...

  2. c++11简单的线程

    线程的管理 启动线程 为了让编译器识别 std::thread 类,这个简单的例子也要包含 <thread> 头文件. 如同大多数C++标准库一样 线程在std::thread对象创建(为 ...

  3. css如何制作八边形

    随着技术的发展,css也越发强大,css可以制作很多有趣的图形,让我们一起来看一下如何使用css制作一个八边形吧.   方法/步骤     1新建一个html文件.如图:   在html文件上创建一个 ...

  4. ZT 七大寡头

    网易评论人才辈出啊!!!看下面   http://comment.news.163.com/news_guoji2_bbs/9GRIIJA90001121M.html 关注 关注他的微博yftyfm ...

  5. SharpZipLib压缩解压

    一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icshar ...

  6. IntelliJ IDEA 2017.3-2018.1 全系列汉化包

    JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 IntelliJ IDEA 2017.3-20 ...

  7. Yii自定义验证规则

    简单的方法:在 model 内部定义规则 最简单的定义验证规则的方法是在使用它的模型(model)内部定义. 比方说,你要检查用户的密码是否足够安全. 通常情况下你会使用 CRegularExpres ...

  8. 为什么机器能够学习——PAC Learnability

    机器学习中,我们根据训练集训练一个模型,来对测试数据进行预测.通常我们并不关心模型在训练集上的好坏(即训练误差,in sample error),举个简单例子,我们想要根据前六个月股市行情训练一个模型 ...

  9. Jquery Mobile通过超链接跳转后CSS样式不起作用的解决办法

    Jquery Mobile中的超链接默认是采用AJAX跳转的,ajax获取到页面的内容之后,就直接替换当前页面的内容了,它只是单纯的获取页面的HTML代码,并不会再去下载引用的CSS代码和JS代码,因 ...

  10. 搭建python开发平台

    转:http://www.cnblogs.com/xuqiang/archive/2011/04/18/2019484.html <1>. 建立Python的开发环境; 这里使用的Pyth ...