野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14999|回复: 5

按键中断无法执行,分析未过,请指教

[复制链接]
发表于 2015-3-6 22:51:40 | 显示全部楼层 |阅读模式
编写STM32程序,按照教程一步步来写,可是两个按键只有一个可以进中断。说明:
KEY1D0;(无法进入中断)
KEY2A8;(程序可以执行中断)
配置代码:
void EXTI_Configuration(void)
{               
                EXTI_InitTypeDef EXTI_InitStructure;//配置中断线结构体       
                GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource0);//配置D.0为中断源
                EXTI_InitStructure.EXTI_Line=EXTI_Line0;//挂在0号线上
                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_PinSource8);//配置A.8为中断源
                EXTI_InitStructure.EXTI_Line=EXTI_Line8;//挂在8号线上
                EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式
                EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿出发方式
                EXTI_InitStructure.EXTI_LineCmd=ENABLE;
                EXTI_Init(&EXTI_InitStructure);//写入配置信息
}

void NVIC_Configuration(void)
{
                NVIC_InitTypeDef NVIC_InitStructure;
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //占先优先级、副优先级的资源分配
                NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //指定中断源
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //占先优先级设定
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        //副优先级设定
                NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
                 NVIC_Init(&NVIC_InitStructure);
                 NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
                //NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;       
                NVIC_Init(&NVIC_InitStructure);
}

中断代码:
extern unsigned char led_bit1,led_bit2;
void EXTI0_IRQHandler(void)
{
    if (EXTI_GetITStatus(EXTI_Line3) != RESET)
    {
        if(led_bit2)
        {
                GPIO_SetBits(GPIOD, GPIO_Pin_7);
                led_bit2=0;
        }
        else
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_7);
                led_bit2=1;
        }
     EXTI_ClearFlag(EXTI_Line3);
    }
}
void EXTI9_5_IRQHandler(void)
{
  if (EXTI_GetITStatus(EXTI_Line8) != RESET)
    {
        if(led_bit1)
        {
                GPIO_SetBits(GPIOD, GPIO_Pin_6);
                led_bit1=0;
        }
        else
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_6);
                led_bit1=1;
        }
        EXTI_ClearFlag(EXTI_Line8);
    }
}

在main函数中已经调用中断配置函数了,目前PA8的按键能出发中断,PD0的不可以,二者电路相同。请高人指教。谢谢!

回复

使用道具 举报

 楼主| 发表于 2015-3-6 23:34:53 | 显示全部楼层
补充:PD0无法进入中断,此时如果给PA0下降沿,则可进入EXTI0_IRQHandler中断;如果将中断触发PD0更改为PA0,则正常。另问为什么设置PD0挂在中断线上,PA0还会干扰结果呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-7 13:31:37 | 显示全部楼层
路过的高人说句话啊,憋死我了!
回复 支持 反对

使用道具 举报

发表于 2015-3-8 00:21:25 | 显示全部楼层
他的按键key1的IO接PA0上的,,,肯定不行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-10 20:59:25 | 显示全部楼层
我就是我12 发表于 2015-3-8 00:21
他的按键key1的IO接PA0上的,,,肯定不行了

你好,这个是我自己画的PCB,PD0仅与按键连接。查询方式可以侦测到,但中断方式无法触发。
回复 支持 反对

使用道具 举报

发表于 2015-3-11 16:17:11 | 显示全部楼层
nefusmzj 发表于 2015-3-10 20:59
你好,这个是我自己画的PCB,PD0仅与按键连接。查询方式可以侦测到,但中断方式无法触发。

void EXTI0_IRQHandler(void)
{
     if (EXTI_GetITStatus(EXTI_Line3) != RESET)

你exit0线的中断,里面的判断却是exti3的,肯定不行啊
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-29 10:12 , Processed in 0.033701 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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