STM32-2-中断
初始化中断要按照路径依次初始化时钟-GPIO-EXTI-NVICvoid Encoder_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//EXTI与NVIC时钟始终开启不用手动开启GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;//如果不清楚外设应该配置什么模式可以查看手册或ai查询GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 |GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);//GPIO初始化配置GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);//AFIO初始化配置//void GPIO_EXTILineConfig(uinit8_t GPIO_PortSource, uinit8_t GPIO_PinSource);//配置EXTI一般流程EXTI_InitTypeDef EXTI_InitStruct;EXTI_InitStruct.EXTI_Line EXTI_Line0 | EXTI_Line1;//按照插的引脚的数字EXTI_InitStruct.EXTI_LineCmd ENABLE;//开启中断EXTI_InitStruct.EXTI_Mode EXTI_Mode_Interrupt;//中断 or 事件EXTI_InitStruct.EXTI_Trigger EXTI_Trigger_Falling;//触发方式上升沿下降沿两者皆可EXTI_Init(EXTI_InitStruct); //初始化EXTI_InitStruct结构体//配置NVIC一般流程NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel EXTI0_IRQn;//我们使用EXTI0所以选择EXTI0的通道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;//我们使用EXTI1所以选择EXTI1的通道NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority 2;NVIC_Init(NVIC_InitStructure);}中断函数查Startup文件看中断函数名称在中断函数中最好判断一下是否是对应端口的中断再执行中断内容最后清除中断状态回到主函数void EXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0) SET){if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0){中断内容;}EXTI_ClearITPendingBit(EXTI_Line0);}}最后为了消抖可以采用读取变化量再叠加如int16_t XXX_Count 0;int16_t Get_XXX(void){int16_t temp XXX_Count;XXX_Count 0;return temp;}然后在主函数中显示变量Num Get_XXX;