关于 计数器 的使用问题

发布: 2010-4-20 16:08 | 作者: free123 | 来源: StmFans思蜕盟 OPELC 自由电子联盟

请教一个问题,pb0接脉冲信号,我想用tim3做计数器,我希望它计数4次产生一次中断。该怎么配置tim3?
我现在是这样写的

  TIM_DeInit( TIM3);//复位TIM3定时器

  TIM_TimeBaseStructure.TIM_Period = 0xffff;
  TIM_TimeBaseStructure.TIM_Prescaler = 7999;                         //这个值是如何确定?
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  
  TIM_ICStructInit(&TIM_ICInitStructure);

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;                   //通道选择
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       //上升沿触发
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;    //管脚与寄存器对应关系
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;           //输入预分频。
  TIM_ICInitStructure.TIM_ICFilter = 0x0;                            //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF

  TIM_ICInit(TIM3, &TIM_ICInitStructure);                 //根据参数配置TIM外设信息

  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件

  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发

  /* TIM enable counter */
  TIM_Cmd(TIM3, ENABLE);                                 //启动TIM2

  /* Enable the CC2 Interrupt Request */         
  TIM_ITConfig(TIM3, TIM_IT_CC3, ENABLE);     //打开中断



void TIM3_IRQHandler(void)
{
  u32 IC2Value;
  u16 TIMCounter;
  TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);

   TIMCounter = TIM_GetCounter(TIM3);
   /* Get the Input Capture value */
  IC2Value = TIM_GetCapture3(TIM3);                         //读取IC2捕获寄存器的值,即为PWM周期的计数值
  if (IC2Value != 0)
  {
  }
  }

在中断处理函数里读不出来计数值
free123 (2010-4-20 16:37:19)
同时我想知道计数4次用了多少时间,是不是还需要别的定时器来计算?