• 470查看
  • 0回复

[芯片硬件] STM32U5 ADC+DMA配置演示

[复制链接]


该用户从未签到

发表于 7-5-2024 19:10:58 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


有人使用STM32U5系列MCU开发产品,在用到ADC结合DMA传输时遇到点障碍,这里针对片内ADC1和ADC4基于DMA标准请求模式和链表模式演示下实现过程,以供参考。

先对ADC1基于DMA标准请求模式做演示。

随意选择ADC1的4个通道,扫描模式,连续转换,DMA传输转换结果并令DMA工作在外设字到内存字的循环传输模式。使用CubeMx进行配置。其中DMA通道使用Channel 1。

STM32U5 ADC+DMA配置演示w2.jpg

STM32U5 ADC+DMA配置演示w3.jpg

STM32U5 ADC+DMA配置演示w4.jpg

相关代码:

#define     ADC_BUFFRER_SIZE   ((uint32_t)  8)   uint32_t   ADC1_Result[ADC_BUFFRER_SIZE];
ADC_HandleTypeDef hadc1;DMA_HandleTypeDef handle_GPDMA1_Channel1; //For ADC1
  /* USER CODE BEGIN 2 */

HAL_PWREx_EnableVddA(); //add it manually with lower cubeMx version      __HAL_LINKDMA(&hadc1, DMA_Handle, handle_GPDMA1_Channel1);
  if (HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC1_Result,                         (ADC_BUFFRER_SIZE)                       ) != HAL_OK)  {    Error_Handler();  }
   /* USER CODE END 2 */
运行结果如下图所示:【目前4个通道我是悬空的】

STM32U5 ADC+DMA配置演示w5.jpg

现在对ADC4基于DMA链表模式做演示,其实就一个节点。

选择ADC4的4个内部信号通道,扫描模式,连续转换,DMA传输转换结果,并令DMA工作在外设字到内存字的循环模式。使用CubeMx进行配置。其中DMA通道使用Channel 0。对于内部信号的采样,往往有最小采样时间要求,我这里的演示随便选了个参数,具体应用时请参考数据手册及当时ADC时钟具体拟定。特此提醒!

STM32U5 ADC+DMA配置演示w6.jpg

关于DMA链表模式的配置在CubeMx界面里的Utility菜单下。

STM32U5 ADC+DMA配置演示w7.jpg

STM32U5 ADC+DMA配置演示w8.jpg

STM32U5 ADC+DMA配置演示w9.jpg

相关用户代码:

/* Private variables ---------------------------------------------------------*/ADC_HandleTypeDef hadc4;DMA_NodeTypeDef Node_GPDMA1_Channel1;DMA_QListTypeDef List_GPDMA1_Channel1;DMA_HandleTypeDef handle_GPDMA1_Channel0;/* USER CODE BEGIN PV */
/* USER CODE BEGIN 2 */
HAL_PWREx_EnableVddA(); //add it manually with lower cubeMx version
MX_ADC4Queue_Config();
__HAL_LINKDMA(&hadc4, DMA_Handle, handle_GPDMA1_Channel0);
HAL_DMAEx_List_SetCircularMode(&ADC4Queue);    if (HAL_DMAEx_List_LinkQ(&handle_GPDMA1_Channel0, &ADC4Queue) != HAL_OK){Error_Handler();}
if (HAL_ADC_Start_DMA(&hadc4,(uint32_t *)ADC4_Result,(ADC_BUFFRER_SIZE)) != HAL_OK){Error_Handler();}/* USER CODE BEGIN WHILE */
结果验证【显示了2组数据】:

STM32U5 ADC+DMA配置演示w10.jpg

最后还提醒下,如果CubeMx版本比较低时,HAL_PWREx_EnableVddA()函数需要自己手动添加。我目前CubeMx 6.9.0版本已经不用手动添加了,创建工程时会将其自动生成于相应位置。

好,今天的分享就到这里。下次再聊。




该用户从未签到

发表于 11-3-2025 17:43:00 | 显示全部楼层
您好,关于STM32U5系列MCU的ADC结合DMA配置,下面为您提供一个基于DMA标准请求模式和链表模式的演示过程。针对ADC1和ADC4的详细实现如下:

首先,通过CubeMx配置工具进行ADC和DMA的初始化配置。对于ADC1,选择任意四个通道,设置扫描模式为连续转换模式。DMA通道使用Channel 1,配置DMA工作在外设字到内存字的循环传输模式。

代码实现部分,首先定义ADC缓冲区大小(如ADC_BUFFRER_SIZE)。然后,配置ADC参数(如采样时间、转换速率等),并关联到指定的DMA通道和流。在中断服务程序中处理DMA传输完成事件,读取ADC转换结果。

对于链表模式,需额外配置DMA的链表结构,包括链表节点数量和每个节点的地址。在每个节点中设置相应的传输参数,如源地址、目标地址和传输大小。配置完成后,启动DMA传输时,它将按照链表中的配置顺序依次执行。

注意确保正确配置中断优先级和NVIC使能相关中断,并处理可能出现的异常情况。此外,根据实际需求调整其他相关参数和配置。以上内容仅供参考,具体实现细节可能因MCU版本和开发环境而异。希望这些信息和指导对您有帮助!

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 02:19 , Processed in 0.319855 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.