用FPGA设计了数据接收和发送模块,FIFO模块,此处FIFO调用的是Show-ahead模式,在下一篇博客中将会分析这个问题。

用串口调试工具发送数据,数据接收模块将接收到的串行数据转换为并行数据(串转并),并存入FIFO中,当FIFO中的数据个数大于某个值的时候,读出数据,通过发送模块将并行数据转换为串行数据(并转串),然后就可以在串口调试工具上看到接收到的数据。

注意的点:

1、接收数据时,接收的数据因为不确定什么时候会来,所以有可能出现亚稳态,因此要进行同步处理,打两拍。

2、不论是接收还是发送数据都是从低位开始的。

3、采数据的时侯要在数据中间取值,原因下文有讲。


基本概念:

波特率与比特率?

波特率:单位时间内传输码元的个数(码元是携带数据信息的信号单元,有可能是1位的,也有可能是多位)

比特率:单位时间内传输了多少位数据

比特率=波特率*码元的位数

因为UART数据是一位一位传输的,所以波特率与比特率在这里可以认为是等效的,不用过于纠结,我们就直接理解成1s传送了多少位数据就可以了。

这是一个很不专业的总结,但是能很快理解二者关系。

常用的波特率有 9600,19200,38400等,这里用9600进行详细讲解

波特率位9600,则每一位数据的时间为 1s/9600=1000_000_000 ns/9600 =104166.67ns

因为时钟频率是50Mhz,因此需要104166.67ns/20ns=5208个时钟周期。

这里需要注意的问题是我们的时间并不能整除,有误差,因此设计的时候要在数据的中间取值,这样就可以避免数据出错。


UART数据传输格式

数据格式由起始位、数据位(位数可以位7、8等)、奇偶校验位(可有可无)、停止位(接收数据时可以忽略,发送数据时必须要有停止位)

上面已经说过每个数据的时间为5208个时钟周期,因此需要设计一个计数器cnt_5208

接收数据时为 起始位+8位数据位,即9位数,因此需要一个计数器来指示是哪一位数,cnt_bit。

接收数据时怎么检测有数据要来呢?

空闲时刻,数据线处于高电瓶,有数据来时要发送低电平,因此我们可以利用这个特性进行一个边沿检测,检测到下降沿的时候就知道有数据要来了。

接收数据注意的要点有哪些?

1、亚稳态问题:并不能确定数据什么时候来,所以为了避免出现亚稳态,我们需要对到来的数据进行同步化处理,就是简单的打两拍。

2、最好是在数据稳定的时候采集数据,所以有 clk_en =(cnt_5208 ==TIME_5208/2 -1)? 1'b1:1'b0,这个使能信号,可以保证在数据中间时刻采值,正确率高。

发送数据时 起始位0 +8位数据位 +停止位1,同样也需要一个计数器来指示是哪一位数。

发送数据模块注意的要点有哪些?

发送数据模块就是把接收到的数据一位一位发出去,这时候就要设计一个rdy信号告诉外面的模块系统是否处于工作模式,这样可以防止数据的丢失,

我们一板将要发送的数据先缓存起来,然后再一位一位发出去,这样也避免了再发送数据的时候受其他因素影响造成信息错误。

还要注意数据传送的时候都是从低位开始。这一点很重要很重要,否则发送的数据和接收到的数据就不一样,我是深深被伤到了,浪费了好多时间,以后要细心,不能再想当然,要遵守协议。。。。。


调试结果:当发送超过60字节的数据时,就会接收到数据,结果如下。

发送了01020304050607,即4位*14=56位数,即一次发送7字节的数据。

代码已经打包:

http://files.cnblogs.com/files/aslmer/%E4%B8%B2%E5%8F%A3%E8%B0%83%E8%AF%95%E4%BB%A3%E7%A0%81.zip

转载请注明出处:http://www.cnblogs.com/aslmer/p/5869015.html

