求教各路大佬,关于使用两路 ADC 看门狗
在采集ADC 数据时,我需要尽可能用最短的时间确定ADC 数据中波形的起始和结束位置。由于一帧 ADC 数据有1000多个点,用软件查找速度比较慢,所以想到使用两个看门狗,设置不同的上下阈值,确定波形的起始和结束位置。现在的情况是 两路ADC 看门狗采集到的 位置有误差,一个单峰的波形有两个起始结束位置。代码如下:
void ADC1_2_IRQHandler(void)
{
NVIC_DisableIRQ(ADC1_2_IRQn);
if((ADC_GetFlagStatus(ADC1, ADC_FLAG_AWD2) != RESET) )
{
wave.wave_up_index = EPC_PIX_Number - DMA_GetCurrDataCounter(PixData_AD_DMAChannel); //触发看门狗的位置
ADC_ITConfig(ADC1, ADC_IT_AWD2, DISABLE);//提前关闭中断,避免重复进入
AWD2_count++;
AWD2_count = AWD2_count % 4;
ADC_ClearITPendingBit(ADC1, ADC_IT_AWD2);
ADC_ITConfig(ADC1, ADC_IT_AWD3, ENABLE);//开启看门狗3
}
if((ADC_GetFlagStatus(ADC1, ADC_FLAG_AWD3) != RESET) )
{
NVIC_DisableIRQ(ADC1_2_IRQn);
wave.wave_down_index = EPC_PIX_Number - DMA_GetCurrDataCounter(PixData_AD_DMAChannel); //触发看门狗的位置
AWD3_count++;
AWD3_count = AWD3_count % 4;
ADC_ITConfig(ADC1, ADC_IT_AWD3, DISABLE);//提前关闭中断,避免重复进入
ADC_ClearITPendingBit(ADC1, ADC_IT_AWD3);
ADC_ITConfig(ADC1, ADC_IT_AWD2, ENABLE);
}
NVIC_EnableIRQ(ADC1_2_IRQn);
}
STM32的ADC内核实际上只有1个,分时采样方式来转换超过1通道的数据。
大概应该采用这种方式:
wenyangzeng 发表于 2020-4-28 21:12
STM32的ADC内核实际上只有1个,分时采样方式来转换超过1通道的数据。
大概应该采用这种方式:
大佬,冒昧地问一下,ADC的看门狗一般什么时候用 likang1202 发表于 2020-4-29 09:44
大佬,冒昧地问一下,ADC的看门狗一般什么时候用
ST手册里有介绍
wenyangzeng 发表于 2020-4-28 21:12
STM32的ADC内核实际上只有1个,分时采样方式来转换超过1通道的数据。
大概应该采用这种方式:
大佬,可以说的详细点吗? 这个和看门狗有什么关系呢? 蠢蠢的痒 发表于 2020-4-29 14:55
大佬,可以说的详细点吗? 这个和看门狗有什么关系呢?
楼主在一楼说明了要使用ADC看门狗功能的。所以图中在ADC采样值不在保护区就触发中断。
页:
[1]