stm32知识点-外部中断

STM32的每个IO都可以作为外部中断输入。

STM32的中断控制器支持19个外部中断/事件请求:

线0~15:对应外部IO口的输入中断。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

映射关系

GPIOx.0映射到EXTI0

GPIOx.1映射到EXTI1

GPIOx.15映射到EXTI15

映射关系图

中断函数

外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数

EXTI0_IRQHandler

EXTI1_IRQHandler

EXTI2_IRQHandler

EXTI3_IRQHandler

EXTI4_IRQHandler

EXTI9_5_IRQHandler

EXTI15_10_IRQHandler

所需库函数

①void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

//设置IO口与中断线的映射关系

exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

②void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

//初始化中断线:触发方式等

③ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

//判断中断线中断状态,是否发生

④void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

//清除中断线上的中断标志位

EXTI_Init函数
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
结构体定义
typedef struct
{
  uint32_t EXTI_Line;   //指定要配置的中断线          
  EXTIMode_TypeDef EXTI_Mode;   //模式:事件 OR中断
  EXTITrigger_TypeDef EXTI_Trigger;//触发方式:上升沿/下降沿/双沿触发
  FunctionalState EXTI_LineCmd;  //使能 OR失能
}EXTI_InitTypeDef;

程序实现

初始化IO口为输入。

GPIO_Init();

② 开启IO口复用时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

设置IO口与中断线的映射关系。

void GPIO_EXTILineConfig();

初始化线上中断,设置触发条件等。

EXTI_Init();

配置中断分组(NVIC),并使能中断。

NVIC_Init();

⑥ 编写中断服务函数。

EXTIx_IRQHandler();

清除中断标志位

EXTI_ClearITPendingBit();

举报
评论 0