初级会员

- 积分
- 80
- 金钱
- 80
- 注册时间
- 2014-3-12
- 在线时间
- 0 小时
|
一个输入捕获的程序,计数值周期内溢出一个后flagpp计数值应该是从0加1的但是从计数器里看竟然是6F,然后做16位左移位运算后竟然直接变成零,
在程序里做32位运算只是低16位相加。真心搞不懂,这是怎么回事。
while(1)
{
flagcycle=0x66; // !=0
TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清溢出标志位可有可无,
flagpp=0x00000000;
if(TIM_GetFlagStatus(TIM1, TIM_FLAG_CC1) == RESET) // 没检测到上升沿
{
flagpp=0;
TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清溢出标志位
}else //检测到上升沿
{
TIM_ClearFlag(TIM1, TIM_FLAG_CC1);//清捕获标志位
TIM1CH3_CAPTURE_VAL1=TIM_GetCapture1(TIM1); //get=val1
while(flagcycle)
{
if(TIM_GetFlagStatus(TIM1, TIM_FLAG_CC1) == RESET) //没检测到第二个上升沿
{
if(TIM_GetFlagStatus(TIM1, TIM_FLAG_Update) == SET) //标志位溢出
{
TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清溢出标志位
flagpp++;
}
}else
{
TIM_ClearFlag(TIM1, TIM_FLAG_CC1);//清捕获标志位
TIM1CH3_CAPTURE_VAL2=TIM_GetCapture1(TIM1); //get=val2
flagcycle=0; //出循环
if(TIM_GetFlagStatus(TIM1, TIM_FLAG_Update) == SET) //标志位溢出
{
TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清溢出标志位
flagpp++;
}
}
}
//显示转换算法
if(flagpp==0)
{
temp0=TIM1CH3_CAPTURE_VAL2-TIM1CH3_CAPTURE_VAL1;
temp0=temp0&0x0000FFFF;
}else
{
tryinghard0=flagpp;
flagpp=flagpp<<16; // left_move16bit
flagpp=flagpp&0xFFFF0000;
tryinghard3=flagpp;
temp0=flagpp+TIM1CH3_CAPTURE_VAL2-TIM1CH3_CAPTURE_VAL1;//-0x00F00000; //
tryinghard1=TIM1CH3_CAPTURE_VAL2-TIM1CH3_CAPTURE_VAL1;
tryinghard2=0x00010000+TIM1CH3_CAPTURE_VAL2-TIM1CH3_CAPTURE_VAL1;
} |
|