关于程序消抖问题请大家帮忙看看

2019-07-21 00:44发布

1.png
大家好,我的PA3口是接收外部给的信号进行翻转的,由于速度比较快红圈内电平翻转的次数可能会有很多次,但是我想在T的时间之内,能把PA3多次翻转只认为是一次翻转,T的时间范围是40ms到590ms,
这个T的时间我是运用外部电容冲放电来实现的,本来我想当PA3=1时就让定时器做40ms到590ms的延时来配合外部电容的冲放电,从而用PA5口的翻转来实现PA3只翻转一次,现在我发现一个问题,只要PA3=1后定时器就会做40ms到590ms的延时
但是我只想要在T的时间也不管PA3有多少次为1,定时器只做一次40ms到590ms的延时,求大家帮忙谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
warship
1楼-- · 2019-07-21 00:49
 精彩回答 2  元偷偷看……
hlphzy123456
2楼-- · 2019-07-21 01:49
 精彩回答 2  元偷偷看……
edmund1234
3楼-- · 2019-07-21 06:01
本帖最后由 edmund1234 于 2019-5-28 21:10 编辑

        u8        DebC=0;                // 全局        
        
        //---------------- 把下面的放在你认为需要检测PA3的地方, 或放在PA3的外部中断函数里        
        if (!DebC){
                if (GPIOA->IDR & (1<<3)){
                        GPIOA->BSRR = (1<<5);
                        DebC = 40;                                        // 40ms
                }
        }
        
        //---------------- 把下面的放在CycTick 中断里, 当然要使能SysTick中断
        if (DebC) {
                if (!--DebC)
                     GPIOA->BSRR = (1<<(5+16));
       }

一周热门 更多>