野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13734|回复: 13

按键按照例程的思路写入两个按键,就失灵了

[复制链接]
发表于 2015-11-20 21:52:36 | 显示全部楼层 |阅读模式
查询法和中断都不行
贴上中断法bsp_key.c文件程序

static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure one bit for preemption priority Ñ¡ÔñóÅÏ輶×é±e*/
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /* ÅäÖÃÖD¶ÏÔ′ */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/**
  * @brief  ÅäÖà PA0 ÎaÏßÖD¶Ï¿ú£¬2¢éèÖÃÖD¶ÏóÅÏ輶
  * @param  ÎT
  * @retval ÎT
  */
void EXTI_PA0_PC13_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        /* config the extiline clock and AFIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);
                                                                                               
        /* config the NVIC */
        NVIC_Configuration();

        /* EXTI line gpio config*/       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         // éÏà-êäèë
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         // éÏà-êäèë
  GPIO_Init(GPIOC, &GPIO_InitStructure);

        /* EXTI line mode config */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽμÑØÖD¶Ï
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
  EXTI_InitStructure.EXTI_Line = EXTI_Line13;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽμÑØÖD¶Ï
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

回复

使用道具 举报

 楼主| 发表于 2015-11-20 21:53:44 | 显示全部楼层
基本思路和两个led的一样
有些或起来,有些是一个初始化完成再初始化另一个
回复 支持 反对

使用道具 举报

发表于 2015-11-21 09:22:41 | 显示全部楼层
中断服务函数写了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-22 15:07:35 | 显示全部楼层
flyleaf 发表于 2015-11-21 09:22
中断服务函数写了吗

对对对,忘了。。。。。
查询法我也是把一个改成两个,也失灵了。怎么回事啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-22 15:09:36 | 显示全部楼层
flyleaf 发表于 2015-11-21 09:22
中断服务函数写了吗

void LED_Config(void)
{
  GPIO_InitTypeDef GPIO_LED;//¶¨òå½á11ìå
       
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);//′ò¿aboífòy½ÅμÄíaéèê±Öó
       
        GPIO_LED.GPIO_Pin=GPIO_Pin_0;//òy½Å0
       
        GPIO_LED.GPIO_Speed=GPIO_Speed_50MHz;//éèÖÃòy½Åê±ÖóÎa50mhz
       
        GPIO_LED.GPIO_Mode=GPIO_Mode_Out_PP;//éèÖÃòy½ÅÎaíÆíìêä3ö
       
        GPIO_Init(GPIOB, &GPIO_LED);//3õê¼»ˉiob
        //Öظ′Ç°ÃæμÄ
        GPIO_LED.GPIO_Pin=GPIO_Pin_7;//
       
        GPIO_Init(GPIOF, &GPIO_LED);//3õê¼»ˉiof
       
        GPIO_LED.GPIO_Pin=GPIO_Pin_8;//
       
        GPIO_Init(GPIOF, &GPIO_LED);//3õê¼»ˉiof
       
        GPIO_SetBits(GPIOB, GPIO_Pin_0);//éèÖÃòy½ÅÎa1£¬¾íêÇ1رÕled
       
        GPIO_SetBits(GPIOF, GPIO_Pin_7|GPIO_Pin_8);//ὸöòy½Å»òᬽó
}
查询法bsp_key.h
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-22 16:24:37 | 显示全部楼层
flyleaf 发表于 2015-11-21 09:22
中断服务函数写了吗

我写的查询法那个函数只有后面那个按键有用,写在前面的按键无效
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-22 16:51:16 | 显示全部楼层
flyleaf 发表于 2015-11-21 09:22
中断服务函数写了吗

加了中断服务函数,还是第一个按键有效,第二个无效两个中断服务函数都写了的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-22 16:56:21 | 显示全部楼层
望着你发槑 发表于 2015-11-22 16:51
加了中断服务函数,还是第一个按键有效,第二个无效两个中断服务函数都写了的

发现问题了
按了第二个按键之后,灯的状态不会改变,但是函数已经变了,再按第一个按键才会变
但是不知道原因
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 11:32:01 | 显示全部楼层
flyleaf 发表于 2015-11-21 09:22
中断服务函数写了吗

fly哥                              
回复 支持 反对

使用道具 举报

发表于 2015-11-23 11:40:13 | 显示全部楼层
望着你发槑 发表于 2015-11-22 16:56
发现问题了
按了第二个按键之后,灯的状态不会改变,但是函数已经变了,再按第一个按键才会变
但是不知 ...

查询法只有一个正常的话,可能是按键的状态不对,注意V2版本的开发板,按键KEY1和KEY2一个按下是高电平一个按下是低电平。判断的状态不对可能就直接卡住了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 11:45:33 | 显示全部楼层
flyleaf 发表于 2015-11-23 11:40
查询法只有一个正常的话,可能是按键的状态不对,注意V2版本的开发板,按键KEY1和KEY2一个按下是高电平一 ...

对对对,我太不仔细了
那中断法的问题出在哪里呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 12:06:47 | 显示全部楼层
flyleaf 发表于 2015-11-23 11:40
查询法只有一个正常的话,可能是按键的状态不对,注意V2版本的开发板,按键KEY1和KEY2一个按下是高电平一 ...

查询法对了,6666
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 15:28:16 | 显示全部楼层
我发现错误了
有一个数字没改
谢谢管理员fly哥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-23 15:29:06 | 显示全部楼层
flyleaf 发表于 2015-11-23 11:40
查询法只有一个正常的话,可能是按键的状态不对,注意V2版本的开发板,按键KEY1和KEY2一个按下是高电平一 ...

谢了 两种方法的错误都改正过来了
都是不仔细的锅
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 08:57 , Processed in 0.045834 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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