UARTLite接收不定长数据

1. Vivado建立UARTLite的IP核工程

(不做介绍,过程略)

2. 创建SDK或vitis应用工程

(不做介绍,过程略)

3. 添加UARTLite官方例程xuartlite_intr_example

(不做介绍,过程略)

4. 编译、烧写,验证硬件是否OK

5. 分析官方例程

官方例程xuartlite_intr_example是打开中断,将发送引脚与接收引脚短接,如果接收的数据长度等于发送的数据长度,且接收数据等于发送数据,则例程运行正常。
例程中没有给出中断处理函数,而是给出了将自定义封装到发送完成或接收完成中断的函数。

寻找XUartLite_SetRecvHandler函数声明的位置,在xuartlite_intr.c中,
这个函数将用户函数送入了结构体中的RecvHandler中,在xuartlite_intr.c中寻找调用RecvHandler的函数,找到ReceiveDataHandler函数。

我们再看看谁调用了ReceiveDataHandler函数,原来是XUartLite_InterruptHandler函数,它应该就是xUARTLite的中断函数本尊了。

这个函数很简单,就是发生发动或接收中断,就调用对应的函数。接下来我们回到ReceiveDataHandler函数。

这个函数可以分为三部分:

第一部分,判断接收缓存剩余要接收的字节数是否为0(也就是是否接收到指定字节长度的数据)。
如果还没有达到指定长度,会跳到XUartLite_ReceiveBuffer函数,接收剩余字节,直到接收FIFO为空。(不管是否接收完毕)。

第二部分,判断接收数据缓存是否为0,如果为零,则调用用户自定义的中断函数RecvHandler,并将回调函数和已经接收到的字节长度发送到该中断函数。

第三部分,记录中断次数。

7. 修改官方源文件xuartlite_intr.c。

经过前边的介绍,我们可以知道只要修改ReceiveDataHandler函数的第二部分即可实现不定长数据的接收。修改方法为,将剩余字节数的判断去掉,直接执行用户中断函数RecvHandler的调用。

对于例程中给出的自定义函数,我们可以增加一个接收标志的置位,

8. 编译、烧写,测试功能。

ZYNQ UARTLite接收不定长数据相关推荐

  1. ZYNQ进阶之路14--PS端uart串口接收不定长数据

    ZYNQ进阶之路14--PS端uart串口接收不定长数据 导语 ZYNQ串口简介 实现步骤 导语 繁忙的博主又来了,本节我们实现一个比较简单的东西:串口.之前的章节中我们也有使用PS端的串口进行收发数 ...

  2. 串口IDLE空闲中断+DMA实现接收不定长数据基于stm32cubemx

    引言:对于串口接收一些不定长的数据,必须面对一个问题:怎么判断一帧数据接收是否完成?通常使用RXNE非空中断配合简单的数据协议,在数据中加入帧头.帧尾,在程序中判断是否接收到帧尾来确定数据接收完毕,因 ...

  3. STM32使用串口IDLE中断的两种接收不定长数据的方式

    现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE中断一次只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE空闲中断的方式接收一帧数据,方法如下: 方法1: ...

  4. openmv串口数据 串口助手_STM32 串口接收不定长数据 STM32 USART空闲检测中断

    编者注: 单片机串口接收不定长数据时,必须面对的一个问题为:怎么判断这一包数据接收完成了呢?常见的方法主要有以下两种: 1.在接收数据时启动一个定时器,在指定时间间隔内没有接收到新数据,认为数据接收完 ...

  5. stm32串口空闲中断接收不定长数据

    串口空闲中断接收不定长数据 空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发 ...

  6. android 串口一直打开_STM32之串口DMA接收不定长数据

    STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口 ...

  7. HAL库的串口基础学习(包含串口接收不定长数据的实现)

    HAL库的串口基础学习(1) HAL库有一个特点就是对于许多外设的初始化以及功能操作,都提供有一个weak版本的函数,这是充分的展现出库名字的含义(Hardware Abstraction Layer ...

  8. MM32F3277空闲中断+DMA接收不定长数据

    摘要:在实际项目中经常用到串口接收一些不定长的数据,怎么判断这一帧数据接收完成了呢?通常使用UART非空中断配合简单的数据协议,在数据中加入帧头.帧尾,在程序中判断是否接收到帧尾来确定数据接收完毕,对 ...

  9. STM32单片机串口空闲中断+DMA接收不定长数据

    在上一篇文章STM32单片机串口空闲中断接收不定长数据中介绍了利用串口空闲中断接收不定长数据,这种方式有一个问题就是串口每接收到一个字节就会进入一次中断,如果发送的数据比较频繁,那么串口中断就会不停打 ...

最新文章

  1. 混合颜料(求线性组的基)
  2. Oracle cursor_sharing 参数 详解
  3. 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践
  4. FLV视频文件格式分析
  5. 【转】 ADO.NET最佳实践
  6. 三十分钟包会——正则表达式
  7. SQL Server中的基数估计过程
  8. shell脚本中数组的使用_Shell脚本中的数组
  9. 配置vue,vue脚手架的应用(老版本)
  10. 美团笔试.最大子段和
  11. 用了五年 VS Code ,我决定换成 JetBrains……
  12. PreRNN+:Towards A Resolution of the Deep-in-Dilemma in Saptiotemporal Predictive Learning
  13. word打带圈符号(带圈对勾为例)
  14. 痞子衡嵌入式:恩智浦SDK驱动代码风格、模板、检查工具
  15. 非常好看的二次元导航源码
  16. 十一、Gio Resource
  17. android手势密码源码,Android自定义UI手势密码改进版源码下载
  18. 关于专利技术交底书分类的真相
  19. iPhone 无需越狱修改wx+zfb+qq步数
  20. 原来吃香蕉有这么多好处

热门文章

  1. 进程的定义和状态转换
  2. Jsp 和 Servlet 有什么不同?
  3. 3大常见光伏加盟骗局大起底
  4. [2897]F SDUTOJ
  5. linux 字符驱动阻塞型 等待队列
  6. linux 管道和重定向
  7. comboBox.DataSource绑定
  8. 转《浅谈数据库设计技巧》
  9. 使用nexus3配置golang私有仓库(go私服)
  10. 【好文收藏】K8S集群部署CoreDNS服务