本文主要是介绍关于 EXTI 中断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、EXTI 中断
PA0,PB0,......PG0 共用一个中断标志 EXT0
PA1,PB1,......PG1 共用一个中断标志 EXT1
...................................
...................................
PA15,PA15,......PG15 共用一个中断标志 EXT15
疑问:官方库函数有19条EXTI_Line,EXTI_Line0 -- EXTI_Line18,多出来的3条在哪里?
祥见 EXTI_InitTypeDef.EXTI_Line 段落
二、在NVIC中:
EXTI0--EXTI4各自有独立的IRQ_Channel,对应的中断服务函数是 void EXTI(n)_IRQHandler(void),(n)=0--4。
EXTI5--EXTI9共用一个IRQ_Channel,对应的中断服务函数是 void EXTI9_5_IRQHandler(void)。
EXTI10--EXTI15共用一个IRQ_Channel,对应的中断服务函数是 void EXTI15_10_IRQHandler(void)。
三、如何启用EXTI中断
1 .启动所需GPIOn_Pin及AFIO的RCC时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,RCC_APB2Periph_AFIO,ENABLE);
!!!千万别忘记启动RCC_APB2Periph_AFIO!!!,否则管脚只能做普通高低电平来用。
2 .用GPIO_InitStructure(用GPIO_InitTypeDef预先定义一下)设置所需GPIO口的Pin,Speed,Mode,
然后用GPIO_Init(GPIOn,&GPIO_InitStructure)来启用这些GPIO的Pin。
3 .用GPIO的中断线控制函数启动指定GPIO的某个Pin
GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource7);
4 .初始化中断,类似初始化GPIO
a)定义一个初始化的结构变量 EXTI_InitTypeDef EXTI_InitStructure;
!!!这步应该在函数外预先声明名!!!
b)输入该结构的成员值:EXTI_Line,EXTI_Mode,EXTI_Trigger,EXTI_LineCmd
c)用EXTI_Init(&EXTI_InitStructure);完成初始化
例:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO , ENABLE );
GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource7);
EXTI_InitStructure.EXTI_Line = EXTI_Line7;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
四、可以用软件模拟一个EXTI中断的产生,命令如下:
EXTI_GenerateSWInterrupt(EXTI_Line7);//产生EXTI_Line7的中断。
五、对应的中断服务函数在 "stm32f10x_it.c" 中
六、需用的 ".c" 文件有:
stm32f10x_rcc.c
stm32f10x_nvic.c
stm32f10x_gpio.c
stm32f10x_exti.c
stm32f10x_it.c
原文:http://blog.sina.com.cn/s/blog_537d61430101a2t9.html
这篇关于关于 EXTI 中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!