打印
[STM32F0]

按键控制 中断进不去呀,灯就是灭不了,谢谢

[复制链接]
1998|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
void KEY_Init(void)
{
       
GPIO_InitTypeDef GPIO_InitStruct;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_1 ;
GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP ;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_Init(GPIOB, &GPIO_InitStruct);

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_Init(&NVIC_InitStructure);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource1);
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);
  
}

void EXTI_Line1_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line1) == SET)
        {
                 // Converter_channelbankFlag=~Converter_channelbankFlag;
            //if(Converter_channelbankFlag==0)   
                    // LED_Open( );
           // else
                  LED_Close( );
      EXTI_ClearITPendingBit(EXTI_Line1);
       
  }
}




void  main(void)
{
  LED_Init( );
        KEY_Init( );
         LED_Open( );
        //UART_Init( );
        //TIM3_Init_OC1( );
        while(1)
                {
      
                }
       
}
沙发
airwill| | 2014-4-10 12:47 | 只看该作者
从初始化代码看, 应该没有什么问题.
可以用软件触发中断的方式试试中断系统的响应
EXTI_GenerateSWInterrupt(EXTI_Line1);

另外, 也可能是硬件问题哦, 可以用万用表量下按键动作的电压变化.

使用特权

评论回复
板凳
jjjkkk00| | 2014-4-10 13:14 | 只看该作者
本帖最后由 jjjkkk00 于 2014-4-10 13:18 编辑

检查一下中断处理函数是否一致:
EXTI0_1_IRQn 与 void EXTI_Line1_IRQHandler(void)是否是对应的?

我工程中的startup_xxxx.s 是DCD     EXTI0_1_IRQHandler             ; EXTI Line 0 and 1

使用特权

评论回复
地板
icecut| | 2014-4-10 13:29 | 只看该作者
请楼主说明自己遇到问题的处理过程....
解决问题不难.难就难在自己不会分析问题...

使用特权

评论回复
5
我是一个小毛驴|  楼主 | 2014-4-10 13:34 | 只看该作者
jjjkkk00 发表于 2014-4-10 13:14
检查一下中断处理函数是否一致:
EXTI0_1_IRQn 与 void EXTI_Line1_IRQHandler(void)是否是对应的?

太谢谢你了,我最后都用按键扫描了 。刚才回过头来看看, 果然如你所说,应该是void EXTI0_1_IRQHandler(void)  感激不尽!

使用特权

评论回复
6
我是一个小毛驴|  楼主 | 2014-4-10 16:34 | 只看该作者
airwill 发表于 2014-4-10 12:47
从初始化代码看, 应该没有什么问题.
可以用软件触发中断的方式试试中断系统的响应
EXTI_GenerateSWInterrup ...

按键当时按了 是好的 这已经解决了 是我大意 很感谢各位的帮助

使用特权

评论回复
7
我是一个小毛驴|  楼主 | 2014-4-10 16:35 | 只看该作者
icecut 发表于 2014-4-10 13:29
请楼主说明自己遇到问题的处理过程....
解决问题不难.难就难在自己不会分析问题... ...

说的对,谢谢啊,分析问题能力 确实不是太高  要继续努力

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

145

帖子

5

粉丝