外部中断的原理 + CubeMX配置

不同的Pin不能同时使用外部中断,如PA0,PB0,PC0...同时只能有一个选择外部中断EXIT0。

原理+CubeMX配置:

给PA0是默认低电平,那么按键KEY_UP按下后PA0读取的就是高电平,由低到高,就是上升沿触发,因此CubeMX就配置上升沿触发。

其余同理。

注意:子优先级也可以叫响应优先级。

中断分组:

  • Priority Group 0: 仅有抢占优先级,没有响应优先级。
  • Priority Group 1: 1 级抢占优先级和 1 级响应优先级。
  • Priority Group 2: 1 级抢占优先级和 2 级响应优先级。
  • Priority Group 3: 1 级抢占优先级和 3 级响应优先级。
  • Priority Group 4: 1 级抢占优先级和 4 级响应优先级。

抢占和子优先级的区别:

抢占优先级:高优先级的中断可以抢占低优先级的中断子优先级:当抢占优先级的数值相等,子优先级数值越小,优先级越高,则优先响应。(谨记是优先响应,并不可以打断正在执行的中断。)

然后生成文件:
在文件里找到中断服务程序。即
这样*****it.c的文件,里面有各个中断线,即EXTI0中断线。

将回到函数复制到main.c进行编写

Tips:按键中断实验的中断回调函数中能否添加延时消抖?

答: 不能。

具体原因如下:

1.因为中断事件要快速响应并快速处理,而延时是一个等待过程(原则上不行)

违背了高效率处理事件的思想,所以中断中不得加HAL_Delay延时。

2.HAL_Delay的底层实现是通过GetTick获取当前系统值的(即uwTick的值)(理论上不行)

而uwTick是通过systick异常服务程序自加的,systcik的中断优先级最低,无法打断任何一个中断,如果我们在中断中调用HAL_Delay,则程序会进入死循环

如下图,可知sustick的中断优先级

再如此函数

EXTI的中断优先级高于函数内部的delay函数,那么delay不能抢占也不能打断EXTI中断,则就会卡住不动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值