STM32外部中断小记
一、EXTI配置步骤
//1.配置RCC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 开启AFIO时钟,AFIO:GPIO复用/重映射功能
//2.配置EXTI GPIO端口及工作模式(输入模式)
//3.配置EXTI 中断线、模式(上升沿、下降沿、双边沿)、响应方式
GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex);//将EXTI挂载到GPIO引脚上
EXTI_Line必须与GPIO引脚保持一致,PA0-Px0连接在EXTI0,PA1-Px1连接在EXTI1,以此类推
EXTI_Mode_Interrupt:中断模式;
EXTI_Mode_Event:事件模式,该模式不会立即触发中断,只是在寄存器上把相应的事件标志位置1,应用这个模式需要不停查询相应寄存器;
//4.配置NVIC
二、编写中断函数
void EXTIx_IRQHandler();
//读取中断函数状态
EXTI_ClearITPendingBit();
//清除中断函数标志
EXTI_ClearITPendingBit();
三、代码
void EXTI_Config(){
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line=EXTI_Line3;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI3_IRQHandler(){
if(EXTI_GetITStatus(EXTI_Line3)!=RESET){
EXTI_ClearITPendingBit(EXTI_Line3);
PCout(13)^=1;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!