首页 理论教育 嵌入式应用技术:编写exti.h

嵌入式应用技术:编写exti.h

时间:2023-10-21 理论教育 版权反馈
【摘要】:按照步骤,我们首先要做好配置外部中断驱动的准备,第一步编写exti.h文件代码:头文件的前面几行基本是相同的,在引脚定义处对外部中断用到的GPIO做好宏定义,以方便使用。图5-10EXTI_PinSource0的宏定义第三个宏定义EXTI_Line0,指的是输入线编号,在头文件stm32f4xx_exti.h中可以找到,如图5-11所示。中断服务函数的函数名应与这个向量表中的名字一致,函数写在stm32f4xx_it.c文件中。

嵌入式应用技术:编写exti.h

按照步骤,我们首先要做好配置外部中断驱动的准备,第一步编写exti.h文件代码:

头文件的前面几行基本是相同的,在引脚定义处对外部中断用到的GPIO做好宏定义,以方便使用。

下列语句是对GPIO与Pin的时钟的宏定义:

这些宏定义都比较容易理解,都是对开启GPIO时钟与引脚的定义。

下列语句是对PA0作为外部中断的设置宏定义:

第一个宏定义EXTI_PortSourceGPIOA,在stm32f4xx_syscfg.h中可以找到,很明显这是用于选择Px口的宏定义,如图5-9所示。

图5-9 EXTI_PortSourceGPIOA的宏定义

第二个宏定义EXTI_PinSource0,同样在stm32f4xx_syscfg.h中可以找到,如图5-10所示。这部分内容涉及NVIC的设定,对16个引脚进行编号。

(www.xing528.com)

图5-10 EXTI_PinSource0的宏定义

第三个宏定义EXTI_Line0,指的是输入线编号,在头文件stm32f4xx_exti.h中可以找到,如图5-11所示。可以看到输入线有24条,而且最后8条有特殊使用,比表5-5多了一条输入线。这条多出的输入线是Line23,连接至LPTIM,是L系列低功耗定时器中断使用的输入线。这个EXTI_Linex应该与Pin_x相对应,比如Pin_0对应的输入线就是EXTI_Line0。

图5-11 EXTI_Line0宏定义

第四个宏定义EXTI0_IRQn,是STM32的中断编号,可以从表5-2中查阅到,对应的是EXTI Line0的中断,也可以在stm32f4xx.h中查看,如图5-12所示。

图5-12 EXTI0_IRQn的中断号

第五个宏定义EXTI0_IRQHandler可以在文件startup_stm32f40xx.s中找到,如图5-13所示。我们知道startup_stm32f40xx.s是汇编语言编写的启动文件,这里EXTI0_IRQHandler指的是EXTI0的中断向量

图5-13 EXTI0_IRQHandler对应的中断向量

这个向量表与中断服务函数的入口对应。中断服务函数的函数名应与这个向量表中的名字一致,函数写在stm32f4xx_it.c文件中。为了方便使用,这里将EXTI0_IRQHandler宏定义为KEY1_IRQHandler。

相应地PC13的定义与PA0的定义相似,但外部中断13没有专用的中断编号,外部中断10~15是共用中断的。外部中断10~15的中断线对应中断编号和中断向量共用EXTI15_10_IRQn与EXTI15_10_IRQHandler,中断号可以在表5-2中查阅。

最后一行是“void EXTI_Key_Config(void);”,预先声明按键的外部中断配置函数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