因为产品需要,要短路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_5
复制代码- 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);
复制代码- 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);
- }
复制代码
|
如果软件采用中断输入 不建议采用软件消抖 采用1K电阻和0.1uf电容进行硬件消抖
评分
查看全部评分
谢谢大神!我准备加个电阻