STM32使用中断方式读取按键控制LED灯的亮灭

一、中断介绍

1.中断概念

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

2.中断过程

中断过程包括:

  • 中断发出中断请求
  • 判断当前处理机是否允许中断和该中断源是否被屏蔽
  • 优先权排队
  • 处理机执行完当前指令或当前指令无法执行完,则立即停止当前程序,保护断点地址和处理机当前状态,转入相应的中断服务程序
  • 执行中断服务程序
  • 恢复被保护的状态,执行“中断返回”指令回到被中断的程序或转入其他程序

3.中断目的

采用中断方式工作有很多好处,包括:

  • 提高计算机系统效率,通过中断协调处理机和外部设备的处理速度
  • 维持系统可靠正常工作,通过中断系统向操作系统发出请求,由操作系统来实现人为干预
  • 满足实时处理要求,随时向处理机发出中断请求,随时进行响应
  • 提供故障现场处理手段,如果出现故障可以立刻发起中断请求,提高系统可靠性

4.中断优先级

如果在同一时刻,有多个中断源发起中断请求,处理机只会对优先级高的进行应答,然后再处理优先级别低的中断请求。
在stm32中,一个中断的优先级由两部分决定,一个是抢占式优先级,还有一个是响应优先级。两个优先级组成了一个4位的控制字。

5.中断使用流程

  • 中断的相关配置
  • 设置优先级分组
  • 书写中断服务程序

二、外部中断控制器EXTI

管理23个外部中断线(EXTI Line),0~15号外部中断线用于由GPIO引脚触发的外部中断。当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部中断的功能,可以设置外部中断的触发方式。
在这里插入图片描述

三、实验流程

了解完中断后,我们用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关,采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。由于没有开关,所以使用一根杜邦线代替

  1. 建立工程
    打开STM32CubeMX建立工程,选择芯片,我使用的是STM32F103C8,根据自己的芯片类型选择。

  2. 引脚配置
    PA5设置为GPIO_Output,然后将PB15设置为GPIO_EXTI13,如图所示
    在这里插入图片描述

  3. 外设配置
    GPIO模式设置为推免模式,触发模式为下降沿触发。PA5设置名字为LD,PB15设置为B1_EXTI在这里插入图片描述在这里插入图片描述

  4. NVIC设置
    将外部中断线EXTI_Line[15:10]使能
    在这里插入图片描述

  5. 配置中断优先级
    优先级分组为第4组,16级抢占优先级;修改外部中断线 直接使用由中断编号设置的默认中断优先级EXTI line[15:10]的抢占优先级为15
    在这里插入图片描述

四、编写代码

生成工程之后,需要在main.c文件当中添加代码
在这里插入图片描述
添加如图所示的外部中断回调函数
在①外部中断的初始化函数当中,②为将外部中断的触发方式设置为下降沿触发,③为设置外部中断的优先级为15,并将这个外部中断使能。
在这里插入图片描述

五、实验效果

连接电路后,将BOOT0置为1,BOOT1置为1通过mcuisp软件烧录.hex程序,
在这里插入图片描述
烧录程序后断电BOOT0,1复位,BOOT0置为1,BOOT1置为1,接电
在这里插入图片描述
首先,PB15引脚接入3V时,LED为亮,然后断开,接入GND,一个下降沿到来,收到中断请求,LED灭。

六、总结

通过此次实验,了解了中断是如何进行的,以及在STM32当中中断的使用方法,采用中断的方式和直接存储器的方式,中断的响应速度非常快,一个中断的产生时间是微秒级别的,只要接收到一个中断请求,马上就可以进行处理。
参考资料:stm32之中断系统.

  • 17
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一款基于ARM Cortex-M系列内核的32位微控制器,可用于开发嵌入式系统。按键中断LED灯亮是嵌入式系统中非常常见的功能,下面我将用300字回答如何使用STM32按键中断控制LED。 首先,我们需要连接一个按键和一个LEDSTM32控制器的相应引脚上。假设按键连接到PA0引脚,LED连接到PC13引脚。 接下来,我们需要配置STM32的GPIO外设来控制这些引脚。首先,开启相关引脚的时钟。然后,将PA0引脚配置为输入模式,PC13引脚配置为输出模式。可以使用STM32的寄存器或者开发环境提供的库函数来完成这些配置。 然后,我们需要配置外部中断。配置PA0引脚所对应的外部中断线,使其可以检测到按键的状态变化。可以使用STM32的寄存器或者库函数来完成这个配置。 紧接着,我们编写中断处理函数。当按键状态发生变化,中断触发时,中断处理函数被调用。在该函数中,我们可以读取按键引脚的状态,如果按键被按下,我们将PC13引脚设置为高电平,LED灯亮起;如果按键被释放,我们将PC13引脚设置为低电平,LED。 最后,我们需要在主函数中启用中断。启用中断后,当按键状态发生变化时,中断处理函数将被调用。 以上就是使用STM32按键中断控制LED灯亮的步骤。通过配置GPIO外设和外部中断,编写中断处理函数,我们能够实现按下按键时,LED灯亮起;释放按键时,LED的功能。这样就完成了按键中断控制LED灯亮的任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值