ST意法半导体
直播中

莫循虎

7年用户 934经验值
私信 关注
[问答]

如何通过ADC-DMA多通道获得适当的ADC值?

我希望通过 ADC-DMA 多通道获得适当的 ADC 值。
这些 ADC-DMA 有 4 个通道:试图从 3 个外部端口获取 3 个电压数据,从一个内部端口获取温度数据。
但我意识到我从外部端口得到的值很不正确,
而且,温度值也不可信。
我想我使用中断的接收 ADC-DMA 值方法不正确..
因此,如果您看到我的代码并检查一些可能的错误,我将非常高兴。
为了粗略的解释,我试着做了这些步骤来获取 ADC-DMA 多通道数据
  • ADC DMA 初始化
  • 定时器允许 DMA 定期中断
  • DMA中断时,加入adcBuffer
  • 中断动作 50 次,停止 DMA 中断并对这些添加的 adcBuffer 取平均值
  • 阅读并使用这些平均值
  • 阶段 2 再次运行
无效 DMA1_Channel1_IRQHandler(void)
{
  
HAL_DMA_IRQHandler(hadc.DMA_Handle);
  
   
// 这些“_total”值是无符号长整数,这些值将由“/MEASURE_RATE”取平均值
   
   originalVolt_total+= adcBuffer[0];
   referenceVolt_total += adcBuffer[1];
   
   batteryVolt_total += adcBuffer[2];
   
   测量次数+=1;
   
   if(measuringtimes >= MEASURE_RATE){ // 如果此中断发生 50 次,则:
     
    HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn); //禁止添加ADC数据
   
    计算ADC();// 平均阶段
    在测量=0;// 如果平均阶段完成,Tim2 重新初始化 DMA 中断。
    测量次数=1;
     
   }  
}
  
}







回帖(1)

刘德凤

2023-1-17 11:18:31
如果您想使用 DMA 记录 ADC,可以使用“中断校准解决方案”。
举报

更多回帖

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