STM32定时器 输入捕获实现双边沿检测

来源:互联网 发布:手机淘宝如何换货 编辑:程序博客网 时间:2024/06/04 20:05
STM32的定时器有输入捕获功能,在STM32F10x_tim.h中对于TIM_Input_Capture_Polarity有如下定义


#define  TIM_ICPolarity_Rising             ((uint16_t)0x0000)#define  TIM_ICPolarity_Falling            ((uint16_t)0x0002)#define  TIM_ICPolarity_BothEdge           ((uint16_t)0x000A)#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \                                      ((POLARITY) == TIM_ICPolarity_Falling))#define IS_TIM_IC_POLARITY_LITE(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \                                           ((POLARITY) == TIM_ICPolarity_Falling)|| \                                           ((POLARITY) == TIM_ICPolarity_BothEdge))       

可以 可以出具有BothEdge也就是双边沿检测,但是实际上并没有

如下图所示


执行的是没有双边沿的,因此我们要手工实现双边沿,如下见技术手册




也就是在中断中我们可以选择检测本次中断是上升沿中断还是下降沿中断,如果是上升沿中断,就修改为下降沿中断,反之就修改为上升沿中断。


void TIM1_CC_IRQHandler(void)// 用相应的定时器中断 {u8 i;if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET)//是TIM1CH2{TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);//清空捕获标志if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))//如果当前是高电平,那么下降沿,反之设置上升沿~!!!灵感!TIM1->CCER|=(1<<1);elseTIM1->CCER&=~(1<<1);}}

既可以实现上升沿和下降沿



0 0
原创粉丝点击