中断-NVIC与EXTI外设详解(超全面)
在嵌入式系统中,中断机制是处理异步事件的重要手段。STM32微控制器采用嵌套向量中断控制器(NVIC)和外部中断/事件控制器(EXTI)来实现中断管理。本文将详细介绍NVIC和EXTI的工作原理、配置步骤以及编程实践。
NVIC(嵌套向量中断控制器)
NVIC是STM32中断系统的心脏,负责管理中断优先级、中断向量表和中断处理。它支持多个中断源和灵活的优先级管理。
工作原理
NVIC允许开发者为每个中断源分配不同的优先级。中断优先级分为抢占优先级和子优先级,确保了高优先级的中断可以打断低优先级的中断执行。
配置步骤
-
配置中断优先级分组:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
这行代码配置了NVIC的优先级分组,决定了抢占优先级和子优先级的位数。
-
设置中断线优先级:
NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
这段代码初始化了NVIC,设置了中断线的抢占优先级和子优先级,并使能了中断线。
EXTI(外部中断/事件控制器)
EXTI是STM32单片机上的一个外设,用于响应外部事件或中断请求。它可以监测指定GPIO口的电平信号变化,并在检测到指定条件时,向NVIC发出中断申请。
工作原理
EXTI可以配置为响应上升沿、下降沿、双边沿或软件触发的信号变化。当配置的边沿事件发生时,EXTI会向NVIC发送中断请求。
配置步骤
-
初始化GPIO为输入模式:
GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure);
-
配置EXTI线:
EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);
-
编写中断服务函数:
void EXTI0_IRQHandler(void) {if (EXTI_GetITStatus(EXTI_Line0) != RESET){EXTI_ClearITPendingBit(EXTI_Line0);// 处理中断事件} }
编程实践
在实际应用中,可以通过配置NVIC和EXTI来实现对外部事件的快速响应。例如,可以使用EXTI来检测按钮按下事件,并在中断服务函数中执行相应的操作,如翻转LED状态。
通过上述配置和编程步骤,可以实现STM32的中断控制和外部中断事件处理。这为嵌入式系统设计提供了强大的异步事件处理能力,确保了系统的响应性和可靠性。[NVIC与EXTI外设详解-CSDN博客]
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇
点击领取更多详细资料