使用DMA读取多个ADC通道工作不正常
本帖最后由 cutfall 于 2025-6-25 22:55 编辑正在尝试使用DMA方法读取多个ADC通道。我无法解读数值。
还测试了DMA和轮询方法,但没有工作。uint32_t value; HAL_ADC_Start_DMA(&hadc1, value, 2); // start adc in DMA mode
//polling method
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
value= HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1); HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
value= HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);用的是DMA通道1的ADC 1。,不知道哪里配置不对
在CubeMX生成的代码中,MX_DMA_Init()应该在MX_ADC1_Init()之前调用。 DMA仅读取第一个通道数据,后续通道值不更新。 先启动DMA再启动ADC转换 DMA请求可能在ADC转换完成之前就被触发,或者DMA传输在ADC转换开始之前就开始。 检查ADC的时钟配置。ADC的工作频率 利用串口打印或其他方式输出关键变量值 循环模式下,缓冲区长度需大于等于DMA一次性传输的数据量。 使用扫描模式(ADC_ScanConvMode_Enable)来读取多个通道。 在多通道模式下,需要配置每个通道的采样时间和转换顺序。 ADC的多通道扫描模式可能没有正确配置,或者ADC的规则组和注入组设置不正确。 ADC扫描模式没启用? 估计是DMA配置错误吧。 检查DMA数据方向、内存增量模式或数据宽度配置是否有误。 可能是通道顺序与规则组配置不匹配。 更新HAL库版本到最新版本。 检查时钟配置还有通道顺序。 临时禁用多通道扫描,仅测试单个通道 DMA通道或ADC通道可能与其他外设存在资源冲突。 避免因采样时间不足导致数据错误。
页:
[1]
2