u16 TPAD_Get_Val(void)
{
TPAD_Reset();
while(TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//等待溢出
{
if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);//超时了,直接返回CNT的值
};
return TIM_GetCapture2(TIM5);
}
如上,把
return TIM_GetCapture2(TIM5);放在循环里面怎么就不行了呢??,通过仿真验证
TIM_GetITStatus(TIM5, TIM_IT_CC2) 一直为reset所以一直进不去,但是为什么会一直为RESET呢??
另外,还有一个问题上面所说的“等待溢出”不是太明白,应该是等待上升沿到来吧??根据手册检测到捕获标志位后读取标志位会清零标志位,所以while()语句实际上只运行一次
我对 while(TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET) 的理解是:检测到上升沿后清除捕获标志,并进入if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)的判断
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
明白了,非常感谢正点原子的解答!!
回复【3楼】jiajia: --------------------------------- 2,这里用错了一个函数,应该用:TIM_GetFlagStatus才对. 3,你测试下吧. 是否从0开始要看你的计数器模式,比如有中央对齐模式,加到arr再从arr减到0,那就不是突然变为0 了...
---------------------------------
TIM_GetFlagStatus和TIM_GetITStatus在这的作用相同吧,都是检测是否发生了捕获中断(是否捕获到了上升沿的标志位)
---------------------------------
我不用库函数。
一周热门 更多>