1256|3

6841

帖子

11

TA的资源

版主

楼主
 

【ST NUCLEO-U5A5ZJ-Q开发板测评】ADC体验之二 DMA数据搬运工 [复制链接]

STM32U5的DMA称之为GPDMA与LPDMA,在用户手册《RM0456》中有如下的介绍:

  我们常称之为数据搬动工。

我们的ADC数据转换也可以通过GPDMA来实现不需要CPU来控制转换,我们只需要在需要时去把转换好的数据取出来就行了,非常之方便。

【配置】

1、在上次实现ADC单片转换的工程上修改两个配置,一是Conversion Data Management Mode,配置为DMA circular mode,二是DMA Continuous Requests使能。如下图所示。

  2、打开GPDMA设置,我这里设置了GPDMA1的通道10。模式我这里选用循环(circual)

  3、由于STM32U5的GPDMA需要用linked List来实现。所以需要添加自己的list配置:

  在ADCNode节点中我配置了Request Configuration为GPDMA1——ADC1。长度为1word

 

4、在以上配置结束后,生成代码。

5、添加用户代码,主要是引用linked_linst.h头文件,声明变量,还有就是定义一个32长度的用于存放ADC转换结果的数组aADCxConvertedData。

#include "linked_list.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern ADC_HandleTypeDef hadc1;
extern DMA_HandleTypeDef handle_GPDMA1_Channel10;
extern DMA_NodeTypeDef ADCNode;
extern DMA_QListTypeDef ADCQueue;
#define ADC_CONVERTED_DATA_BUFFER_SIZE   ((uint32_t)  32)   /* Size of array aADCxConvertedData[] */
/* Variable containing ADC conversions data */
uint32_t   aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE];

6、接着我配置ADCQueue,并使用 LINKDMA把hadc与GPDMA1——10连接起来。同时使能DMA转换,结果放在指定的数组之中。

  MX_ADCQueue_Config();
  __HAL_LINKDMA(&hadc1,DMA_Handle, handle_GPDMA1_Channel10);
  if(HAL_DMAEx_List_LinkQ(&handle_GPDMA1_Channel10, &ADCQueue) != HAL_OK)
  {
	  Error_Handler();
  }
  if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)aADCxConvertedData, (ADC_CONVERTED_DATA_BUFFER_SIZE)) != HAL_OK)
  {
	  Error_Handler();
  }

7、测试代码,在主循环中,我使用串口打印出32个转换数据,来观察效果,下载程序后效果如下:

  变化电压后,也反映非常的灵敏,说明GPDMA成功应用。

此帖出自stm32/stm8论坛

最新回复

这是把ADC和DMA一次玩了个通透了,学习受教了!!!   详情 回复 发表于 2024-2-18 17:58
点赞(1) 关注
 

回复
举报

6841

帖子

11

TA的资源

版主

沙发
 
  while (1)
  {
	  total_val = 0;
	  for(int i=0; i<32;i++)
	  {
		  total_val +=aADCxConvertedData[i];
	  }
	  printf("ADC VaL:%d voltage:%.4f \r\n   ", total_val/32, (float)(total_val/32)*3.3/16384);
	  HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

使用平均法进行处理,发现数据波动会小很多:

 

 

 

此帖出自stm32/stm8论坛

点评

这是把ADC和DMA一次玩了个通透了,学习受教了!!!  详情 回复 发表于 2024-2-18 17:58
 
 

回复

253

帖子

3

TA的资源

纯净的硅(初级)

板凳
 
lugl4313820 发表于 2024-2-17 15:00 while (1) { total_val = 0; for(int i=0; i<32;i++) { total_val +=aADCxConve ...

这是把ADC和DMA一次玩了个通透了,学习受教了!!!

此帖出自stm32/stm8论坛

点评

感谢帮主大佬的关注,我这是摸着石头过河,多谢是大佬您指点要深挖,不过还没有深入到寄存的操作,大佬们用寄存器,可能配置还要简单,效率还会更加高。  详情 回复 发表于 2024-2-18 19:42
 
 

回复

6841

帖子

11

TA的资源

版主

4
 
HonestQiao 发表于 2024-2-18 17:58 这是把ADC和DMA一次玩了个通透了,学习受教了!!!

感谢帮主大佬的关注,我这是摸着石头过河,多谢是大佬您指点要深挖,不过还没有深入到寄存的操作,大佬们用寄存器,可能配置还要简单,效率还会更加高。

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
CES评最佳创新产品奖 35款产品亮相(2)

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑

Linux使用技巧集

10756

[MSP430 学习笔记] 晶体振荡器的负载电容

最近有童靴在问如何确定MSP430的晶体负载电容,一般来讲,大家都是在用一些经验值,对其原理也不是特别清楚。 有兴趣的同学可以看 ...

从零开始点亮LED灯

本帖最后由 微末凡尘 于 2014-7-27 01:03 编辑 ...

Fly-Buck 转换器 PCB 布局技巧

同步降压转换器已作为隔离式偏置电源在通信及工业市场得到认可。隔离式降压转换器或者通常所谓的 Fly-Buck 转换器,采用一个耦合 ...

【拓普微智能显示模块】四:串口交互以及曲线、绘图板、动画控件的应用

本帖最后由 数码小叶 于 2021-11-21 12:00 编辑 上一篇已经使用SGTools产生了一个简单的界面,所以对于SGTools来说,简单使用 ...

功率变换开关技术(修订版)电力电子的核心理论

电力电子技术在电力系统、新能源发电、电动汽车、电力牵引以及家用电器等众多领域快速发展,电力电子化已成为一种发展趋势,然而 ...

功率放大器在水下主动电场物体形状成像系统的应用

功率放大器在水下主动电场物体形状成像系统的应用

器件选型——TVS管选型一般要注意哪些参数?

642279642280 这是我找的一份TVS的规格书, 问题1: 想请教一下大家平时在进行TVS选型的时候比较关注哪些参数? ...

Mecha Lab 防生手臂中的手指运动用的是什么方案?

好久之前看到了这个手臂演示,属实是惊艳到了我,我们公司也想搞一个活动的手臂,有人知道它这个手指运动用的是什么方案吗? ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表