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

2019-10-11 16:33发布

如题,要捕获图中两路波形中的T,求出T的宽度。
一路波形的话,可以用普通的输入捕获,两路的话要如何捕获呢?求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
FantaSy_
1楼-- · 2019-10-11 22:03
 精彩回答 2  元偷偷看……
Electronic
2楼-- · 2019-10-12 00:04
2楼说得对,一个上升沿捕获,一个下降沿捕获,也可以一个外部中断,一个输入捕获+定时器计数,同样两个外部中断+定时器计数也是可以的,随便你怎么使用,最后一种方式可以在定时器紧张的时候使用定时器6和7,因为只要计数就可以了。
kibin
3楼-- · 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。
yijinxiaoyou
4楼-- · 2019-10-12 05:07
Electronic 发表于 2017-3-9 09:50
2楼说得对,一个上升沿捕获,一个下降沿捕获,也可以一个外部中断,一个输入捕获+定时器计数,同样两个外部 ...

跟计数器有什么关系啊?又不是计频率
Electronic
5楼-- · 2019-10-12 07:26
yijinxiaoyou 发表于 2017-3-10 09:57
跟计数器有什么关系啊?又不是计频率

就算你用两个输入捕获引脚捕获,不还是一样需要用到定时器的计数功能,那怎么测量时间差
kibin
6楼-- · 2019-10-12 12:23
 精彩回答 2  元偷偷看……

一周热门 更多>