中级会员
 
- 积分
- 413
- 金钱
- 413
- 注册时间
- 2015-2-1
- 在线时间
- 1 小时
|
5金钱
请问一下,我编写了一个tm5定时器输入捕获,中断是进去了,可是输出不了,单步调试的时候赋值不对 Time = IC3ReadValue2 - IC3ReadValue1; IC3ReadValue1 = TIM_GetCapture1(TIM5);简单的赋值左右数值都不一样,右边经常等于0.请问是什么原因呢代码如下,printf输出f=0
void TIM5_IRQHandler (void)
{CaptureNumber =0;
if(TIM_GetITStatus(TIM5, TIM_IT_CC1) == SET)
{
/* Clear TIM3 Capture compare interrupt pending bit */
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1);
if(CaptureNumber == 0)
{
/* Get the Input Capture value */
IC3ReadValue1 = TIM_GetCapture1(TIM5);
CaptureNumber = 1;
}
else if(CaptureNumber == 1)
//处理第二次捕获
{
if(TIM_GetFlagStatus(TIM5,TIM_FLAG_Update) != SET)//两次捕获间没有发生溢出的处理
{
IC3=3;
IC3ReadValue2= TIM_GetCapture1(TIM5);
Time = IC3ReadValue2 - IC3ReadValue1;
}
else
{
TIM_ClearFlag(TIM5,TIM_FLAG_Update); //产生了更新事件
Time = 0xFFFFFFFF - IC3ReadValue1 + TIM_GetCapture1(TIM5)+1; //如果有更新事件产生时候的计算方式
}
CaptureNumber = 0;
if(Time!=0)
{
freq= 500000/Time;
//计算频率
}
freq = freq; //避免变量freq被编译器优化掉
}
} printf(" f = %4.5fV \r\n", freq);
// TIM_Cmd(TIM5,DISABLE );
}
|
|