landoli 发表于 2020-3-16 10:36:24

STM32F1短路断路针脚实现外部中断,触发不稳定

因为产品需要,要短路2个针脚,一个针脚设置为推挽输出,50MZ。一个针脚设置为浮空输入,并设置为捕捉上升沿和下降沿的外部中断位。然后用杜邦线将两个针脚插一起。这个时候应该是触发上升沿,然后拔掉一个针脚,应该是触发下降沿的。结果非常不好用。有时拔掉以后,也不触发下降沿。有时插上不触发上升沿,有时杜邦线活动一下,就不断的进中断。已经加了软件消抖。
想问一下,我的代码有问题吗?如果没问题,那我是不是要加电容解决?加多少,怎么加合适?如果不建议这种方式,那怎么做能判断一个线路是通路还是短路呢?
请大神帮忙!!!
#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_5lock_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);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);
}

mylovemcu 发表于 2020-3-16 11:20:23

输入针脚不用配置成浮空输入的上拉或者下拉都可以上拉常态就是高电平下拉常态就是低电平这样确定进中断的方式

如果软件采用中断输入不建议采用软件消抖采用1K电阻和0.1uf电容进行硬件消抖

landoli 发表于 2020-3-16 14:23:55

mylovemcu 发表于 2020-3-16 11:20
输入针脚不用配置成浮空输入的上拉或者下拉都可以上拉常态就是高电平下拉常态就是低电平这样确定进 ...

谢谢大神!我准备加个电阻
页: [1]
查看完整版本: STM32F1短路断路针脚实现外部中断,触发不稳定