STM32如何捕获两路波形的时间差

2019-10-11 16:33发布

如题,要捕获图中两路波形中的T,求出T的宽度。
一路波形的话,可以用普通的输入捕获,两路的话要如何捕获呢?求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
kibin
2019-10-12 02:34
FantaSy_ 发表于 2017-3-9 09:47
开两路输入捕获,一路检验上升沿,另一路下降沿,然后获取他们的时间数再运算,就可以知道T这个时间了

谢谢你提供的思路,我现在用TIM2的CH1/CH2两个通道开启捕获,参照单路捕获,代码如下:u8  TIM_CAPTURE_STA=0;                                           
u16        TIM_CAPTURE_VAL;       
void TIM2_IRQHandler(void)
{
        if((TIM_CAPTURE_STA&0X80)==0)
        {
                if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
                {            
                        if(TIM_CAPTURE_STA&0X40)
                        {
                                if((TIM_CAPTURE_STA&0X3F)==0X3F)
                                {
                                        TIM_CAPTURE_STA|=0X80;
                                        TIM_CAPTURE_VAL=0XFFFF;
                                }else TIM_CAPTURE_STA++;
                        }         
                }
                if(TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
                {
                        TIM_CAPTURE_STA=0;                       
                        TIM_CAPTURE_VAL=0;
                        TIM_SetCounter(TIM2,0);
                        TIM_CAPTURE_STA|=0X40;               
                }
                if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
                {
                        if(TIM_CAPTURE_STA&0X40)               
                        {
                                TIM_CAPTURE_STA|=0X80;               
                                TIM_CAPTURE_VAL=TIM_GetCapture1(TIM2);
                        }
                }
        }
   TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ
}

-------------------------------------------------------------------------------------
main函数里面打印:
                if(TIM_CAPTURE_STA&0X80)、
                {
                        temp=TIM_CAPTURE_STA&0X3F;
                        temp*=65536;                                       
                        temp+=TIM_CAPTURE_VAL;               
                        printf("CAP:%d us ",temp);       
                        TIM_CAPTURE_STA=0;                       

                }

请问这样写错在哪里吗?现在打印的结果跟我示波器看到的相差很多,实际上只有498us而程序打印了15998us。

一周热门 更多>