野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9832|回复: 1

Key2外部中断进入不了

[复制链接]
发表于 2017-10-21 19:34:48 | 显示全部楼层 |阅读模式
  1. #include"stm32f10x.h"

  2. typedef enum {LedR,LedG,LedB,Led1,Led2}Light;
  3. Light light=LedR;



  4. int main(void)
  5. {
  6.         GPIO_InitTypeDef InitLedR;
  7.         GPIO_InitTypeDef InitLedG;
  8.         GPIO_InitTypeDef InitLedB;
  9.         GPIO_InitTypeDef InitLed1;
  10.         GPIO_InitTypeDef InitLed2;
  11.         GPIO_InitTypeDef InitKey1;
  12.         GPIO_InitTypeDef InitKey2;
  13.        
  14.        
  15.         NVIC_InitTypeDef InitKey1NVIC;
  16.         NVIC_InitTypeDef InitKey2NVIC;
  17.        
  18.        
  19.         EXTI_InitTypeDef InitKey1EXTI;
  20.         EXTI_InitTypeDef InitKey2EXTI;
  21.        
  22.        
  23.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  24.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
  25.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  26.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  27.        
  28.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  29.        
  30.         InitKey1NVIC.NVIC_IRQChannel=EXTI0_IRQn;
  31.         InitKey1NVIC.NVIC_IRQChannelPreemptionPriority=0;
  32.         InitKey1NVIC.NVIC_IRQChannelSubPriority=0;
  33.         InitKey1NVIC.NVIC_IRQChannelCmd=ENABLE;
  34.        
  35.         InitKey2NVIC.NVIC_IRQChannel=EXTI15_10_IRQn;
  36.         InitKey2NVIC.NVIC_IRQChannelPreemptionPriority=0;
  37.         InitKey2NVIC.NVIC_IRQChannelSubPriority=0;
  38.         InitKey2NVIC.NVIC_IRQChannelCmd=ENABLE;
  39.        
  40.        
  41.         NVIC_Init(&InitKey1NVIC);
  42.         NVIC_Init(&InitKey2NVIC);
  43.        
  44.        
  45.         InitLedR.GPIO_Mode=GPIO_Mode_Out_PP;
  46.         InitLedR.GPIO_Speed=GPIO_Speed_50MHz;
  47.         InitLedR.GPIO_Pin=GPIO_Pin_5;
  48.        
  49.         InitLedG.GPIO_Mode=GPIO_Mode_Out_PP;
  50.         InitLedG.GPIO_Speed=GPIO_Speed_50MHz;
  51.         InitLedG.GPIO_Pin=GPIO_Pin_0;
  52.        
  53.         InitLedB.GPIO_Mode=GPIO_Mode_Out_PP;
  54.         InitLedB.GPIO_Speed=GPIO_Speed_50MHz;
  55.         InitLedB.GPIO_Pin=GPIO_Pin_1;
  56.        
  57.         InitLed1.GPIO_Mode=GPIO_Mode_Out_PP;
  58.         InitLed1.GPIO_Speed=GPIO_Speed_50MHz;
  59.         InitLed1.GPIO_Pin=GPIO_Pin_7;
  60.        
  61.         InitLed2.GPIO_Mode=GPIO_Mode_Out_PP;
  62.         InitLed2.GPIO_Speed=GPIO_Speed_50MHz;
  63.         InitLed2.GPIO_Pin=GPIO_Pin_8;
  64.        
  65.         InitKey1.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  66.         InitKey1.GPIO_Pin=GPIO_Pin_0;
  67.        
  68.         InitKey2.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  69.         InitKey2.GPIO_Pin=GPIO_Pin_13;
  70.        
  71.         GPIO_Init(GPIOB,&InitLedR);
  72.         GPIO_Init(GPIOB,&InitLedG);
  73.         GPIO_Init(GPIOB,&InitLedB);
  74.         GPIO_Init(GPIOF,&InitLed1);
  75.         GPIO_Init(GPIOF,&InitLed2);
  76.         GPIO_Init(GPIOA,&InitKey1);
  77.         GPIO_Init(GPIOC,&InitKey2);
  78.        
  79.        
  80.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  81.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
  82.        
  83.        
  84.         InitKey1EXTI.EXTI_Line=EXTI_Line0;
  85.         InitKey1EXTI.EXTI_Mode=EXTI_Mode_Interrupt;
  86.         InitKey1EXTI.EXTI_Trigger=EXTI_Trigger_Rising;
  87.         InitKey1EXTI.EXTI_LineCmd =ENABLE;
  88.        
  89.         InitKey2EXTI.EXTI_Line=EXTI_Line13;
  90.         InitKey2EXTI.EXTI_Mode=EXTI_Mode_Interrupt;
  91.         InitKey2EXTI.EXTI_Trigger=EXTI_Trigger_Rising;
  92.         InitKey2EXTI.EXTI_LineCmd =ENABLE;
  93.        
  94.         EXTI_Init(&InitKey1EXTI);
  95.         EXTI_Init(&InitKey2EXTI);
  96.        
  97.         GPIO_SetBits(GPIOB,GPIO_Pin_5);
  98.         GPIO_SetBits(GPIOB,GPIO_Pin_0);
  99.         GPIO_SetBits(GPIOB,GPIO_Pin_1);
  100.         GPIO_SetBits(GPIOF,GPIO_Pin_7);
  101.         GPIO_SetBits(GPIOF,GPIO_Pin_8);
  102.        

  103.         while(1)
  104.         {
  105.                         if(light==LedR)
  106.                         {
  107.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
  108.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
  109.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
  110.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
  111.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
  112.                         }
  113.                         else if(light==LedG)
  114.                         {
  115.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
  116.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET);
  117.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
  118.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
  119.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
  120.                         }
  121.                         else if(light==LedB)
  122.                         {
  123.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
  124.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
  125.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);
  126.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
  127.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
  128.                         }
  129.                         else if(light==Led1)
  130.                         {
  131.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
  132.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
  133.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
  134.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_RESET);
  135.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
  136.                         }
  137.                         else if(light==Led2)
  138.                         {
  139.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
  140.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
  141.                                 GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
  142.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
  143.                                 GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_RESET);
  144.                         }
  145.         }

  146. }


  147. void EXTI0_IRQHandler()
  148. {
  149.         if( EXTI_GetITStatus(EXTI_Line0)==SET)
  150.         {
  151.                 if(light==Led2)
  152.                         light=LedR;
  153.                 else if(light<Led2)
  154.                         light++;
  155.                
  156.                 EXTI_ClearITPendingBit(EXTI_Line0);
  157.         }
  158. }

  159. void EXTI15_10_IRQHandler()
  160. {
  161.         if( EXTI_GetITStatus(EXTI_Line13)==SET)
  162.         {
  163.                 if(light==LedR)
  164.                         light=Led2;
  165.                 else if(light>LedR)
  166.                         light--;
  167.                
  168.                 EXTI_ClearITPendingBit(EXTI_Line13);
  169.         }
  170. }








复制代码


Key1正常,但是Key2死活没反应,求解
回复

使用道具 举报

发表于 2017-10-23 08:55:53 | 显示全部楼层
没看出问题,对比下我们的例程看看
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 02:37 , Processed in 0.028211 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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