OpenEdv-开源电子网

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

外部中断实验四个按键,三个按键进不了中断

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-3-6
在线时间
4 小时
发表于 2016-3-6 23:08:26 | 显示全部楼层 |阅读模式
1金钱
经测试KEY_UP能进入中断,其余进不了中断#include "exti.h"
#include "stm32f4xx.h"
#include "delay.h"
#include "key.h"
#include "led.h"
#include "beep.h"

void My_EXTI_Init(void)
{
        EXTI_InitTypeDef EXTI_st;
        NVIC_InitTypeDef NVIC_st;
       
        delay_init(168);
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG,ENABLE);//使能SYSCFG时钟
        RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE,ENABLE);//使能GPIO时钟
        RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
//GPIOE4 KEY0       
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
       
        EXTI_st.EXTI_Line = EXTI_Line4;
        EXTI_st.EXTI_LineCmd = ENABLE;
        EXTI_st.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_st.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_Init(&EXTI_st);//初始化中断4
       
        NVIC_st.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_st.NVIC_IRQChannelCmd = ENABLE;
        NVIC_st.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级0
        NVIC_st.NVIC_IRQChannelSubPriority = 2;//响应优先级2
        NVIC_Init(&NVIC_st);

//GPIOE3 KEY1       
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource3);
       
        EXTI_st.EXTI_Line = EXTI_Line3;
        EXTI_st.EXTI_LineCmd = ENABLE;
        EXTI_st.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_st.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_Init(&EXTI_st);//初始化中断3
       
        NVIC_st.NVIC_IRQChannel = EXTI3_IRQn;
        NVIC_st.NVIC_IRQChannelCmd = ENABLE;
        NVIC_st.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1
        NVIC_st.NVIC_IRQChannelSubPriority = 2;//响应优先级2
        NVIC_Init(&NVIC_st);//配置分组

//GPIOE2 KEY2       
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);
       
        EXTI_st.EXTI_Line = EXTI_Line2;
        EXTI_st.EXTI_LineCmd = ENABLE;
        EXTI_st.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_st.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_Init(&EXTI_st);//初始化中断2
       
        NVIC_st.NVIC_IRQChannel = EXTI2_IRQn;
        NVIC_st.NVIC_IRQChannelCmd = ENABLE;
        NVIC_st.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级2
        NVIC_st.NVIC_IRQChannelSubPriority = 2;//响应优先级2
        NVIC_Init(&NVIC_st);//配置分组

//GPIOA0 KEY_UP       
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
       
        EXTI_st.EXTI_Line = EXTI_Line0;
        EXTI_st.EXTI_LineCmd = ENABLE;
        EXTI_st.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_st.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_Init(&EXTI_st);//初始化中断0
       
        NVIC_st.NVIC_IRQChannel = EXTI0_IRQn;
        NVIC_st.NVIC_IRQChannelCmd = ENABLE;
        NVIC_st.NVIC_IRQChannelPreemptionPriority = 3;//抢占优先级3
        NVIC_st.NVIC_IRQChannelSubPriority = 2;//响应优先级2
        NVIC_Init(&NVIC_st);//配置分组
}

void EXTI4_IRQHandler()//中断4服务函数
{
        delay_ms(10);
        if(KEY0 == 0)
        {
                LED0 = !LED0;
                LED1 = !LED1;
        }
         EXTI_ClearITPendingBit(EXTI_Line4);
}
       
void EXTI3_IRQHandler()//中断3服务函数
{
        delay_ms(10);
        if(KEY1 == 0)
        {
                LED1 = !LED1;
        }
         EXTI_ClearITPendingBit(EXTI_Line3);
}

void EXTI2_IRQHandler()//中断2服务函数
{
        delay_ms(10);
        if(KEY2 == 0)
        {
                LED0 = !LED0;
        }
         EXTI_ClearITPendingBit(EXTI_Line2);
}

void EXTI0_IRQHandler()//中断1服务函数
{
        delay_ms(10);
        if(KEY_UP == 1)
        {
                BEEP = !BEEP;
        }
         EXTI_ClearITPendingBit(EXTI_Line0);
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-3-7 13:46:39 | 显示全部楼层
引脚配置呢

是那几个引脚啊
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-2-24
在线时间
7 小时
发表于 2016-3-7 18:17:55 | 显示全部楼层
楼主,不知道你解决了没。我也遇到这个问题,我有个两个中断,红外引发的就可以进入中断程序,但是按键还需要控制一个,按键的就进不去,如果解决了,烦请指教。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-3-6
在线时间
4 小时
 楼主| 发表于 2016-3-7 18:53:46 | 显示全部楼层
止天 发表于 2016-3-7 13:46
引脚配置呢

是那几个引脚啊

键盘所对的引脚上面有写
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-3-6
在线时间
4 小时
 楼主| 发表于 2016-3-7 18:54:08 | 显示全部楼层
crystal_66 发表于 2016-3-7 18:17
楼主,不知道你解决了没。我也遇到这个问题,我有个两个中断,红外引发的就可以进入中断程序,但是按键还需 ...

还没呢 不知道什么问题
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-2-24
在线时间
7 小时
发表于 2016-3-7 23:07:56 | 显示全部楼层
楼主,我刚才解决这个问题了,总共有这些问题可能在的地方,你可以看看,仅供参考
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-2-24
在线时间
7 小时
发表于 2016-3-7 23:09:59 | 显示全部楼层
crystal_66 发表于 2016-3-7 23:07
楼主,我刚才解决这个问题了,总共有这些问题可能在的地方,你可以看看,仅供参考

1、按键的输入方式是IPU,我的设置错了
2、需要的LED,BEEP没有初始化
3、中断之间设了优先级就不会冲撞
不知道有没有用,希望能帮到你
回复

使用道具 举报

12

主题

132

帖子

1

精华

高级会员

Rank: 4

积分
798
金钱
798
注册时间
2015-8-3
在线时间
184 小时
发表于 2016-3-18 17:52:49 | 显示全部楼层
看起来应该没什么问题,你可以试试把整个工程传上来看看,我做这个是没问题的,这么也不复杂啊
回复

使用道具 举报

4

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2016-3-18
在线时间
40 小时
发表于 2016-3-18 19:55:56 | 显示全部楼层
检查一下C和H文件有没有问题,还有路径。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-7-29
在线时间
3 小时
发表于 2017-8-14 20:05:15 | 显示全部楼层
没有初始化KEY_Init();所以按键不管用
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-3-29
在线时间
1 小时
发表于 2021-3-30 21:17:37 | 显示全部楼层
一样的问题,我的只有KEY2按键有问题,其余的按键正常,你们说的方法我都试了一下,还是没用
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 06:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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