四、外部中断操作
1.操作步骤
(1)使能时钟以及配置端口;
(2)使能AFIO时钟,绑定外部中断线;
(3)设置外部中断EXTI;
(4)配置分配中断优先级NVIC;
(5)编写中断函数。
2.函数位置说明
(1)外部中断初始化函数封装函数库,stm32f10x_exti.c。
(2)中断优先级配置函数封装库,misc.c。
(3)中断函数封装库,stm32f10x_it.c。
3.代码演示,以GPIOA1为例。
(1)使能时钟以及配置端口;
1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 2 3 GPIO_InitTypeDef GPIO_InitStruct; 4 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1; 5 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 6 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 7 GPIO_Init(GPIOA,&GPIO_InitStruct);
(2)使能AFIO端口复用时钟,绑定外部中断线;
1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能时钟 2 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);//绑定外部中断线
(3)设置外部中断EXTI;
1 EXTI_InitTypeDef EXTI_InitStruct; 2 EXTI_InitStruct.EXTI_Line = EXTI_Line1;//中断口 3 EXTI_InitStruct.EXTI_LineCmd = ENABLE;//开启EXTI中断 4 EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断模式 5 EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发 6 EXTI_Init(&EXTI_InitStruct);
(4)配置分配中断优先级NVIC;
1 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级组 2 3 NVIC_InitTypeDef NVIC_InitStruct; 4 NVIC_InitStruct.NVIC_IRQChannel = EXTI1_IRQn;//中断请求线 5 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//允许中断 6 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级的优先级 7 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;//响应优先级的优先级 8 NVIC_Init(&NVIC_InitStruct);
(5)设置中断函数,要包含stm32f10x_it.h,中断函数名已确定,尽量使用,自己更改比较麻烦。
1 //设置中断函数 2 void EXTI1_IRQHandler(void) 3 { 4 //获取中断线状态,此函数会检查中断是否使能。 5 if(EXTI_GetITStatus(EXTI_Line1)==SET){ 6 key_value=1; 7 //软件复位 8 EXTI_ClearITPendingBit(EXTI_Line1); 9 } 10 }
4.添加宏。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用