我希望通过 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(measuring
times >= MEASURE_RATE){ // 如果此中断发生 50 次,则:
HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn); //禁止添加ADC数据
计算ADC();// 平均阶段
在测量=0;// 如果平均阶段完成,Tim2 重新初始化 DMA 中断。
测量次数=1;
}
}
}