rc滤波

这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()即可。

posted @ 2014-08-18 15:41  西瓜大叔  阅读(373)  评论(0编辑  收藏  举报