首页 > 其他分享 >【信号传输】DMA传输只能收到一半数据,发送123456 只能收到 123, 发送abcd只能收到ab,缓存数组设成100,只能收到50个数据

【信号传输】DMA传输只能收到一半数据,发送123456 只能收到 123, 发送abcd只能收到ab,缓存数组设成100,只能收到50个数据

时间:2024-09-22 09:24:16浏览次数:12  
标签:只能 DMA value 收到 传输 ADC CPU dma

系列文章目录

1.元件基础
2.电路设计
3.PCB设计
4.元件焊接
5.板子调试
6.程序设计
7.算法学习
8.编写exe
9.检测标准
10.项目举例
11.职业规划


文章目录

方案一、改DMA中断

每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。
在这里插入图片描述
DMA中断使能函数

void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT,  FunctionalState NewState);

功能:配置指定的DMAy通道x的中断

注释:DMA_IT_TC:传输完成 DMA_IT_HT:传输一半 DMA_IT_TE:传输错误

例如:

DMA_ITConfig(DMA1_Channel1 , DMA_IT_TC , ENABLE);

如果是串口接受数据,想要关闭,直接在main函数初始化下面写这句话就行

__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT); //关闭DMA传输过半中断

方案二、改数据类型

uint32_t dma_value[20]={0};
HAL_ADC_Start_DMA(&hadc1,dma_value,20);注意此处设置的传输数量为20,即搬运20次ADC转换后的值

因函数HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)中接受转换完的数据类型需为32位,如果定义一个32位的变量dma_value[20];结果就是库函数自动把每个32位变量都塞满了。
如dma_value[0]应该是0x0FFF,就变成了0x00000FFF,把高16位的有效数据给浪费了

或者是这样写的

uint16_t ADC_value[20]={0};
HAL_ADC_Start_DMA(&hadc1,ADC_value,20);

在这里插入图片描述

改为这样就好了:

uint16_t dma_value[20]={0};
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)dma_value,20);

方案三、改数据长度

uint32_t dma_value[100]={0};
HAL_ADC_Start_DMA(&hadc1,dma_value,100);

缓存数组设成100,只能收到50个数据,即0-49有数据,后面50-99都是0或其他不正常的值。

uint32_t dma_value[100]={0};
HAL_ADC_Start_DMA(&hadc1,dma_value,200);

上面函数的最后一个参数改为采集数据个数的2倍,就好了

后记

什么是DMA (DMA的基本定义)

DMA,全称Direct Memory Access,即直接存储器访问。

DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,

CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?

因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理,

DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。

DMA定义:
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

DMA传输方式

DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:

外设到内存
内存到外设
内存到内存
外设到外设
DMA传输参数

我们知道,数据传输,首先需要的是1 数据的源地址 2 数据传输位置的目标地址 ,3 传递数据多少的数据传输量 , 进行多少次传输的传输模式 DMA所需要的核心参数,便是这四个

当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输。
  
也就是说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。

标签:只能,DMA,value,收到,传输,ADC,CPU,dma
From: https://blog.csdn.net/weixin_44407238/article/details/142350798

相关文章

  • 解决bootstraptable只能初始化数据一次的问题
    ajax+bootstraptable展示数据的时候,无法根据需求更改展示内容,报错:Youcannotinitializethetablemorethanonce!解决方案:加一行代码,先将bootstraptable销毁$("#tool1table").bootstrapTable('destroy');<script>$("#tool1btn").click(function(){......
  • 为什么MDB-RS232支付适配器一上电,串口会一直收到通信数据,而且MDB转换盒上的PC指示灯一
    MDB-RS232支付通信适配器通电后,RS232端口就会不停地收到数据,而且MDB适配器上的“PC”指示灯也一直在闪烁。MDB协议里有的数据,是报告一次。有的数据是持续报告。比如设备在线状态,硬币器如果不在线,是不是在线,只能靠读取。而纸币器是会一直主动报告这个状态数据。而且如果不使能......
  • 全高清视频光端机:实现卓越画质传输
    在当今数字化时代,视频监控系统在安全防范、远程监控和数据分析等方面扮演着越来越重要的角色。随着技术的进步,市场对于视频画质的要求也越来越高,全高清视频光端机应运而生,它以其卓越的画质传输能力,成为实现高质量视频监控的关键设备。本文将探讨全高清视频光端机的技术特点、应用领......
  • ChatGPT流式数据传输探索
    文章目录背景介绍目标技术细节1、客户端2、服务端总结背景介绍用过GPT类语言模型的同学都知道,其在返回数据时都是一个字或几个字的显示,你是否思考过它是怎么传输的?经过一番查询学习,了解到了SSE,GPT就是通过SSE流式传输方式进行传输的。SSE全称为Server-sent-even......
  • 传输层——TCP协议
    文章目录TCP协议段格式确认应答(ACK)机制超时重传机制三次握手四次挥手滑动窗口流量控制拥塞控制延迟应答捎带应答TCP协议段格式源/目的端口号:从哪个进程来到哪个进程去;32位序号/32位确认序号:分别代表TCP报文当中每个字节数据的编号以及对对方的确认,是TCP保证可......
  • 飞驰云联FTP替代方案:安全高效文件传输的新选择!
    FTP协议广泛应用各行业的文件传输场景中,由于FTP应用获取门槛低、使用普遍,因此大部分企业都习惯使用FTP进行文件传输。然而面临激增的数据量和网络安全威胁的不断演变,FTP在传输安全性与传输性能上有所欠缺,无法满足企业现在的高要求,因此需要寻找FTP替代方案。本文将从6个方面探讨企......
  • ChatGPT 多媒体应用设计师备考考点讲解(七):音视频编码与传输优化策略
    音视频编码与传输技术是多媒体应用设计中至关重要的环节。高效的音视频编码不仅能够保证内容质量,还可以减少带宽占用,提升传输效率。而在传输过程中,优化音视频流的传输策略可以降低延迟、减少丢包、保证播放的流畅性。在本篇文章中,我们将详细讲解音视频编码的基础知识、常见编码格式......
  • 基于JAVA文件传输的计算机毕设源码+论文
    摘  要Abstract引  言1技术简介1.1Java语言1.1.4分布性1.3Java中输入/输出流概念1.5JBuilder集成开发环境介绍2系统分析2.1可行性分析2.2开发工具2.3需求分析3系统详细设计3.1系统的主要功能摘 要随着计算机网络技术的飞速发展,客户/服务C/S(Client/......
  • 为什么子目录下安装zblog只能访问后台
    当你在子目录下安装了ZBlog并且只能访问后台,但在后台点击返回时无法访问站点,提示“您无权查看该网页HTTP”错误,这可能是由于多种原因造成的。以下是一些可能的原因及解决方案:URL重写规则问题:如果你启用了URL重写功能,可能需要调整Apache或Nginx的配置文件(如.htacces......
  • 一个绝佳的Windows和WSA传输文件的方法
    前言在Windows和Windows子系统安卓(WSA)之间传输文件,一直以来都是一个让人感到头疼的问题。虽然网络上有很多解决方案,但大多数方法要么过于繁琐,要么效果不尽如人意,常常需要依赖繁琐的步骤和额外的工具,效率一言难尽。最近经常用Localsend,在我的电脑和两台安卓设备,对象的Iphon......