用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. Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010

    from:http://blog.tallan.com/2012/07/18/creating-a-sharepoint-bcs-net-assembly-connector-to-crawl-rss ...

  2. STL--向量(vector)

    STL的组成 标准模板库STL关注的重点是泛型数据结构和算法,其关键组成部分是容器(containers).算法(algorithms).迭代器(iterators).函数对象(Function Ob ...

  3. Xcode 文件删除拷贝 出现的问题

    当删除一个组的时候,不管是下面的两个选择,是彻底删除还是不彻底: 然后又要往工程里拷贝进去  同名  文件组,最好是选择Creat groups (因为创建groups就不会有import的时候,还需 ...

  4. linux crontab & 每隔10秒执行一次

    linux下定时执行任务的方法  在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINU ...

  5. openstack kilo compute更新后报错IncompatibleObjectVersion: Version 1.2 of PciDeviceList is not supported

    前几天在compute节点更新openstack的包后,发现报错IncompatibleObjectVersion: Version 1.2 of PciDeviceList is not suppo ...

  6. Effective Java 26 Favor generic types

    Use generic types to replace the object declaration Add one or more type parameters to its declarati ...

  7. Asp.Net实现WebApi跨域 (非MVC)

    目前WebApi在使用上大部分都是跟MVC组合的,而且使用起来也确实十分便利. 但有时候我们也需要在WebForm中使用WebApi,二者还是有一定区别的. 首先看下结构  ①ApiControlle ...

  8. 读书笔记——OpenGL超级宝典

    对于某些函数的理解 glClear和glClearColor glClearColor指定glClear清除特定缓冲区时使用的值. glFlush 让所有已发送的命令尽快的由实际的绘制引擎执行. gl ...

  9. Python基本语法初试

    编程环境: win7旗舰版 Python 3.2.2(default, Sep  4 2011,09:51:08) 代码来源:(Python菜鸟) 代码内容: Python基本的输出语句print(& ...

  10. SSH web.xml文件配置

    启动一个WEB项目的时候, WEB容器会去读取它的配置文件web.xml web.xml中配置的加载优先级:context-param -> listener -> filter -> ...