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

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);
		else
			TIM1->CCER&=~(1<<1);
}}
			
	

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



  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值