【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
在STM32中,其每一个外设都可以产生中断。
中断分为分为
①系统异常,内核
②外部中断,外设
NVIC(Nested Vector Interrupt Controller ):嵌套向量中断控制器,属于内核外设,管理着包括内核片和片上所有外设的终端相关功能。
core_cm3.h与misc.h有相关函数
野火指南者内核中断有10个,外设中断有60个。
由NVIC->IPRx来控制
static void EXTI_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;//配置NVIC结构体NVIC_InitTypeDef;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);设置优先级分组
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn ;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//选择主优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//选择次优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);//将写好的结构体写入到初始化函数中
}
选择NVIC的中断线,这里选择的是外部中断0,外部中断有20个,前16个为GPIO中断
EXTI0_IRQn
EXTI1_IRQn
EXTI2_IRQn
EXTI3_IRQn
EXTI4_IRQn
EXTI9_5_IRQn
EXTI15_10_IRQn
配置完NVIC接着配置EXTI_InitTypeDef,NVIC像一个中断大门而EXIT就像个中断的小门
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //打开时钟,选择复用模式
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //设置外部中断源
EXTI_InitStruct.EXTI_Line = EXTI_Line0;//选择外部中断线0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;选择外部触发模式
EXTI_InitStruct.EXTI_Trigger =EXTI_Trigger_Rising;选择上拉沿触发
EXTI_InitStruct.EXTI_LineCmd = ENABLE;使能
EXTI_Init(&EXTI_InitStruct);
来源:oschina
链接:https://my.oschina.net/u/4306685/blog/3144172