32-外部中断
EXTI外部中断,TIM定时器中断,ADC,UASRT,SPI,I2C,RTC
NVIC(嵌套中断向量控制器)

中断管理方法
首先,对STM32中断进行分组,组0-4.同时,对每个中断设置一个抢占优先级和一个响应优先级。
假定设置中断优先级组为2,然后设置中断3(RTC中断)的抢占优先级为2,响应优先级为1。 中断6(外部中断0)的抢占优先级为3,响应优先级为0。中断7(外部中断1)的抢占优先级为2,响应优先级为0。
那么这3个中断的优先级顺序为:中断7>中断3>中断6。

EXTI外部中断

中断响应是cpu处理中断,事件响应是其他外设响应中断。
外部中断基本结构

在STM32中,AFIO主要有两大作用,一个是引脚复用功能的选择,一个是中断引脚选择。
void Encoder_Init() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//第一步开启时钟(GPIO,AFIO,EXTI,NVIC四个外设) RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_InitTypeDef GPIO_InitStructure;//第二步,配置GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//第三步,AFIO选择中断引脚 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); EXTI_InitTypeDef EXTI_InitStructure;//第四步配置EXTI EXTI_InitStructure.EXTI_Line=EXTI_Line0 | EXTI_Line1; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_Init(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//第五步配置NVIC NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=2; NVIC_Init(&NVIC_InitStructure); }

浙公网安备 33010602011771号