STM32配置GPIO--外部中断的配置(库函数版本)

本文章以STM32F407ZGTx为例:
STM32F407的外部中断有22个:
在这里插入图片描述
从图中可以看出STM32F407供IO口使用的中断线有16个,但其每个IO口都能够作为外部中断的输入,他是如何做到的呢?
在这里插入图片描述
从上图我们可以发现STM32F407是通过映射的方式来将16个中断线分配到每一个IO口上,但这样的映射有个限制:一个中断线每次只能连接一个IO口。
配置外部中断首先我们要配置对应的IO口,使能IO口的时钟、外部中断的时钟,设置IO口与外部中断线的映射关系。(这里以PA0为例)
在这里插入图片描述
在这里插入图片描述
一般开启时钟的函数都在stm32f4xx_rcc.c文件中,因为GPIOA的时钟在AHB1这条总线上,所以我们用的是RCC_AHB1PeriphClockCmd()函数,所有的外部中断都要开启SYSCFG时钟。SYSCFG_EXTILineConfig()函数原型在stm32f4xx_syscfg.c文件中,配置其他的外部中断的话可以看看函数原型,改一下入口参数。接下来就GPIO的标准输入配置了。
配置完GPIO后接下来就是对外部中断的配置。在这里插入图片描述
外部中断的配置主要是对外部中断线的初始化,这里使用的是stm32f4xx_exti.c文件里的EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)函数对外部中断初始化,初始化的内容主要是对EXTI_InitStruct里面的元素进行赋值,然后传递给该函数。
最后是对总中断的配置。
在这里插入图片描述
NVIC的配置主要是对NVIC的初始化,这里使用的是misc.c文件里的NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)函数对NVIC初始化,初始化的内容主要是对NVIC_InitStruct里面的元素进行赋值,然后传递给该函数。
配置完NVIC后就可以编写外部中断函数啦。
在这里插入图片描述
我们可以通过获取外部中断0的中断标志位来判断是否为外部中断0产生的中断,获取中断标志位的函数在stm32f4xx_exti.c文件中EXTI_GetFlagStatus(uint32_t EXTI_Line)或EXTI_GetITStatus(uint32_t EXTI_Line)我主要使用的第二个函数。每次进入中断后要对中断标志位进行软件清零。我这里通过stm32f4xx_exti.c文件中的EXTI_ClearITPendingBit(uint32_t EXTI_Line)函数进行清零。我这里主要是通过PA0按键来实现LED的亮灭。
以上就已经将外部中断配置完毕了,但这样配置的可移植性很差,所有我在其头文件中加了一些宏定义来扩展他的可移植性。在这里插入图片描述
这样初始化函数就可以改成这样
在这里插入图片描述
外部中断服务函数可以改成这样
在这里插入图片描述
这样就可以之间通过改变宏定义来更改初始化的外部中断线啦。
PS:其实这种方法也不是很完整,只是我比较懒并且这个方法我修改起来也比较熟练。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值