【STM32】基于STM32F407的中断开关点灯

一、中断介绍

1. 中断是什么

  中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。
  中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
在这里插入图片描述

中断分为同步中断异步中断

  • 同步中断:同步中断是当指令执行时由控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。

  • 异步中断:异步中断是由其他硬件设备依照 CPU时钟信号随机产生的。

  通常所说的中断指的是异步中断,我们将同步中断称为异常。(异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的)

2. 中断的作用

  跟据中断的定义,我们可以通过中断使处理器转而去优先运行正常控制流之外的代码。

  当中断信号达到肘,CPU必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值 (寄存器的内容) ,并把与中断类型相关的地址放进程序计数量。
在这里插入图片描述
中断处理:指CPU响应中断,转入中断处理程序,系统开始处理中断。
中断响应:指CPU收到中断请求后转向相应的事件处理程序。
中断屏蔽:指在中断请求产生后,系统用软件方式有选择地封锁部分中断而允许其余部分中断仍能得到响应。

3. 中断类型及优先级

中断类型

  • 硬中断:通过处理器中断信号线产生的中断
  • 软中断:通过非法指令或特殊指令触发的中断

中断优先级

  • 多个中断同时出现时,处理器先响应高优先级的中断
  • 低优先级中断的ISR执行时,可以被高优先级中断再次打断
  • ISR比App Code拥有更高的执行优先级

在这里插入图片描述

二、中断方式点灯

1. 新建工程

  1. 创建一个STM32F407STM2CubeMX项目:
    在这里插入图片描述

  2. 外设设置
    设置指示灯LED引脚PF9,设置引脚模式为输出模式GPIO_Output
    设置按键引脚PF8,设置引脚为外部中断功能,PF8与外部中断线EXIT8连接GPIO_EXIT8
    在这里插入图片描述
    对于LED对应的PF9管脚,默认设置即可,名字设为LED
    在这里插入图片描述
    对于开关对应管脚PF8,设置其触发方式为上升沿触发External Interrupt Mode with Rising edge trigger detection

    User Label处设置名字为 F8_EXTI
    在这里插入图片描述

  3. 使能对应的外部中断线,点击Enabled
    在这里插入图片描述

  4. 设置Project Manager后,生成代码:
    在这里插入图片描述

2. 编写代码

打开工程,搜索HAL_GPIO_EXTI_Callback函数
在这里插入图片描述
在这里插入图片描述

该函数为外部中断回调函数,__weak表示此函数为虚函数,需要用户重写。
在main.c文件中找个地方重新写如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
	if( GPIO_Pin == F8_EXTI_Pin)//判断外部中断源
	{
		HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);//翻转LED状态
	}
}

在这里插入图片描述
编译一下,没有出错
在这里插入图片描述

3. 烧录验证

  1. 将代码烧录到核心板中
    在这里插入图片描述
  2. 电路连接
    请添加图片描述

三、总结

  本文通过了解中断的相关知识,基于STM32F407使用STM32CubeMX实现了开关接高电平时,LED亮灯;接低电平时,LED灭灯的点灯操作。

四、参考

https://blog.csdn.net/qq_20233867/article/details/72236576

STM32 HAL库 CubeMx 按键中断控制LED

https://blog.csdn.net/qq_46467126/article/details/121055475

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值