STM32外部中断总结

 

STM32外部中断总结

作者:JCY

该文章是学习了STM32后所写,是对STM32的小小的理解。在文中若有错误指出请指正,不胜感激。

STM32有最多68个可屏蔽的中断通道,有16个可编程的优先级。对于STM32F103ZE芯片,其内部包含了19个边沿检测器用来产生中断或者事件请求。对于外部中断只用了16个外部触发输入线。每一个外部输入线都能够被独立的屏蔽,pending register的寄存器能够保存输入线的状态,这个寄存器不能通过硬件自动清零,必须使用软件来清零;

外部中断的内部连接图如下:

触发信号通过输入线进入检测器,检测器的功能是可以设置的,就是通过上边两个边沿检测器即上升沿出发选择寄存器和下降沿出发选择寄存器。从图中就可以看出外部中断/事件触发方式有三种即上升沿触发、下降沿触发、上升沿和下降沿触发。在上升沿触发选择寄存器和下降沿触发选择寄存器中只有低20位有效,每一位各对应一个输入线。

在内部原理图当中我们看到有一个两输入或门电路,输入信号可以来自边沿检测器输出,也可以来自软件中断/事件寄存器。所以对于STM32要产生中断或者是事件有可能来自软件中断/事件触发寄存器或者外部输入信号线。通过改变软件中断/事件触发寄存器的值也是可以向内核请求中断或者事件,但是使用向软件中断/事件触发寄存器写1产生中断的前提是Penging request 寄存器中的相应的位必须是0(向Penging request 寄存器写1来清零相应的位)。

Pluse generator的右面也有一个与门电路,与门电路的输出是用来产生事件的。通过内部图可以看出若用产生事件必须使与门的两个输入线为真,即事件屏蔽寄存器的相应位使能和用软件或者是硬件请求。所以呀,中断或者事件的产生与否与会相互的影响,对于同一个输入通道可以设置为同时产生中断或者事件。对于控制中断或者事件是否使能的寄存器分别是中断屏蔽寄存器和事件屏蔽寄存器。

设置了上面的寄存器对于产生中断还是不够的,你还需要开启引脚第二功能时钟,对于AFIO时钟如何开启请参考STM32手册RCC部分。设置需要产生中断的引脚为输入模式(可以为上拉输入,下拉输入,悬浮输入等!)。每一个中断输入线可以对应几个引脚,例如PA0PB0......PG0都能够产生外部中0,但是每次只能由一个来产生中断,那么要让哪一个引脚连接到中断输入线上则通过外部中断配置寄存器了。外部配置寄存器有4个,每个寄存器对应可以配置4个输入线通道,正好16个。AFIO_EXTICR1的寄存器位图如下:

每一个通道对应4位,可以对应于GPIO的端口。

在程序中使用中断,不免会有中断优先级,STM32将中断优先级分为两组,即抢占优先级和响应优先级。具体的如何分参考有关手册,

外不中断的编写步骤:

l 确定抢占优先级和响应优先级如何分组,对于整个芯片的只能使用其中的一组

l 设置引脚为输入模式,最好为悬浮输入模式。

l 将某一个端口映射到触发输入线

l 设置该外部中断通道的触发模式

l 使能中断,设置改中断的优先级

l 打开引脚第二功能时钟

备注:对于相应的端口时钟不需要打开

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
外部中断是指由外部信号触发的中断事件。在STM32微控制器中,外部中断可以通过引脚的外部触发方式来实现。以下是一些关于STM32外部中断的常见问题和回答: 1. 如何配置外部中断? 首先,选择要作为外部中断触发源的引脚。然后,使用GPIO库函数将引脚配置为输入模式,并启用外部中断功能。最后,配置外部中断触发条件,例如上升沿、下降沿或双边沿触发。具体的配置步骤和函数可以参考ST固件库或者HAL库的文档。 2. 如何编写外部中断的中断服务函数? 在STM32微控制器上,外部中断触发时,会跳转到预定义的中断服务函数。您需要在代码中编写该中断服务函数,并根据需求进行处理。可以使用HAL库提供的函数来判断是哪个引脚触发了中断,并进行相应的处理。 3. 外部中断有哪些触发方式? STM32微控制器支持多种触发方式,包括上升沿触发(Rising Edge Trigger)、下降沿触发(Falling Edge Trigger)、双边沿触发(Rising/Falling Edge Trigger)等。您可以根据实际需求选择合适的触发方式。 4. 外部中断能同时处理多个引脚的中断吗? 是的,STM32微控制器支持同时处理多个引脚的外部中断。您可以配置多个引脚为外部中断触发源,并在中断服务函数中根据需要进行处理。 请注意,以上回答是基于一般情况下的使用,具体的配置和编程方式可能会因不同的STM32系列、芯片型号和开发环境而有所差异。建议您参考相关的文档和例程来进行具体的配置和编程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值