首先感谢河北科技大学航模协会-能给我这样的学习机会-感谢那些带我们教我们的学长学姐们.
中断,顾名思义,一个连续进行的过程被打断.在处理器处理一个任务时有一个任务需要它马上处理,就需要它先停下手中的任务,去优先执行这个任务.
配置外部中断与配置初始化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