关于STM32外部中断配置
程序员文章站
2024-02-21 23:25:40
...
外部中断映射原理
首先所有的GPIO口都可以被配置成外部中断源,但是外部中断线只有19根,分别是EXTI0-EXTI18;这样就不能一个GPIO口对应一根外部中断线了,于是就有了多个GPIO口公用一根外部中断线的设计了,怎么共,见下图;中断响应只响应中断线,不直接响应GPIO,所以在使用的步骤是,1.配置GPIO的引脚模式,2配置EXTI的中断源,3配置NVIC的中断等级和中断函数
配置引脚模式
打开时钟,包括AFIO时钟,配置外部中断寄存器得用,配置上拉输入
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);
配置EXTI中断源
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);
EXTI_InitStructure.EXTI_Line = EXTI_Line10;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
配置NVIC,确定等级和中断函数
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置第一组抢占4位,次要0位,依次类推,到抢占0位,次要4位
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//外部中断函数向量有1,2,3,4,5-9,10-15
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//次优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
至于什么时候打开AFIO时钟,参考https://blog.csdn.net/u013082827/article/details/77543394
上一篇: mysql 超大数据/表管理技巧
下一篇: 《计算机网络自顶向下》读书笔记