打印

输入捕获脉冲宽度计时疑问

[复制链接]
2537|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanjinbin|  楼主 | 2012-10-19 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yanjinbin 于 2012-10-19 11:10 编辑

1.定时配置配置     TIM_TimeBaseStructure.TIM_Period = 0xFFFF -1;                 
//定时器每3.2768S溢出一次            
TIM_TimeBaseStructure.TIM_Prescaler =3600-1 ;                       //预分频系数,72000 000/36000 = 2000,定时器时钟为2KHz=50us   
TIM_TimeBaseStructure.TIM_ClockDivision = 0;        
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
//向上+1模式        
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);     
TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;               
//定时器4通道4  
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        
//上升沿捕获-TIM_ICPolarity_Rising  
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
//通道方向选择-连接到IC2  
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         
//每个时间都捕获,即每次上升沿都会触发定时器
TIM_ICInitStructure.TIM_ICFilter = 0x0;                        
//选择输入比较滤波器,滤波设置,经历几个周期跳变认定波形稳定0x0~0xF。
  TIM_ICInit(TIM4,&TIM_ICInitStructure);      
TIM_ClearFlag( TIM2, TIM_IT_Update|TIM_IT_CC4 );        //清除标志位
TIM_ITConfig(TIM4, TIM_IT_Update|TIM_IT_CC4 , ENABLE);           
//使能定时器4 溢出中断和捕获中断        
TIM_Cmd(TIM4, ENABLE);                                    
//使能定时器4计时  
2.中断处理
void TIM4_IRQHandler(void)
{  
static u32 ThisPluse = 0;  //当前值  
static u32 LastPluse = 0;  //保存上一个值  
u32 Tmp = 0;  
if(TIM_GetITStatus(TIM4, TIM_IT_CC4) == SET)   {  
  /* 清除TIM4捕获比较中断挂起位 */   
TIM_ClearITPendingBit(TIM4, TIM_IT_CC4);   
CntCount++;   
ThisPluse = TIM_GetCapture4(TIM4);   //获取脉冲间隔     
if(ThisPluse > LastPluse)    {     
Tmp = ThisPluse - LastPluse;  
  }else{   
  Tmp = 0xFFFF-LastPluse + ThisPluse;  
  }      
  LastPluse = ThisPluse;             //保存历史值   
Tmp = Tmp*50/1000;  
  LOG_PR("%D-%Dms\r\n",CntCount,Tmp);
}
3.产看打印输出语句LOG_PR("%D-%Dms\r\n",CntCount,Tmp);
  这里使用脉冲发生器,给其一个1Hz的脉冲。
  采集输出时:"1-1971ms",输出间隔是2s,为什么不是1s.

  这里设置TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //每个事件都捕获,如果是每个脉冲的上边沿都会触发,那么脉冲宽度应该是1s.
  这个参数设置的含义,到底是什么。
沙发
acgean| | 2012-10-19 16:33 | 只看该作者
是的, 就是每个事件都捕获.

使用特权

评论回复
板凳
yanjinbin|  楼主 | 2012-10-19 19:53 | 只看该作者
事件和脉冲之间的关系是什么.
2个脉冲=1个事件 ???
照我的理解,1个脉冲=1个事件,1hz输入频率,那么1个脉冲宽度就是1s.
现在实际是:1个事件宽度2s,1hz输入频率,1个脉冲宽为1s.所以1个事件经过了2个脉冲。
STM32手册有那段时描述:1个事件=2个脉冲 说明。
请指教.....

使用特权

评论回复
地板
airwill| | 2012-10-19 20:38 | 只看该作者
1个事件=2个脉冲 说明 在哪里说的, 应该有前提吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

50

帖子

0

粉丝