这2天在做一个项目,需要用到光电开关检测位置,因为想到stm32有外部中断EXTI功能,就决定用它吧,不用不知道,用了才发现不像想象的那样简单,程序竟然没按预期动作,调试发现中断进入多次,对照手册,没找到外部中断的滤波设置,所以就按以前的老方法,来个软件滤波吧,效果不错,
1 static unsigned char exti4 = 0; 2 void exti(void) 3 { 4 exti4 |= GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4); 5 if((exti4&0xf) == 0xc) //falling 6 { 7 //key3handler(0); 8 key3handler_up(0); 9 LED = 1; 10 //printf("fall \r\n"); 11 } 12 else if((exti4&0xf) == 0x3) // rising 13 { 14 key3handler(0); 15 LED = 0; 16 //printf("rising \r\n"); 17 } 18 exti4 <<= 1; 19 }
在ms中断中调用exti()即可。
rc滤波
时间: 2024-10-13 15:22:03