OpenEdv-开源电子网

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

stm32外部中断 PA1 PA2 PA3 PA4 PA5 不进中断 求指导 找错误 无语了

[复制链接]

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-10-9
在线时间
0 小时
发表于 2015-3-30 15:33:13 | 显示全部楼层 |阅读模式
5金钱
void Key_GPIO_Init(void)
{        
                GPIO_InitTypeDef GPIO_InitStructure;

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
                GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; 
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                 
                GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void Key_Extix_Init()
{
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        
        Key_GPIO_Init();
        
        //选择GPIOA.01,GPIOA.02,GPIOA.03,GPIOA.04,GPIOA.05分别做为外部中断线1、2、3、4、5
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);
        
        //使能外部中断线1,2,3,4,5为下降沿中断触发
        EXTI_InitStructure.EXTI_Line=EXTI_Line1;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger        =EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd        =ENABLE;
        EXTI_Init(&EXTI_InitStructure);
        
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);
        
        //使能外部中断线1,2,3,4,5为下降沿中断触发
        EXTI_InitStructure.EXTI_Line=EXTI_Line2;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&EXTI_InitStructure);
        
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);
        
        //使能外部中断线1,2,3,4,5为下降沿中断触发
        EXTI_InitStructure.EXTI_Line=EXTI_Line3;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource4);
        
        //使能外部中断线1,2,3,4,5为下降沿中断触发
        EXTI_InitStructure.EXTI_Line=EXTI_Line4;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource5);
        
        //使能外部中断线1,2,3,4,5为下降沿中断触发
        EXTI_InitStructure.EXTI_Line=EXTI_Line5;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&EXTI_InitStructure);



        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x04;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x05;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
}

/******************************中断服务函数********************************************/



void EXTI1_IRQHandler(void)
{
        delay_ms(5);                //延时去抖
        if(KEY1==0)        
        {        
                Key_press=0;                                //
                Key_state=UP_Press;
        }
        EXTI_ClearITPendingBit(EXTI_Line1);
}

void EXTI2_IRQHandler(void)
{
        delay_ms(5);                //延时去抖
        if(KEY2==0)        
        {        
                Key_press=0;                
                Key_state=Down_Press;
        }
        EXTI_ClearITPendingBit(EXTI_Line2);
        
}

void EXTI3_IRQHandler(void)
{
                delay_ms(5);                //延时去抖
                if(KEY3==0)        
                {
                        Key_press=0;        
                        Key_state=Lift_Press;
                }
                                                        //
                EXTI_ClearITPendingBit(EXTI_Line3);
}

void EXTI4_IRQHandler(void)
{
                delay_ms(5);                //延时去抖
                if(KEY4==0)                        
                {        
                        Key_press=0;        
                        Key_state=Right_Press;
                }
                EXTI_ClearITPendingBit(EXTI_Line4);

}


void EXTI9_5_IRQHandler(void)
{
                if(EXTI_GetITStatus(EXTI_Line5)!=RESET)
                {        
                        delay_ms(5);                //延时去抖
                        if(KEY5==0)                        //
                        {        
                                Key_press=0;        
                                Key_state=ENT_Press;                
//                                switch (Key_state)
//                                {
//                                        case Standby_Mode:        Key_state=Menu_Mode;                        break;
//                                        case Menu_Mode:        Key_state=Dis_All_Temp_Mode;                break;
//                                        case 
//                                        default       :                                                                                        break;
//                                }
//                                if(Key_state==Standby_Mode)        
//                                        Key_state=Menu_Mode;        //进入菜单模式                                                
                        }
                        EXTI_ClearITPendingBit(EXTI_Line5);
                }
}

最佳答案

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

回复【3楼】queenback: ---------------------------------  NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;         NVIC_InitStructure.NVIC_IRQChannelCm ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-10-9
在线时间
0 小时
 楼主| 发表于 2015-3-30 15:33:14 | 显示全部楼层
回复【3楼】queenback:
---------------------------------
 NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x04;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x05;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);


看出端倪没 太他娘的坑了 我贴出来之后才看到
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-30 18:34:40 | 显示全部楼层
慢慢找。
建议搞出一个中断能用的先。
不会可以看我们教程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

6

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-3-30
在线时间
2 小时
发表于 2015-3-30 20:31:20 | 显示全部楼层
貌似你没有设置中断分组啊
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_X)
少了这一句
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-10-9
在线时间
0 小时
 楼主| 发表于 2015-3-31 11:33:31 | 显示全部楼层
回复【3楼】queenback:
---------------------------------
分组有的 没贴出来 是回复【2楼】正点原子:
---------------------------------
感谢原子哥,错误已找到 贴出来之后 扫了一下发现是嵌套优先级没更改 ; 目测回帖的肯定不是你本人 若是你本人你一眼就能看出错误在哪儿 ,
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-10-9
在线时间
0 小时
 楼主| 发表于 2015-3-31 11:37:34 | 显示全部楼层
回复【3楼】queenback:
---------------------------------
有配置 在没贴出来而已 错误的已找到
回复

使用道具 举报

23

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2014-11-3
在线时间
12 小时
发表于 2015-3-31 12:57:15 | 显示全部楼层
回复【6楼】一把单刀客:
---------------------------------
其实我得为人家辩解下,因为一段一段程序太长,他也没那么多时间仔细看你的BUG。只能说提供思路。
你复制时候都不仔细,全EXTI1_IRQn,他那么多事情那么忙,更看不出来了。。。
回复

使用道具 举报

23

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2014-11-3
在线时间
12 小时
发表于 2015-3-31 12:58:25 | 显示全部楼层
原子说的对,先一个中断,能用,再加一个。。。。
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-10-9
在线时间
0 小时
 楼主| 发表于 2015-3-31 14:38:32 | 显示全部楼层
回复【7楼】em78447:
---------------------------------最重要的是懒省事儿 哈哈 对
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-10-9
在线时间
0 小时
 楼主| 发表于 2015-3-31 14:44:32 | 显示全部楼层
回复【7楼】em78447:
---------------------------------
改完中断源 和映射 配置嵌套时把那个地方也需要该给忘记了  我不是说原子不是啊 你别误解了我只是感觉 回复的人是替原子捉刀不是说原子能力不行
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 07:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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