打印
[其他ST产品]

(转载)基于STM32U5 ADC+DMA配置经验分享

[复制链接]
676|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2023-8-3 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, ADC, DM, DMA, ST
有人使用STM32U5系列MCU开发产品,在用到ADC结合DMA传输时遇到点障碍,这里针对片内ADC1和ADC4基于DMA标准请求模式和链表模式演示下实现过程,以供参考。


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


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









相关代码:
  • #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个通道我是悬空的】





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


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





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









相关用户代码:
  • /* 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组数据】:





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



如有侵权请联系删除

使用特权

评论回复
沙发
香水城| | 2023-8-4 07:25 | 只看该作者
谢谢转载,原文链接 STM32U5 ADC+DMA配置演示

使用特权

评论回复
板凳
周半梅| | 2024-3-1 07:03 | 只看该作者

需要在做项目的过程中经历磨难

使用特权

评论回复
地板
Pulitzer| | 2024-3-1 08:06 | 只看该作者

硬件设计和软件设计本来就是鱼和熊掌的关系,两者不可兼得

使用特权

评论回复
5
童雨竹| | 2024-3-1 10:02 | 只看该作者

结构化模块化的程序设计的思想,使最基本的要求

使用特权

评论回复
6
Wordsworth| | 2024-3-1 11:05 | 只看该作者

确定好硬件原理图,硬件布线,最后才是软件的开发

使用特权

评论回复
7
Clyde011| | 2024-3-1 12:08 | 只看该作者

没有发现有哪本是介绍设计思想的

使用特权

评论回复
8
公羊子丹| | 2024-3-1 13:01 | 只看该作者

写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的

使用特权

评论回复
9
万图| | 2024-3-1 14:04 | 只看该作者

在实际的项目应用当中,单片机引脚的复用相当厉害

使用特权

评论回复
10
Uriah| | 2024-3-1 15:07 | 只看该作者

但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。

使用特权

评论回复
11
帛灿灿| | 2024-3-1 17:03 | 只看该作者

时间片轮的设计思想

使用特权

评论回复
12
Bblythe| | 2024-3-1 18:06 | 只看该作者

事实上很多做项目的工程师本身自己也会在用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

941

主题

2670

帖子

5

粉丝