STM32 TIM DAC and DMA

3
我希望通过使用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请求。 我已经以这种方式设置了所有的定时器 这样做可以创建一种类似于双相脉冲的信号,但仅适用于正面。可调参数为两个脉冲宽度、间隔时间和脉冲周期。请注意,负相位将是正相位,因此它将输出两个正脉冲。

enter image description here


看起来你在尝试生成某种方波,我说得对吗?这个信号有什么要求?你希望哪些参数可以调节? - undefined
1个回答

1

您的配置方式不正确。

  1. 配置 DAC 触发器(该触发器将强制 DAC 请求数据传输) enter image description here

  2. 配置 DAC DMA enter image description here

  3. 配置定时器以生成适当的触发信号


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接