使用串口 DMA 模式接收不定长数据

news2024/11/16 5:46:27

一、简介

曾经遇到客户有一个需求,需要用串口 DMA 的方式接收不定长度的数据,DMA 有个缺点就是在每次传输前需要设定好传输的字节长度,这种方式显然对于接收不定长度的数据来说没有那么灵活。但 DMA 也有着显著的优点,如可直接访问内存,减少 CPU 负担等。那么能否有比较好的方式能使用 DMA 去传输不定长的数据呢?当然是有的,以下便介绍其中一种通过定时器使串口 DMA 接收不定长数据的方式,以 NXP LPC5516 的 串口 DMA 例程为例。

 
二、方法思路

该方法使用到定时器中断和串口中断,具体思路如下。

1. 使能串口的 RX Start 中断,当串口开始接收数据时会产生一个中断,


2. 使能定时器中断、使能 DMA。

3. 调用 USART_TransferReceiveDMA()函数,串口 DMA 开始接收数据,设置接收字节长度为最大字节长度。

4. 当串口开始接收数据时,产生中断,进入中断函数,这时开启定时器,定时器时长为接收最大字节长度所需的时间,该时间可通过设定的串口波特率计算得出。

5. 定时结束,触发定时器中断,进入定时中断函数,首先关闭定时器计时,然后读取 DMA 的 XFERCFG 寄存器获得剩余未读取的字节数,最后用设定的 DMA 接收最大字节数减去剩余未读取字节数便得出本次传输已接收的字节数(设定数 - 剩余未接收数 = 已接收数)。


6. 待得到本次已接收的字节数后,便知道 Buffer 前面几个字节是本次接收到的数据,将其进行处理,最后将 DMA 重新设为空闲状态,同时准备第二次串口接收。

 
三、代码实现


1. 使能串口及串口 Rx Start 中断,


2. 使能定时器中断、DMA 中断并开启串口 DMA 接收。


3. 进入串口 Rx Start 中断,开启定时器。


4. 定时结束、进入定时器中断,在定时器中断中获取剩余未读取的字节数,计算已接收字节数。并对读取到的数据 buffer 进行处理。


5. 将 DMA 重新进入空闲状态,并开启下一次串口 DMA 接收,以此循环。


四、测试

使用 LPC5516 EVK 烧录该工程,闭合跳帽JP12,打开串口工具,发送不同字节长度的数据,可以看到 RX 能正常读取。




五、总结

本文章介绍了一种串口 DMA 接收不定长度数据的方法,通过添加定时器定时最大字节长度的时间,通过剩余未读取的字节数,计算已读取的字节数,再对 Buffer 进行处理。当然该方式由于无论每次读取多少字节的数据,都会花费最大字节数的时间,故只能在对实时性没有特殊要求的情景下使用。以上便是串口 DMA 接收不定长数据的一种方式。

登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI模型部署基础知识(一):模型权重与参数精度

一般情况来说,我们通过收集数据,训练深度学习模型,通过反向传播求导更新模型的参数,得到一个契合数据和任务的模型。这一阶段,通常使用python&pytorch进行模型的训练得到pth等类型文件。AI模型部署就是将在python环…

华为mux vlan+DHCP+单臂路由用法配置案例

最终效果: vlan 2模拟局域网服务器,手动配置地址,也能上公网 vlan 3、4用dhcp分配地址 vlan 4的用户之间不能互通,但可以和其它vlan通,也能上公网 vlan 3的用户不受任何限制可以和任何vlan通,也能上公网 交…

C# Onnx yolov8 竹签计数、一次性筷子计数

目录 效果 模型信息 项目 代码 数据集 下载 C# Onnx yolov8 竹签计数、一次性筷子计数 效果 模型信息 Model Properties ------------------------- date:2024-01-03T08:55:22.768617 author:Ultralytics task:detect license&#x…

信息论与编码期末复习——计算题+基础汇总(二)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

解决任何真实问题的重要一步是获取数据,Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集,并对其进行一定的操作,以正确的导入到我们的计算机,为接下…

基于SpringBoot的员工健康管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

python实现目录和文件管理

