OpenEdv-开源电子网

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

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

[复制链接]

3

主题

8

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-3-16
在线时间
6 小时
发表于 2020-3-16 03:20:55 | 显示全部楼层 |阅读模式
4金钱
因为产品需要,要短路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#楼]

浮空就不能得到准确的电平值,换成弱上拉或弱下拉,使引脚分离后能有一个准确的电平状态
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2583
金钱
2583
注册时间
2019-10-18
在线时间
414 小时
发表于 2020-3-16 03:20:56 | 显示全部楼层
浮空就不能得到准确的电平值,换成弱上拉或弱下拉,使引脚分离后能有一个准确的电平状态
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-3-16
在线时间
6 小时
 楼主| 发表于 2020-3-16 10:34:45 | 显示全部楼层
decai 发表于 2020-3-16 10:20
浮空就不能得到准确的电平值,换成弱上拉或弱下拉,使引脚分离后能有一个准确的电平状态

谢谢大神,我回去试试。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-3-16
在线时间
6 小时
 楼主| 发表于 2020-3-16 20:15:27 | 显示全部楼层
decai 发表于 2020-3-16 10:20
浮空就不能得到准确的电平值,换成弱上拉或弱下拉,使引脚分离后能有一个准确的电平状态

大神试了你的提议,改成了下拉输入,效果还可以。不管插拔都进中断,但是得到的电平不准。有时通路,结果中断中得到的为低电平,有时反之。是不是要加个100K的电阻?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 13:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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