[STM32F1] 触发不稳定

[复制链接]
1687|52
 楼主| chuxh 发表于 2022-4-7 19:47 | 显示全部楼层 |阅读模式
STM32F1短路断路针脚实现外部中断,触发不稳定
juventus9554 发表于 2022-4-7 19:57 | 显示全部楼层
楼主详细说说怎么回事啊,这么说太笼统了
 楼主| chuxh 发表于 2022-4-7 20:06 | 显示全部楼层
因为产品需要,要短路2个针脚,一个针脚设置为推挽输出,50MZ。一个针脚设置为浮空输入,并设置为捕捉上升沿和下降沿的外部中断位。然后用杜邦线将两个针脚插一起。这个时候应该是触发上升沿,然后拔掉一个针脚,应该是触发下降沿的。结果非常不好用。有时拔掉以后,也不触发下降沿。有时插上不触发上升沿,有时杜邦线活动一下,就不断的进中断
jiajs 发表于 2022-4-7 20:10 | 显示全部楼层
加软件消抖了吗
 楼主| chuxh 发表于 2022-4-7 20:12 | 显示全部楼层
已经加了软件消抖。
llljh 发表于 2022-4-7 20:14 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| chuxh 发表于 2022-4-7 20:17 | 显示全部楼层
#define LOCK_EXIT_GPIO_CLK                                         RCC_APB2Periph_GPIOA

#define LOCK_EXIT_GPIO_PORT                                         GPIOA

#define LOCK_EXIT_GPIO_PIN                                         GPIO_Pin_4

#define LOCK_EXIT_GPIO_PORTSOURCE          GPIO_PortSourceGPIOA

#define LOCK_EXIT_GPIO_PINSOURCE          GPIO_PinSource4

#define LOCK_EXIT_LINE                                                  EXTI_Line4

#define LOCK_EXIT_IRQN                                                        EXTI4_IRQn

#define LOCK_EXIT_IRQHANDLER                                EXTI4_IRQHandler



#define LOCK_STA GPIO_ReadInputDataBit(LOCK_EXIT_GPIO_PORT, LOCK_EXIT_GPIO_PIN)



#define LOCK_OUT_GPIO_CLK                                         RCC_APB2Periph_GPIOA

#define LOCK_OUT_GPIO_PORT                                 GPIOA

#define LOCK_OUT_GPIO_PIN                                         GPIO_Pin_5
 楼主| chuxh 发表于 2022-4-7 20:19 | 显示全部楼层
lock_gpio.GPIO_Pin = LOCK_EXIT_GPIO_PIN;

        lock_gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;

        GPIO_Init(LOCK_EXIT_GPIO_PORT, &lock_gpio);

      

        lock_gpio.GPIO_Pin = LOCK_OUT_GPIO_PIN;   

        lock_gpio.GPIO_Mode = GPIO_Mode_Out_PP;      

        lock_gpio.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(LOCK_OUT_GPIO_PORT, &lock_gpio);



        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);

      

        GPIO_EXTILineConfig(LOCK_EXIT_GPIO_PORTSOURCE, LOCK_EXIT_GPIO_PINSOURCE);

        lock_exti.EXTI_Line = LOCK_EXIT_LINE;

        lock_exti.EXTI_Mode = EXTI_Mode_Interrupt;

        lock_exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling;

        lock_exti.EXTI_LineCmd = ENABLE;

      

        EXTI_Init(&lock_exti);

      

        GPIO_SetBits(LOCK_OUT_GPIO_PORT, LOCK_OUT_GPIO_PIN);
 楼主| chuxh 发表于 2022-4-7 20:21 | 显示全部楼层
char lockStatus;

char isUnLock;

void LOCK_EXIT_IRQHANDLER(void)

{

         if(EXTI_GetITStatus(LOCK_EXIT_LINE) != RESET){

                        

                 if(LOCK_STA != lockStatus){

                                delay_ms(10);

                         if(LOCK_STA != lockStatus){

                                if(!isUnLock){

                                        lockStatus = LOCK_STA;

                                        isUnLock = 1;

                                 }

                         }

                 }

         }

         delay_ms(100);

         EXTI_ClearITPendingBit(LOCK_EXIT_LINE);

}
 楼主| chuxh 发表于 2022-4-7 20:24 | 显示全部楼层
我的代码有问题吗?如果没问题,那我是不是要加电容解决?
renyaq 发表于 2022-4-7 20:29 | 显示全部楼层
加多少,怎么加合适?
 楼主| chuxh 发表于 2022-4-7 20:32 | 显示全部楼层
如果不建议这种方式,那怎么做能判断一个线路是通路还是短路呢?
spark周 发表于 2022-4-7 20:34 | 显示全部楼层
两个管脚不能直接连,用个1~5K的电阻
chenjun89 发表于 2022-4-7 20:35 来自手机 | 显示全部楼层
怎么个不稳定法?
wyjie 发表于 2022-4-7 20:36 | 显示全部楼层
当然你可以直接杜邦线连
llljh 发表于 2022-4-7 20:38 | 显示全部楼层
不过你就要多烧香估计可行,输出用上拉,输入用下拉,80%的几率是高
pengf 发表于 2022-4-7 20:41 | 显示全部楼层
检测到H马上翻转入下降检测,不需要电容,用“滴答”1mS为基准延时,50Mhz不现实,会成神经病的
heweibig 发表于 2022-4-7 20:43 | 显示全部楼层
什么叫插上上升沿,拔下下降沿?
 楼主| chuxh 发表于 2022-4-7 20:51 | 显示全部楼层
你那个配置为输入的管脚没接外部电路的话,电平就是不定的
 楼主| chuxh 发表于 2022-4-7 20:53 | 显示全部楼层
没接外部电路,难道不能使用stm32的针脚供电,必须由外部供电?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部