2019-10-11 16:33发布
FantaSy_ 发表于 2017-3-9 09:47 开两路输入捕获,一路检验上升沿,另一路下降沿,然后获取他们的时间数再运算,就可以知道T这个时间了
Electronic 发表于 2017-3-9 09:50 2楼说得对,一个上升沿捕获,一个下降沿捕获,也可以一个外部中断,一个输入捕获+定时器计数,同样两个外部 ...
yijinxiaoyou 发表于 2017-3-10 09:57 跟计数器有什么关系啊?又不是计频率
最多设置5个标签!
谢谢你提供的思路,我现在用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。
跟计数器有什么关系啊?又不是计频率
就算你用两个输入捕获引脚捕获,不还是一样需要用到定时器的计数功能,那怎么测量时间差
一周热门 更多>