stm32之IO口外部中断配置
从PA~PG每个端口都有15个管脚,所有端口的管脚从零到15对应的中断线路都是相同的,它们都可以独立的引发外部中断。
配置外部中断有一定的规定动作,可总结为四步,下面就随便用一个IO口加以说明(PG2):
1、配置相应时钟和相关的GPIO管脚。
void KIN2_init( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOG, ENABLE );
RCC_AHB1PeriphClockCmd( RCC_APB1Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init( RCC_AHB1Periph_GPIOG, &GPIO_InitStructure );
}
2、EXTI配置。动作主要有:选择中断源,清除中断标志,触发模式...
void EXTI_G2_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource2);
EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
3、NVIC配置。指定中断信息(主从优先级,中断通道..)
void NVIC_G2_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 抢占优先级4级 子优先级4级
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
4、编写中断服务子程序。
浙公网安备 33010602011771号