目录 一:模块介绍: 二:目录创建 三:目录删除 四:目录复制 五:目录移动 六:文件创建 七:文件删除 八:文件读取 一:模块介绍: Python的os和…

Java零基础教学文档第一篇:JavaSE(3)

接上期后续 本期继续分享尚未结束的JavaSE章节 JavaSE属于初入门阶段,内容很多~ 但很基础, 大家需保持耐心,慢慢的学~ 争取你们学习的速度! 跟上我更新的速度哦~ 今日新篇章 流程控制语句 【主要内容】 if单选结构 if双选结构…

Java多线程编程中的异常处理策略

第1章:引言 大家好,我是小黑,咱们今天聊聊异常处理。想必大家在写代码的时候都遇到过各种各样的异常吧?有时候,一个小小的异常如果处理不当,就可能导致整个程序崩溃。特别是在多线程环境下,异常…

H2S硫化氢荧光探针之星戈瑞实验室单品

H2S硫化氢荧光探针(近红外二区)优势和应用 λe x 1064 nm ,λem 1100 nm 近红外二区硫化氢荧光探针具有许多优势,使其在生物医学领域具有诸多应用。以下是其主要优势和应用方面: **优势: 1.深度穿透性&…

Git分支学习

Commit 每次 Commit ,都会多一个节点,C1是C2的父节点,在C1的基础上产生。 使用 git commit 提交代码分支。 Branch 根据逻辑分解工作到不同的分支,在将分支和提交记录结合起来后,我们会看到两者如何协作。 在 mai…

subversion httpd

通过http访问模式部署SVN的操作步骤如下: 步骤一:安装SVN 步骤二:安装Apache 步骤三:安装mod_dav_svn 步骤四:配置SVN 步骤五:配置Apache 步骤六:浏览器测试访问 步骤一:安装SVN 1.…

2024第15届电子教育、电子商务、电子管理和电子学习国际会议

第十五届电子教育、电子商务、电子管理和电子学习国际会议(IC4E 2024)将于2024年3月18日-21日在日本福冈举办。本次会议以电子技术为核心,围绕电子教育、电子商务、电子管理以及电子学习等各个方面展开研讨,为相关领域的专家学者们…

yolov8实战第五天——yolov8+ffmpeg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署(python推理)(保姆教学)-CSDN博客 今天,我们继续y…

‘pip‘ 不是内部或外部命令、ImportError: cannot import name ‘SCHEME_KEYS‘

错误一:启动程序中出现致命错误:无法使用“f:\pythonv\scripts\python.exe” G:\pythonv\scripts\ pip.exe” 错误二:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。 错误三:ImportError: cannot import name SCH…

九州金榜|孩子厌学,不是不想学,而是学不会

不是我不想学,而是我不会学,很多孩子这学习过程中是不是有这种感想,家长也是看孩子非常努力,但是效果却不尽如人意,时间长了,得不到有效的结果,孩子就此产生厌学情绪,这一类孩子原因…

非常好用的三款图片模糊变清晰的软件

在数字时代,照片的清晰度对于呈现高质量的视觉效果至关重要。然而,由于各种原因,我们有时会遇到模糊的照片。这时候,使用适当的软件来提高照片的清晰度就显得尤为重要。本文将介绍一些可以使模糊照片变清晰的软件,帮助…

Windows内存管理(二):内存架构 浅谈一二

《Windows内存管理(一):Windows性能监视器(PerfMon)》 Windows内存管理是一个复杂的主题,涉及多个层次和组件。以下是一个分层的概述。 1、虚拟内存管理 Windows使用虚拟内存来给每个进程提供一个看似连续的内存空间&#xff0c…

20个城市公交线路数据分享,Shp+excel格式,2020年,城市发展、公共设施规划必备数据,已实现数据可视化

随着城市交通的不断发展,公交线路已经成为人们出行的重要方式之一。 公交线路数据和公交站点数据是GIS系统中的重要数据集之一。公交线路数据包括公交车辆行驶的路径和站点之间的连接信息,今天分享的就是部分城市的公交线路数据,始发站、终点…

Spring MVC(day1)

什么是MVC MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean:专门存储业务数据…