894|2

6993

帖子

11

TA的资源

版主

楼主
 

【ST NUCLEO-U5A5ZJ-Q开发板测评】DAC+GPDMA生成正弦波 [复制链接]

本帖最后由 lugl4313820 于 2024-2-22 07:42 编辑

【目的】使用DAC+GPDMA生成正弦波

【硬件】

1、ST NUCLEO-U5A5ZJ-Q开发板

2、示波器

【软件环境】

STM32CubeIDE1.14.0

【实现步骤】

1、使用stm32CubeIDE新建基于STM32U5A5JT6核心的基础工程。

2、配置时钟为160MHz。

3、配置sys的时钟为SysTick。

  4、开置ICAHE,模式为1-way。

  5、开启DEBUG

  6、配置DAC1,选择输出为OUT1,连接为only external pin。stm32cubeMAX会自己动配置PA4为输出IO。

  7、在参数配置中,按下图配置参数:

  8、接着配置TIM1,如下图所示,触发选择内部ITR1,向上计数,计数值为5000,产生更新时事件。

  9、配置GPDMA,打开channel9,配置循环模式,port选择1,打开中断。

  10、创建链表用于GPDMA连接到DAC,名字为DACQueue,linked list选择GPDMA,循环模式,第一个节点名字为DACNode.

  11、配置节点属性如下:

 12、 同时需要调整一下工程中的函数启动顺序:

  13、生成代码,并打开工程。

14、在main.c中引用linked_list.h的头文件,并声明变量DACQueue;

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

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern DMA_QListTypeDef DACQueue;
/* USER CODE END PTD */

15、添加一个生成正弦波的数组:

/* USER CODE BEGIN PV */
uint32_t data_sin[128]  = {
  2048, 2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,
  2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,
  3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,
  4013, 4019, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,
  3858, 3817, 3772, 3722, 3669, 3611, 3550, 3485, 3416, 3344,
  3269, 3191, 3110, 3027, 2941, 2853, 2763, 2671, 2578, 2483,
  2387, 2291, 2194, 2096, 1999, 1901, 1804, 1708, 1612, 1517,
  1424, 1332, 1242, 1154, 1068, 985,  904,  826,  751,  679,
  610,  545,  484,  426,  373,  323,  278,  237,  201,  169,
  141,  118,  100,  87,   79,   75,   76,   82,   93,   109,
  129,  154,  184,  218,  257,  300,  347,  399,  455,  514,
  577,  644,  714,  788,  865,  944,  1026, 1111, 1198, 1287,
  1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047
};
/* USER CODE END PV */

当然也可以使用sin来实时生成。

16、在主函数中,添加定时器的启动函数,GPDMA链表配置初始化,以及将通道与链表连。连接好后,启动DAC——DMA,具体表码如下:

  /* USER CODE BEGIN 2 */
  if (HAL_TIM_Base_Start(&htim1) != HAL_OK)
  {
    Error_Handler();
  }
  MX_DACQueue_Config();

  /* Link DAC queue to DMA channel */
  if( HAL_DMAEx_List_LinkQ(&handle_GPDMA1_Channel9, &DACQueue)!= HAL_OK)
  {
    Error_Handler();
  }

  /* Associate the initialized GPDMA handle to the the DAC handle */
  __HAL_LINKDMA(&hdac1, DMA_Handle1, handle_GPDMA1_Channel9);
  /* Enable DAC selected channel and associated DMA */
  if (HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, &data_sin[0], 128, DAC_ALIGN_12B_R) != HAL_OK)
  {
    /* Start DMA Error */
    Error_Handler();
  }
  /* USER CODE END 2 */

【实验效果】

将程序下载到开发板,使用示波器连接到PA4,可以看到生成如下的波形:

  附工程源代码:

MY_DAC_TEST.zip (46.19 KB, 下载次数: 3)
此帖出自stm32/stm8论坛

最新回复

大佬,太强了,彻底搞明白了GPDMA   详情 回复 发表于 2024-2-22 11:27
点赞 关注
 

回复
举报

286

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

大佬,太强了,彻底搞明白了GPDMA

此帖出自stm32/stm8论坛

点评

学习了好久,现在弄明白一点点,还不是非常熟悉,还得多用才行。  详情 回复 发表于 2024-2-22 13:30
 
个人签名

阅读改变人生

 

回复

6993

帖子

11

TA的资源

版主

板凳
 
怀揣少年梦 发表于 2024-2-22 11:27 大佬,太强了,彻底搞明白了GPDMA

学习了好久,现在弄明白一点点,还不是非常熟悉,还得多用才行。

此帖出自stm32/stm8论坛
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表