1445|3

7056

帖子

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) 关注
 

回复
举报

7056

帖子

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
 
 

回复

330

帖子

5

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
 
 

回复

7056

帖子

11

TA的资源

版主

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

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

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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