使用stm32f103c8t6的PB0,PB1做外部中断,但PB1无效

2019-07-20 23:22发布

代码如下,知道原因的麻烦告知下,谢谢。
  1. #include "QuadratureEncoder.h"

  2. u16 left_count=0;        //×ó±àÂëÆ÷¼Æêy
  3. u16 right_count=0;        //óò±àÂëÆ÷¼Æêy

  4. //×óÕy½»±àÂëÆ÷£¬AB½öóÃò»Ïî2aËù
  5. void Encoder_L_Init(void)
  6. {
  7.         GPIO_InitTypeDef GPIO_InitStructure;
  8.         EXTI_InitTypeDef EXTI_InitStructure;
  9.         NVIC_InitTypeDef NVIC_InitStructure;
  10.        
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  12.        
  13.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //éèÖÃÎa¸¡¿Õêäèë
  15.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                        //3õê¼»ˉ
  16.        
  17.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);        //PB.0éèÖÃÎaía2¿ÖD¶Ï
  18.        
  19.         EXTI_InitStructure.EXTI_Line = EXTI_Line0;                                //ÖD¶ÏÏß0
  20.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                //ÖD¶ÏÏìó|
  21.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //éÏéyÑØ′¥·¢
  22.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //ê1ÄüÖD¶ÏÏß
  23.         EXTI_Init(&EXTI_InitStructure);                                                        //3õê¼»ˉ
  24.        
  25.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                //éèÖÃÖD¶Ï·Ö×é2£o2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
  26.         NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                        //ía2¿ÖD¶Ï0
  27.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;        //ÇàÕ¼óÅÏ輶3
  28.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                        //Ïìó|óÅÏ輶2
  29.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                //ía2¿ÖD¶Ï0ê1Äü
  30.         NVIC_Init(&NVIC_InitStructure);                                                                //3õê¼»ˉ
  31. }

  32. //óòÕy½»±àÂëÆ÷£¬AB½öóÃò»Ïî2aËù
  33. void Encoder_R_Init(void)
  34. {
  35.         GPIO_InitTypeDef GPIO_InitStructure;
  36.         EXTI_InitTypeDef EXTI_InitStructure;
  37.         NVIC_InitTypeDef NVIC_InitStructure;
  38.        
  39.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  40.        
  41.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  42.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //éèÖÃÎa¸¡¿Õêäèë
  43.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                        //3õê¼»ˉ
  44.        
  45.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);        //PB.1éèÖÃÎaía2¿ÖD¶Ï
  46.        
  47.         EXTI_InitStructure.EXTI_Line = EXTI_Line1;                                //ÖD¶ÏÏß1
  48.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                //ÖD¶ÏÏìó|
  49.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //éÏéyÑØ′¥·¢
  50.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //ê1ÄüÖD¶ÏÏß
  51.         EXTI_Init(&EXTI_InitStructure);                                                        //3õê¼»ˉ
  52.        
  53.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                //éèÖÃÖD¶Ï·Ö×é2£o2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
  54.         NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                        //ía2¿ÖD¶Ï1
  55.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;        //ÇàÕ¼óÅÏ輶3
  56.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                        //Ïìó|óÅÏ輶2
  57.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                //ía2¿ÖD¶Ï0ê1Äü
  58.         NVIC_Init(&NVIC_InitStructure);                                                                //3õê¼»ˉ
  59. }

  60. //Õy½»±àÂëÆ÷íaéè3õê¼»ˉ
  61. void Encoder_Init(void)
  62. {
  63.         Encoder_L_Init();
  64.         Encoder_R_Init();               
  65. }

  66. //ÖD¶Ï·tÎñ3ìDò0
  67. void EXTI0_IRQHandler(void)
  68. {
  69.         if(EXTI_GetITStatus(EXTI_Line0)!=RESET)        //ÅD¶ÏLINE0éÏμÄÖD¶ÏêÇ·ñ·¢éú
  70.         {
  71.                 left_count++;
  72.                 EXTI_ClearITPendingBit(EXTI_Line0);        //Çå3yLINE0éÏμÄÖD¶Ï±ê־λ
  73.         }
  74. }

  75. //ÖD¶Ï·tÎñ3ìDò1
  76. void EXTI1_IRQHandler(void)
  77. {
  78.         if(EXTI_GetITStatus(EXTI_Line1)!=RESET)        //ÅD¶ÏLINE1éÏμÄÖD¶ÏêÇ·ñ·¢éú
  79.         {
  80.                 right_count++;
  81.                 EXTI_ClearITPendingBit(EXTI_Line1);        //Çå3yLINE1éÏμÄÖD¶Ï±ê־λ
  82.         }
  83. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。