ST意法半导体
直播中

王刚

8年用户 1352经验值
私信 关注
[问答]

如何实现在2个DMA通道上进行定期ADC捕获呢

我正在尝试在 2 个通道上进行定期 ADC 捕获,由 tiM5 触发。ADC 应通过 DMA 输出到内存,每次完成时都会有 DMA 中断以读取每次扫描的数据。
到目前为止,DMA 中断没有命中,ADC 甚至似乎没有读取任何内容。有什么想法我想念的吗?
GPIO 上的 TIM5_CC4 输出。ADC 捕获应该与之同步,所以我正在尝试使用 TIM5_CC3 来触发 ADC。
代码由 STM32CubeMX 6.1.1 生成,带有 STM32F4 包 1.25.2。(在 MX_ADC1_Init() 之前调用 MX_DMA_Init()。)
一些相关函数调用的顺序:
  • // in main():
  •   HAL_Init();
  •   SystemClock_Config();
  •   MX_GPIO_Init();
  •   MX_DMA_Init();
  •   // elsewhere, after OS starts:
  •   MX_ADC1_Init();
编辑:添加相关代码摘录作为附件。

回帖(1)

肖锋

2022-12-23 15:03:19
在进一步调查中,我发现在启动 PWM 输出之前没有使用(非 LL)HAL 启用通道的认可方式。
我正在通过(ab)使用私有函数 TIM_CCxChannelCmd() 来解决这个问题。我已经更换了


  •   TIM_CCxChannelCmd(htim5.Instance, TIM_CHANNEL_4, TIM_CCx_ENABLE);




  •   TIM_CCxChannelCmd(htim5.Instance, TIM_CHANNEL_3, TIM_CCx_ENABLE);
  •   TIM_CCxChannelCmd(htim5.Instance, TIM_CHANNEL_4, TIM_CCx_ENABLE);
  •   HAL_TIM_Base_Start(&htim5);

编辑:DMA 中断还不正确。中断被敲了一会儿,然后就不再调用了。我认为 ADC 配置不正确。但我现在已经越过了主要障碍。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分