STM32F4开发板----外部中断(003)

外部中断

1 初始化参数

/**
  * @brief  EXTI Init Structure definition  
  */

typedef struct
{
  uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
                                         This parameter can be any combination value of @ref EXTI_Lines */ 
  EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.
                                         This parameter can be a value of @ref EXTIMode_TypeDef */
  EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
                                         This parameter can be a value of @ref EXTITrigger_TypeDef */
  FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.
                                         This parameter can be set either to ENABLE or DISABLE */
}EXTI_InitTypeDef;

外部中断库函数

/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/*  Function used to set the EXTI configuration to the default reset state *****/
void EXTI_DeInit(void);

/* Initialization and Configuration functions *********************************/
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);

/* Interrupts and flags management functions **********************************/
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
void EXTI_ClearFlag(uint32_t EXTI_Line);
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

2 配置过程

[..] In order to use an I/O pin as an external interrupt source, follow steps
below:
(#) Configure the I/O in input mode using GPIO_Init()
(#) Select the input source pin for the EXTI line using SYSCFG_EXTILineConfig()
(#) Select the mode(interrupt, event) and configure the trigger
selection (Rising, falling or both) using EXTI_Init()
(#) Configure NVIC IRQ channel mapped to the EXTI line using NVIC_Init()

[..]
(@) SYSCFG APB clock must be enabled to get write access to SYSCFG_EXTICRx
registers using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

其中
EXTI_GetFlagStatus()先判断中断是否使能,使能之后才去判断中断标志位
EXIT _GetFlagStatus()直接判断状态标志位

扩展,所有stm32中断处理函数入口

WWDG_IRQHandler                     PVD_IRQHandler                                      
TAMP_STAMP_IRQHandler               RTC_WKUP_IRQHandler                             
FLASH_IRQHandler                    RCC_IRQHandler
EXTI0_IRQHandler                    EXTI1_IRQHandler                              
EXTI2_IRQHandler                    EXTI3_IRQHandler                                    
EXTI4_IRQHandler                    DMA1_Stream0_IRQHandler                
DMA1_Stream1_IRQHandler             DMA1_Stream2_IRQHandler                     
DMA1_Stream3_IRQHandler             DMA1_Stream4_IRQHandler                                    DMA1_Stream5_IRQHandler              DMA1_Stream6_IRQHandler                    
ADC_IRQHandler                      CAN1_TX_IRQHandler                                                            
CAN1_RX0_IRQHandler                 CAN1_RX1_IRQHandler                         
CAN1_SCE_IRQHandler                 EXTI9_5_IRQHandler          
TIM1_BRK_TIM9_IRQHandler            TIM1_UP_TIM10_IRQHandler                
TIM1_TRG_COM_TIM11_IRQHandler       TIM1_CC_IRQHandler          
TIM2_IRQHandler                     TIM3_IRQHandler                                   
TIM4_IRQHandler                     I2C1_EV_IRQHandler                          
I2C1_ER_IRQHandler                  I2C2_EV_IRQHandler                              
I2C2_ER_IRQHandler                  SPI1_IRQHandler                                     
SPI2_IRQHandler                     USART1_IRQHandler                             
USART2_IRQHandler                   USART3_IRQHandler                                    
EXTI15_10_IRQHandler                RTC_Alarm_IRQHandler                         
OTG_FS_WKUP_IRQHandler              TIM8_BRK_TIM12_IRQHandler                      
TIM8_UP_TIM13_IRQHandler            TIM8_TRG_COM_TIM14_IRQHandler    
TIM8_CC_IRQHandler                  DMA1_Stream7_IRQHandler                      
FSMC_IRQHandler                     SDIO_IRQHandler                                   
TIM5_IRQHandler                     SPI3_IRQHandler                                  
UART4_IRQHandler                    UART5_IRQHandler                                
TIM6_DAC_IRQHandler                 TIM7_IRQHandler                                  
DMA2_Stream0_IRQHandler             DMA2_Stream1_IRQHandler                  
DMA2_Stream2_IRQHandler             DMA2_Stream3_IRQHandler                           
DMA2_Stream4_IRQHandler             ETH_IRQHandler                                     
ETH_WKUP_IRQHandler                 CAN2_TX_IRQHandler                                                           
CAN2_RX0_IRQHandler                 CAN2_RX1_IRQHandler                          
CAN2_SCE_IRQHandler                 OTG_FS_IRQHandler                                    
DMA2_Stream5_IRQHandler             DMA2_Stream6_IRQHandler                     
DMA2_Stream7_IRQHandler             USART6_IRQHandler                               
I2C3_EV_IRQHandler                  I2C3_ER_IRQHandler                                
OTG_HS_EP1_OUT_IRQHandler           OTG_HS_EP1_IN_IRQHandler                  
OTG_HS_WKUP_IRQHandler              OTG_HS_IRQHandler                                  
DCMI_IRQHandler                     RYP_IRQHandler                                              
HASH_RNG_IRQHandlerFPU_IRQHandler

这里中断函数对应关系

EXPORT  EXTI0_IRQHandler                 ----> EXTI_Line0                                          
EXPORT  EXTI1_IRQHandler                 ----> EXTI_Line1                                        
EXPORT  EXTI2_IRQHandler                 ----> EXTI_Line2                                             
EXPORT  EXTI3_IRQHandler                 ----> EXTI_Line3                                      
EXPORT  EXTI4_IRQHandler                 ----> EXTI_Line 4

EXTI9_5_IRQHandler —-> EXTI_Line 5-9
EXTI15_10_IRQHandler —-> EXTI_Line 10-15z

3.3 初始化实例

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PA0 连接中断线0

 /* 配置EXTI_Line0 */
 EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE0
 EXTI_Init(&EXTI_InitStructure);//配置

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子通道优先级2
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
  NVIC_Init(&NVIC_InitStructure);//配置

void EXTI0_IRQHandler(void)
{
    delay_ms(10);    //Ï消抖
    if(WK_UP==1)    
    {
        BEEP=!BEEP; //电平翻转
    }        
     EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志
}

猜你喜欢

转载自blog.csdn.net/klaus_x/article/details/81020491