OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2039|回复: 3

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

[复制链接]

11

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2019-5-23
在线时间
26 小时
发表于 2019-5-23 09:15:47 | 显示全部楼层 |阅读模式
1金钱
1.png
大家好,我的PA3口是接收外部给的信号进行翻转的,由于速度比较快红圈内电平翻转的次数可能会有很多次,但是我想在T的时间之内,能把PA3多次翻转只认为是一次翻转,T的时间范围是40ms到590ms,
这个T的时间我是运用外部电容冲放电来实现的,本来我想当PA3=1时就让定时器做40ms到590ms的延时来配合外部电容的冲放电,从而用PA5口的翻转来实现PA3只翻转一次,现在我发现一个问题,只要PA3=1后定时器就会做40ms到590ms的延时
但是我只想要在T的时间也不管PA3有多少次为1,定时器只做一次40ms到590ms的延时,求大家帮忙谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4521
金钱
4521
注册时间
2018-5-11
在线时间
946 小时
发表于 2019-5-23 11:17:22 | 显示全部楼层
在毫秒中断服务程序中,if(delay)delay--;
主程序中,
PA5=0;
delay=40 or 590;
主循环中,
if(delay && PA3) PA5=1;
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

11

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2019-5-23
在线时间
26 小时
 楼主| 发表于 2019-5-28 20:27:09 | 显示全部楼层
用定时器可以做吗
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-5-28 21:08:36 | 显示全部楼层
本帖最后由 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));
       }

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 17:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表