STM32学习笔记-外部中断

首先感谢河北科技大学航模协会-能给我这样的学习机会-感谢那些带我们教我们的学长学姐们.

中断,顾名思义,一个连续进行的过程被打断.在处理器处理一个任务时有一个任务需要它马上处理,就需要它先停下手中的任务,去优先执行这个任务.

配置外部中断与配置初始化io口流程类似

void EXTI_Config(void)
{

    EXTI_InitTypeDef EXTI_InitStructure;
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource14);
    EXTI_InitStructure.EXTI_Line = EXTI_Line14;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
	
}

EXTI_InitTypeDef 结构变量类型

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource14);将GPIO管脚与外部中断线连接

EXTI_InitStructure.EXTI_Line = EXTI_Line14;外部中断线,与io口对应,见手册,不同单片机型号不同

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;触发方式上升沿触发,下降沿触发等

EXTI_InitStructure.EXTI_LineCmd = ENABLE;使能中断线通道(打开中断线通道)

EXTI_Init(&EXTI_InitStructure);配置外部中断,传入结构体变量地址

中断优先级配置

void NVIC_Config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    
    NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

}

NVIC_InitTypeDef结构体变量名

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);中断分组,详见手册

NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;中断线通道,与上面结构体的外部中断线对应,见手册

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;响应优先级

中断A抢占优先级比B高,那么A的中断可以在B里面触发,忽略响应优先级;
A和B抢占优先级相同,则A、B的响应优先级决定谁先响应;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;使能中断线通道

NVIC_Init(&NVIC_InitStructure);传入结构体变量地址,完成初始化

产生外部中断后进入下面的中断服务函数,执行中断服务函数中的内容

void EXTI15_10_IRQHandler(void)
{
    ....;
} 

声明:转载请注明出处,本人入门级菜鸟,内容大多学习于网络,存在问题太多不一一列举,大佬多多指教.本人QQ941131649






你可能感兴趣的:(stm32,stm32,单片机,嵌入式)