STM32 TIM DAC 和 DMA

Posted

技术标签:

【中文标题】STM32 TIM DAC 和 DMA【英文标题】:STM32 TIM DAC and DMA 【发布时间】:2021-08-17 14:34:39 【问题描述】:

我想通过使用 DMA 功能来卸载我的 STM32G491 的 CPU。 我想使用定时器 2 (TIM2) 生成需要 DMA 传输的四个时刻。 这样做时,我可以在一个周期内创建两个脉冲。 使用定时器输出比较功能可以调整周期、占空比和延迟。

  int amplitude = 0xFFF;

  uint16_t current[] = 0, amplitude, 0, amplitude;

  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[0], sizeof(uint16_t), DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[1], sizeof(uint16_t), DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[2], sizeof(uint16_t), DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[3], sizeof(uint16_t), DAC_ALIGN_12B_R);

  HAL_TIM_Base_Start_IT(&htim2);
  HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_1);
  HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_2);
  HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_3);

我不知道如何连接我的计时器来启动从内存到 DAC 的数据传输。我希望你能帮助我以正确的方式给我一个方向。

我已经设置了我的定时器,以便它们在定时器到期时发出 DMA 请求。

这样做时,我可以创建一种双相脉冲,但仅限于积极的一面。可调整的参数是两个脉冲宽度、相间间隔和这个脉冲的周期。注意负相为正,所以会输出两个正脉冲。

【问题讨论】:

您似乎正在尝试生成某种方波,对吗?这个信号有什么要求?你想调整哪些参数? 【参考方案1】:

你的配置方式不对。

    配置 DAC 触发器(此触发器将强制 DAC 请求数据传输)

    配置 DAC DMA

    配置定时器以生成适当的触发器

【讨论】:

感谢您的回答。正如我从下拉菜单中看到的那样,您只能选择一个超时事件。有没有办法使用输出比较函数来启动 DMA 传输?在我的图像中,四个输出比较函数用于请求 DMA 传输 @erwindenboer 这个问题表明您没有阅读 uC 文档(参考手册)。你写不同的东西。阅读文档的计时器部分。使用“神奇”的 HAL 库并不能取代知识。 我已经阅读了 uC 文档。但也许我误解了文档中的信息错误。在我读过的文档中,输出比较通道可以生成 DMA 请求(以及中断)。但是在 STM32CubeMX 中,我看到我无法将输出比较通道连接到 DAC 以启动传输。我不知道我想要的在微控制器中是否可行。因此我的问题。

以上是关于STM32 TIM DAC 和 DMA的主要内容,如果未能解决你的问题,请参考以下文章

STM32cubemx教程 DAC+TIM+DMA

STM32cubemx教程 DAC+TIM+DMA

STM32 DMA问题

STM32 M4 Cortex WAV 播放器 SD 卡 DMA DAC

STM32F0xx_DAC输出电压配置详细过程

stm32c6t6几个dac