STM32CubeIDE外部中断

  1. 什么是中断?

简介:让CPU打断正常运行的程序,转而去处理紧急的事情(程序),就叫中断

中断执行机制,可简单概括为三步:

  1. 中断请求:外设产生中断请求(GPIO外部中断,定时器中断等)
  2. 响应中断:CPU停止执行当前程序,转而去执行中断处理程序
  3. 推出中断:执行完毕,返回被打断的程序处,继续往下执行
  1. 外部中断介绍

检测GPIO口电平变化,当检测到指定的电平变化时,可触发外部中断,执行中断服务函数

-支持的触发方式:上升沿/下降沿/双边沿/软件出发

-所有GPIO口都支持,但相同Pin不能同时使用外部中断

  1. 实验原理分析

  1. 实战环节

目的:使用外部中断线,实现KEY_UP控制BEEP响停,KEY1控制LED1翻转,KEY0控制LED0翻转。

能学到:1.使用外部中断的方式来检测按键的状态

接着,开始我们的实践操作!!!

首先上一节在main函数中写的按键代码跟这节一样,为什么要用外部中断呢?因为外部中断响应快,不用写在main中,随时都可以响应。

把对应按键的IO口设置为GPIO_EXTI;

下图:第一个:上升沿触发

第二个:下降沿触发

第三个:双边沿触发

下面三个是软件触发

根据上面的原理,设置好对应的中断模式和对应的GPIO初始模式。

接下来:配置中断优先级(数字越小中断级越高)
Preemption Priority:抢占优先级

Sub Priority:响应优先级

Priority Group:中断分组(也就是NVIC的中断分组)

中断分组这里我们选择4bits for pre-emptic:四个位都给抢占优先级使用。

抢占优先级:高优先级中断可以抢占低优先级中断,然后去执行

那么什么是响应优先级:就是说当我们的抢占优先级数值相等,响应优先级数值越小越优先响应(不是说响应优先级数字大的正在执行去打断,也不是抢占,而是优先响应)

下面如下图配置(方便理解):

中断函数放在了stm32f1xx_it.c中,在这里需要我们编辑的函数就是viod HAL_GPIO_Callback(uint16_t  GPIO_Pin),前面的_weak是需要我们自定义的意思

然后把这个函数到main.c中定义一下,内容根据本节课目的写一下如下图。

这样编译运行之后,你会发现按键没有消抖,LED有时候不是很灵

然后像下图这样消抖,运行之后你会发现按键怎么按,LED都没有响应,这样呢我们就需要考虑中断优先级的问题了,刚刚我们配置的这个外部中断优先级是2,然后滴答定时器是15,这个HAL_Delay函数实际就是滴答定时器提供的。所以2的优先级是比较高的,那么在高的优先级里面呢,高优先级正在执行,低优先级是没得执行的。就会导致一直卡在这里

所以我们需要把Time base:System tick timer(滴答定时器)配置为1或者0

然后再编辑就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值