OpenEdv-开源电子网

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

外部中断怪异现象!!!

[复制链接]

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
发表于 2018-6-14 11:54:35 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 无痕丶 于 2018-6-14 14:34 编辑

这是一个关于外部中断的实验,实验会出现很奇怪的现象,附件里面有小视频。
我按键还没按下,手靠近按键,灯就自己亮了。

这是外部中断配置的代码。

#include "EXTI.h"
#include "LED.h"
#include "delay.h"
#include "stdio.h"

void EXTI_2_4_init(void)
{
        //配置PE4(KEY0)和PE2 (KEY2)为浮空输入
        RCC->APB2ENR |= (0x1<<6);
        //PE2
        GPIOE->CRL &= ~(0xf<<4*2);
        GPIOE->CRL |= (0x4<<4*2);
        //PE4
        GPIOE->CRL &= ~(0xf<<4*4);
        GPIOE->CRL |= (0x4<<4*4);

        //开启复用功能时钟
        RCC->APB2ENR |= (0x1<<0);
        //外部中断线2
        AFIO->EXTICR[0] &= ~(0xf<<4*2);
        AFIO->EXTICR[0] |= (0x4<<4*2);
        //外部中断线4
        AFIO->EXTICR[1] &= ~(0xf<<4*0);
        AFIO->EXTICR[1] |= (0x4<<4*0);

        //外部中断线2位下降沿触发
        EXTI->FTSR |= (0x1<<2);
        EXTI->RTSR &= ~(0x1<<2);    //关闭上升沿触发
        //外部中断线4位下降沿触发
        EXTI->FTSR |= (0x1<<4);   
        EXTI->RTSR &= ~(0x1<<4);    //关闭上升沿触发

        //开启外部中断触发
        EXTI->IMR |= (0x1<<2);
        EXTI->IMR |= (0x1<<4);

        //配置NVIC
        NVIC_SetPriority(EXTI2_IRQn,NVIC_EncodePriority(NVIC_GetPriorityGrouping(),2,4));
        NVIC_SetPriority(EXTI4_IRQn,NVIC_EncodePriority(NVIC_GetPriorityGrouping(),2,3));
        NVIC_EnableIRQ(EXTI2_IRQn);
        NVIC_EnableIRQ(EXTI4_IRQn);

}

void EXTI2_IRQHandler()
{
        delay_init(72);
        delay_ms(10);
  if( EXTI->PR & (0x1<<2))
        {
                EXTI->PR |= (0x1<<2);
                LED1=!LED1;
           EXTI->PR |= (0x1<<2);
        }        
}

void EXTI4_IRQHandler()
{
        delay_init(72);
        delay_ms(10);
  if( EXTI->PR & (0x1<<4))
        {
                EXTI->PR |= (0x1<<4);
                LED0=!LED0;
           EXTI->PR |= (0x1<<4);
        }        
}
图片是按键连接图,用按键测试外部中断。

1528957952(1).png

怪异现象视频.zip

1.51 MB, 下载次数: 49

最佳答案

查看完整内容[请看2#楼]

WK_UP默认要设置为下拉,按键未按下时是低电平。按键按下时时高电平。其他三个按键要设置为上拉,按键未按下时为高电平,按键按下时为低电平。中断中用延时就不说了,为啥还要在中断中初始化延时程序。每次进中断都要初始化一次延时程序?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-6-14 11:54:36 | 显示全部楼层
WK_UP默认要设置为下拉,按键未按下时是低电平。按键按下时时高电平。其他三个按键要设置为上拉,按键未按下时为高电平,按键按下时为低电平。中断中用延时就不说了,为啥还要在中断中初始化延时程序。每次进中断都要初始化一次延时程序?
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2018-6-14 13:47:46 | 显示全部楼层
没有硬件上下拉电阻
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-14 14:29:27 | 显示全部楼层
miaoguoqiang 发表于 2018-6-14 13:47
没有硬件上下拉电阻

我用的是按键测试外部中断,按键的电路图有外接的电源的,设置浮空输入也是可以的吧
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2018-6-14 14:30:52 | 显示全部楼层
无痕丶 发表于 2018-6-14 14:29
我用的是按键测试外部中断,按键的电路图有外接的电源的,设置浮空输入也是可以的吧

要么你内部设置上下拉,图都没有
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-14 14:35:04 | 显示全部楼层
miaoguoqiang 发表于 2018-6-14 14:30
要么你内部设置上下拉,图都没有

我上传图片了,你看下
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2018-6-14 14:36:57 | 显示全部楼层
这里需要加下拉电阻,要么你设置一个内部下拉把,浮空是不得行的。
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-14 14:38:17 | 显示全部楼层
miaoguoqiang 发表于 2018-6-14 14:36
这里需要加下拉电阻,要么你设置一个内部下拉把,浮空是不得行的。

好的,我试一下
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-14 14:55:44 | 显示全部楼层

设置成下拉触发不了外部中断,我设置成上拉就可以
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-14 14:57:18 | 显示全部楼层
miaoguoqiang 发表于 2018-6-14 14:36
这里需要加下拉电阻,要么你设置一个内部下拉把,浮空是不得行的。

设置成下拉触发不了外部中断,我设置成上拉就可以
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-14 15:53:48 | 显示全部楼层
HXYDJ 发表于 2018-6-14 15:14
WK_UP默认要设置为下拉,按键未按下时是低电平。按键按下时时高电平。其他三个按键要设置为上拉,按键未按 ...

哈哈哈哈哈,傻逼了没理解过来,现在理解了。那知不知道为什么会出现视频上的现象吗我手靠近就会亮和灭
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-6-14 16:52:07 | 显示全部楼层
无痕丶 发表于 2018-6-14 15:53
哈哈哈哈哈,傻逼了没理解过来,现在理解了。那知不知道为什么会出现视频上的现象吗我手靠近就会亮和 ...

浮空输入就是IO口的电平状态是未知的,有可能高有可能低,你手靠近时有可能有静电干扰,导致IO口的电状态不稳定,所以灯会闪烁。你可以找个绝缘的棍子去按按键,看看还会不会有灯闪的现象。浮空状态一一般用的做AD输入采集功能。其他情况下都要设置为上拉或者下拉,避免端口受到干扰。
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-14 19:10:27 来自手机 | 显示全部楼层
听起来像是闹鬼了一样
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-6-14
在线时间
19 小时
 楼主| 发表于 2018-6-24 16:14:16 | 显示全部楼层
HXYDJ 发表于 2018-6-14 16:52
浮空输入就是IO口的电平状态是未知的,有可能高有可能低,你手靠近时有可能有静电干扰,导致IO口的电状态 ...

原来是这样呀,谢谢你!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 07:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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