中断笔记
2019-09-29 16:42:00    1    0    0
yang

映射中断线和GPIO口

GPIO_EXTILineConfig(GPIO_PortSourceGPIOX,GPIO_PinSourcey); //将EXTILX与GPIOX.y连接起来

 中断初始化

  • 初始化结构体
typedef struct
{
uint32_t EXTI_Line;                   //设置表示要设置哪条中断线
EXTIMode_TypeDef EXTI_Mode;           //设置中断模式 (比如高电平有效可设置为上升沿触发,低电平有效设置为下降沿触发)
EXTITrigger_TypeDef EXTI_Trigger;     //设置中断触发方式
FunctionalState EXTI_LineCmd;         //是否使能外部中断通道
}EXTI_InitTypeDef; ​
  • 设置参数
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line4;                             //设置中断线4
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                  //中断模式为中断
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;              //触发方式为下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;                            //使能外部中断通道
EXTI_Init(&EXTI_InitStructure);                                      //根据 EXTI_InitStruct 中指定的参数进行初始化

判断中断是否发生(标志位是否置位)-----用于中断函数开头

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);      //传进中断线变量

清除中断标志位-----用于中断函数末尾

void EXTI_ClearITPendingBit(uint32_t EXTI_Line); ​//传进中断线变量

中断服务函数格式

void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2)!=RESET)//判断LINE2上的中断是否发生
{
中断逻辑…
EXTI_ClearITPendingBit(EXTI_Line2); //清除 LINE2 上的中断标志位
}
}​

 

此外

固件库还提供了两个函数用来判断外部中断状态以及清除外部状态
标志位的函数
EXTI_GetFlagStatus EXTI_ClearFlag,他们的作用和前面两个函数的作用类似。
只是在
EXTI_GetITStatus 函数中会先判断这种中断是否使能,使能了才去判断中断标志位,而
EXTI_GetFlagStatus 直接用来判断状态标志位。

 

Pre: 按键的使用

Next: 串口使用

1
Table of content