中级会员
 
- 积分
- 317
- 金钱
- 317
- 注册时间
- 2014-2-4
- 在线时间
- 9 小时
|

楼主 |
发表于 2015-7-16 09:08:18
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 35;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
捕获计数时间是0.5US
TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x03;
TIM_ICInit(TIM4, &TIM_ICInitStructure);
带八个周期滤波。
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
if(time_flow<200) time_flow++; //溢出中断数加一
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}
if(TIM_GetITStatus(TIM4, TIM_IT_CC4) != RESET) //捕获中断
{
if(TIM4CH4_CAPTURE_STA) //下降沿捕获
{
IC4ReadValue=TIM_GetCapture4(TIM4);//获取捕获值
TIM_SetCounter(TIM4,0);//计数器清0
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising);//设置为上升沿
if(count<1000)
f[count++]=(time_flow*65536+IC4ReadValue)/2;//将捕获到时间转换为US
time_flow=0;
TIM4CH4_CAPTURE_STA=0;//标志下次为上升沿捕获
}
else
{
IC4ReadValue=TIM_GetCapture4(TIM4);//获取捕获值
TIM_SetCounter(TIM4,0);//计数器清0
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling);//设置为下降沿
if(count<1000)
f[count++]=(time_flow*65536+IC4ReadValue)/2; //将捕获到时间转换为US
time_flow=0;
TIM4CH4_CAPTURE_STA=1;//标志下次为下降沿捕获
}
TIM_ClearITPendingBit(TIM4,TIM_IT_CC4);
}
}
这样设置没什么问题吧 |
|