用stm32测量外部编码器的脉冲个数,怎么实现?输入捕获模式可以吗?
2个回答
展开全部
测量脉冲就是输入捕获
追问
测量的是脉冲个数,不是周期与脉宽
追答
那就挂在外部中断上
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如用TIM2定时器对一个脉冲进行计数,则TIM2配置如下:
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM2); //TIM2寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Prescaler = 0x00; //TIM1时钟频率的预分频值,时钟频率=72/(时钟预分频+1) ;
TIM_TimeBaseStructure.TIM_Period = 124; //自动重装载寄存器周期值,累计125个后产生个更新或者中断;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //定时器模式 向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted, 0); //配置TIM1的外部时钟模式2,预分频OFF(关闭),低电平或下降沿沿有效,不需要滤波器;
TIM_SetCounter(TIM2, 0x0);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除溢出中断标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断 溢出中断
}
中断函数:
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清TIM2标志位
}
}
在主函数中在合适的地方使能TIM2就可以了,上面的程序仅供参考,临时编写的,可能有错误的。
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM2); //TIM2寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Prescaler = 0x00; //TIM1时钟频率的预分频值,时钟频率=72/(时钟预分频+1) ;
TIM_TimeBaseStructure.TIM_Period = 124; //自动重装载寄存器周期值,累计125个后产生个更新或者中断;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //定时器模式 向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted, 0); //配置TIM1的外部时钟模式2,预分频OFF(关闭),低电平或下降沿沿有效,不需要滤波器;
TIM_SetCounter(TIM2, 0x0);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除溢出中断标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断 溢出中断
}
中断函数:
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清TIM2标志位
}
}
在主函数中在合适的地方使能TIM2就可以了,上面的程序仅供参考,临时编写的,可能有错误的。
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询