关于 计数器 的使用问题
发布: 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)
{
}
}
在中断处理函数里读不出来计数值
我现在是这样写的
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)
{
}
}
在中断处理函数里读不出来计数值
