使用TCRT5000模块时遇到的抖动问题

遇到的问题

在学习外部中断时,要用TCRT5000模块输入的下降沿来计数,中断方式选择了下降沿触发中断。

但使用以下中断代码时,无论遇到TCRT5000模块的D0口输出的上升沿还是下降沿,计数都会加1。

void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line14) == SET)
	{
		Count_Sensor ++;					//计数值自增一次
			
		EXTI_ClearITPendingBit(EXTI_Line14);
	}
}

解决方法

初步判断是TCRT5000模块的D0口输出波形在上升沿或下降沿处存在较大的抖动,导致芯片无法识别上升沿或下降沿,但是身边没有示波器,所以无法实际判断。

通过修改代码来改进:进入中断后,先延时,等抖动消失后,判断相应的GPIO口是否为低电平,如果是,就说明当前是一个下降沿,就可以计数加1。

void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line14) == SET)
	{
		//加上延时,以避免抖动
		Delay_ms(100);

		/*如果出现数据乱跳的现象,可再次判断引脚电平,加上延时,以避免抖动*/
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
		{
			
			Count_Sensor ++;					//计数值自增一次
			
		}
		EXTI_ClearITPendingBit(EXTI_Line14);
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值