uart串口的调试学习的更多相关文章

  1. Linux下使用putty进行UART串口调试【转】

    本文转载自:http://blog.csdn.net/xzongyuan/article/details/11593101 版权声明:本文为博主原创文章,未经博主允许不得转载. 使用putty进行串口 ...

  2. 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

    引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...

  3. RTC实时时间系统学习笔记(一)---------------UART串口

    临近研三了,自己倾向于要找数字IC方面的工作,苦于教研室的项目一直都是调板子调板子调板子,真正用到FPGA的很少,,本着"工欲善其事必先利其器"的原则,在网上搜寻如何自学FPGA, ...

  4. 第十六章 IIC协议详解+UART串口读写EEPROM

    十六.IIC协议详解+Uart串口读写EEPROM 本文由杭电网友曾凯峰根据小梅哥FPGA IIC协议基本概念公开课内容整理并最终编写Verilog代码实现使用串口读写EEPROM的功能. 以下为原文 ...

  5. (三) UART 串口通讯

    UART  : university asynchronous receiver and transmitter UART  // 通用异步接收器和发送器 为什么要有串口:因为许多嵌入式设备没有显示屏 ...

  6. Stm32l151+mpu6050+uart读取数据调试

    新近买了一个MPU6050模块,如上图,这个模块上的三块黑色分别是:稳压芯片662K,STM8s003f3p6,MPU6050. 根据此模块的说明书,可以使用USB转TTL将模块与上位机连接,通过卖家 ...

  7. linux UART串口驱动开发文档

    转:http://www.360doc.com/content/10/0417/18/829197_23519037.shtml linux UART串口驱动开发文档时间:2010-01-09 14: ...

  8. 基于STM32之UART串口通信协议(一)详解

    一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发 ...

  9. STM32 HAL库 UART 串口读写功能笔记

    https://www.cnblogs.com/Mysterious/p/4804188.html STM32L0 HAL库 UART 串口读写功能 串口发送功能: uint8_t TxData[10 ...

随机推荐

  1. Struts2--Helloworld

    搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1.找到开发Struts2应用需要使用到的jar文件. 2.创建Web工程 3.在web.xml中加入Struts2 MVC框架启动配置 ...

  2. Purchase购物车实例分析

    源代码下载地址:http://code4app.com/ios/55655def933bf09d328b5141 此源代码从中学到以下四个知识点 第一:关于右边只有一个被选中的效果展现,左边部分代码内 ...

  3. 求当前时间100天后的时间日期,格式化为xxxx年xx月xx日

    package com.demo1; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Da ...

  4. iOS 学习 - 1.代理传值

    代理的目的是改变或传递控制链.允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针.可以减少框架复杂度.
另外一点,代理可以理解为java中的回调监听机制的一种类似 优点:1.避免子类化带 ...

  5. C语言-09-文件操作

    文件类型 文本文件(ASCII) 简单的文本文件,可用任何文字处理程序阅读 二进制文件 包含 在ASCII及扩展ASCII字符中编写的数据或程序指令 的文件,通常图形文件及文字处理程序等计算机程序都属 ...

  6. [eclipse]“Syntax error, insert "}" to complete”报错的解决方案

    背景:本人在网上学习java时,看到一段样例代码比较好,因此复制粘贴到eclipse中看看编译结果.结果eclipse报"Syntax error, insert "}" ...

  7. 【mysql】添加对emoji的支持

    1.简介 涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,避免 emoji 表情符号带来的问题 MySQL Server >  5.5.3 2.配置+升级 当前配置 m ...

  8. Linux Shell 04 数字/字符串/文件测试

    一. 数字测试 格式:n1  -op  n2 测试操作op: eq/ne/le/ge/lt/gt    -->    等于/不等于/小于等于/大于等于/小于/大于 1. 数字比较可以使用特殊的( ...

  9. emacs24下使用jedi对python编程进行补全

    在开始前先装好pip和virtualenv(见pip的安装一文),另需安装好make 1.emacs下安装: epc deferred.el auto-complete 使用M-x package-i ...

  10. 为什么QQ浏览器不是默认浏览器但是在打开网页的时候还是默认启动?

    因需要浏览器兼容性测试装了一个QQ浏览器,我将火狐设为默认浏览器,但是每次打开连接的时候都是启动QQ浏览器. 出现这样的情况有以下两种可能:1.取消QQ为默认浏览器打开的设置项未成功,若需要取消QQ为 ...