回复【7楼】 chengmingluo :
---------------------------------
[mw_shl_code=c,true]FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
{
ITStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_GET_FLAG(TIM_FLAG));
if ((TIMx->SR & TIM_FLAG) != (uint16_t)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}[/mw_shl_code]
TIM_GetFlagStatus函数的实现,注意,
TIMx->SR & TIM_FLAG的返回值,等于RESET的时候,说明:
TIMx->SR & TIM_FLAG ==0
在tpad.c里面
[mw_shl_code=c,true]//得到定时器捕获值
//如果超时,则直接返回定时器的计数值.
u16 TPAD_Get_Val(void)
{
TPAD_Reset();
while(TIM_GetFlagStatus(TIM5, TIM_IT_CC2) == RESET)//等待捕获上升沿
{
if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);//超时了,直接返回CNT的值
};
return TIM_GetCapture2(TIM5);
} [/mw_shl_code]
替换一下,不难理解,这就是判断:
TIMx->SR & TIM_FLAG ==0
再看寄存器代码:
[mw_shl_code=c,true]u16 TPAD_Get_Val(void)
{
TPAD_Reset();
while((TIM5->SR&0X04)==0)//等待捕获上升沿
{
if(TIM5->CNT>TPAD_ARR_MAX_VAL-500)return TIM5->CNT;//超时了,直接返回CNT的值
};
return TIM5->CCR2;
} [/mw_shl_code]
这不是一个意思么?
简单的问题,看你纠结了几天,我也真心纠结。。。。
|