外部中断基础知识中断概念在运行主程序时外部出现了满足中断触发条件的信号转而去执行中断处理程序执行完成后返回主程序stm外部中断框架复用功能与重映射复用功能概念引脚本身默认是一个GPIO但它可以被复用成其他的功能重映射概念重映射属于复用的一种有复用功能的引脚可以把复用功能分配到其他引脚上重映射后有复用功能的引脚不遵循原始分配NVIC嵌套向量中断控制器stm32有16个内核中断异常和68个可屏蔽中断stm32f103系列有16个内核中断异常和60个可屏蔽中断,10系列才有68个可屏蔽中断中断优先级分组分为抢占优先级和响应优先级两个共占4bit数字越小优先级越高高抢占优先级可以打断正常进行的低抢占优先级抢占优先级相同时高响应优先级不能打断正常进行的低响应优先级抢占优先级相同时若高响应优先级与地响应优先级同时到来高响应优先级先获得资源只有抢占优先级高的才能抢占响应优先级高的不能抢占在设计中断优先级分组后不要随意更改分组更改可能会产生意想不到的情况外部中断控制LED灯初始化系统初始化GPIO和外部中断时钟AFIO寄存器初始化GPIO引脚和外部中断优先级分组和 初始化NVIC结构体编写外部中断函数外部中断发生时控制LED灯weak弱定义若用户不自行定义则使用默认函数若进行定义则使用用户定义函数外部中断初始化voidShake_Init(void){GPIO_InitTypeDef ShakeInitStruct;EXTI_InitTypeDef ExtiInitStruct;NVIC_InitTypeDef NvicInitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);ShakeInitStruct.GPIO_ModeGPIO_Mode_IPU;ShakeInitStruct.GPIO_PinGPIO_Pin_0;ShakeInitStruct.GPIO_SpeedGPIO_Speed_10MHz;GPIO_Init(GPIOA,ShakeInitStruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//需要让中断线监听GPIO引脚.line0对应a0,b0,c0,d0line1对应a1,b1,c1,d1以此类推ExtiInitStruct.EXTI_LineEXTI_Line0;ExtiInitStruct.EXTI_LineCmdENABLE;ExtiInitStruct.EXTI_ModeEXTI_Mode_Interrupt;ExtiInitStruct.EXTI_TriggerEXTI_Trigger_Rising;EXTI_Init(ExtiInitStruct);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组NvicInitStruct.NVIC_IRQChannelEXTI0_IRQn;NvicInitStruct.NVIC_IRQChannelCmdENABLE;NvicInitStruct.NVIC_IRQChannelPreemptionPriority0;NvicInitStruct.NVIC_IRQChannelSubPriority0;NVIC_Init(NvicInitStruct);}编写外部中断函数voidEXTI0_IRQHandler(){if(EXTI_GetITStatus(EXTI_Line0)!RESET){GPIO_ResetBits(GPIOA,GPIO_Pin_1);EXTI_ClearITPendingBit(EXTI_Line0);}}