你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
landoli 提问时间:2020-3-16 10:36 /
因为产品需要,要短路2个针脚,一个针脚设置为推挽输出,50MZ。一个针脚设置为浮空输入,并设置为捕捉上升沿和下降沿的外部中断位。然后用杜邦线将两个针脚插一起。这个时候应该是触发上升沿,然后拔掉一个针脚,应该是触发下降沿的。结果非常不好用。有时拔掉以后,也不触发下降沿。有时插上不触发上升沿,有时杜邦线活动一下,就不断的进中断。已经加了软件消抖。
想问一下,我的代码有问题吗?如果没问题,那我是不是要加电容解决?加多少,怎么加合适?如果不建议这种方式,那怎么做能判断一个线路是通路还是短路呢?
请大神帮忙!!!
  1. #define LOCK_EXIT_GPIO_CLK                                         RCC_APB2Periph_GPIOA
  2. #define LOCK_EXIT_GPIO_PORT                                         GPIOA
  3. #define LOCK_EXIT_GPIO_PIN                                         GPIO_Pin_4
  4. #define LOCK_EXIT_GPIO_PORTSOURCE          GPIO_PortSourceGPIOA
  5. #define LOCK_EXIT_GPIO_PINSOURCE          GPIO_PinSource4
  6. #define LOCK_EXIT_LINE                                                  EXTI_Line4
  7. #define LOCK_EXIT_IRQN                                                        EXTI4_IRQn
  8. #define LOCK_EXIT_IRQHANDLER                                EXTI4_IRQHandler

  9. #define LOCK_STA GPIO_ReadInputDataBit(LOCK_EXIT_GPIO_PORT, LOCK_EXIT_GPIO_PIN)

  10. #define LOCK_OUT_GPIO_CLK                                         RCC_APB2Periph_GPIOA
  11. #define LOCK_OUT_GPIO_PORT                                 GPIOA
  12. #define LOCK_OUT_GPIO_PIN                                         GPIO_Pin_5
复制代码
  1. lock_gpio.GPIO_Pin = LOCK_EXIT_GPIO_PIN;
  2.         lock_gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  3.         GPIO_Init(LOCK_EXIT_GPIO_PORT, &lock_gpio);
  4.       
  5.         lock_gpio.GPIO_Pin = LOCK_OUT_GPIO_PIN;   
  6.         lock_gpio.GPIO_Mode = GPIO_Mode_Out_PP;      
  7.         lock_gpio.GPIO_Speed = GPIO_Speed_50MHz;
  8.         GPIO_Init(LOCK_OUT_GPIO_PORT, &lock_gpio);

  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);
  10.       
  11.         GPIO_EXTILineConfig(LOCK_EXIT_GPIO_PORTSOURCE, LOCK_EXIT_GPIO_PINSOURCE);
  12.         lock_exti.EXTI_Line = LOCK_EXIT_LINE;
  13.         lock_exti.EXTI_Mode = EXTI_Mode_Interrupt;
  14.         lock_exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  15.         lock_exti.EXTI_LineCmd = ENABLE;
  16.       
  17.         EXTI_Init(&lock_exti);
  18.       
  19.         GPIO_SetBits(LOCK_OUT_GPIO_PORT, LOCK_OUT_GPIO_PIN);
复制代码
  1. char lockStatus;
  2. char isUnLock;
  3. void LOCK_EXIT_IRQHANDLER(void)
  4. {
  5.          if(EXTI_GetITStatus(LOCK_EXIT_LINE) != RESET){
  6.                         
  7.                  if(LOCK_STA != lockStatus){
  8.                                 delay_ms(10);
  9.                          if(LOCK_STA != lockStatus){
  10.                                 if(!isUnLock){
  11.                                         lockStatus = LOCK_STA;
  12.                                         isUnLock = 1;
  13.                                  }
  14.                          }
  15.                  }
  16.          }
  17.          delay_ms(100);
  18.          EXTI_ClearITPendingBit(LOCK_EXIT_LINE);
  19. }
复制代码


收藏 评论2 发布时间:2020-3-16 10:36

举报

2个回答
mylovemcu 回答时间:2020-3-16 11:20:23
输入针脚不用配置成浮空输入的  上拉或者下拉都可以  上拉常态就是高电平  下拉常态就是低电平  这样确定进中断的方式

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

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

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

谢谢大神!我准备加个电阻

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版