HAL 库中用中断方式实现按键控制LED

本文介绍如何使用STM32 HAL库通过外部中断控制LED灯。实验中,按键连接GPIOB7,LED连接GPIOA4,中断模式下,按键按下时LED亮,释放时熄灭。详细步骤包括在STM32CubeMX配置GPIO和中断,修改HAL库代码,烧录程序并观察运行结果。
摘要由CSDN通过智能技术生成

一、关于中断

有关中断的简介在我上一篇博客:利用串口中断方式实现完成STM32的USART串口通讯程序
已经有所提及了,在这里我再补充几个。

外部中断

什么是外部中断?举个例子:比如你今天有个快递,快递一般放在前台或是门卫。你有两种方法,1、不停问前台,你的快递到了没有;2、等快递到了,让前台告诉你。前者就是轮询,后者就是外部中断。外部中断是由引脚检测到的中断。中断可以由上升沿、下降沿或双边沿触发。换句话说,中断不是由CPU去“询问”,而是由中断控制器“通知”的。
为了给CPU减小负担,我们通常使用外部中断。
外部中断控制器:

  • 管理23个外部中断线(EXTI Line)
  • 0~15号外部中断线用于由GPIO引脚触发的外部中断
  • 16~22号外部中断线用于RTC闹钟事件、以太网唤醒事件和USB唤醒事件等
  • 当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部中断的功能,可以设置外部中断的触发方式
    外部中断控制器

GPIO引脚的外部中断

**GPIO引脚的外部中断触发方式:**上升沿触发、下降沿触发、双边沿触发。
引脚分组:
属于外部中断的线共有16条,引脚数量多于16,所以引脚要共用外部中断线。
在这里插入图片描述

二、实验内容与实验过程

1、实验内容

用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
整体来说,我们可以把整个电路等效为一个按键电路,如图所示:
在这里插入图片描述
上拉式按键:
按键按下,引脚PB7读到低电平
按键释放,引脚PB7读到高电平
触发方式:
按键按下瞬间,形成下降沿
按键释放瞬间,形成上升沿

在本次实验中我们的

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
按键中断控制LED灯通常涉及到硬件输入(如按键)、中断处理机制以及硬件输出(如LED灯)。HAL库(Hardware Abstraction Layer)是一种常见的软件设计模式,它位于应用层和硬件驱动层之间,提供了一种隔离应用层对底层硬件依赖的方式。 ### 实现步骤: #### 1. 硬件配置: - **选择合适的微控制器**:大多数基于ARM Cortex-M系列的微控制器都内置了中断控制器,如STM32、Freescale LPC、Atmel AVR等。 - **连接LED和按键**:将LED连接到微控制器的一个I/O端口,并通过GPIO配置将其作为输出端口;将按键的一端接地,另一端接至微控制器的某个输入端口并设置为中断触发方式。 #### 2. 初始化HAL库: - 根据所选微控制器的文档,初始化HAL库。这通常包括启动系统钟、配置CPU寄存器、初始化GPIO和中断系统。 - 对于特定的微控制器,如STM32,可能需要使用相应的HAL库包(例如`stm32f4xx_hal`),并通过宏定义和头文件包含来启用所需的功能模块。 #### 3. 配置中断: - 使用HAL库提供的函数来配置中断向量表、中断优先级和其他中断相关的配置项。 - 设置按键对应的GPIO中断回调函数。当按键按下或释放,该函数会被自动调用,允许处理器暂停当前任务并立即响应事件。 #### 4. 中断处理函数: - 编写中断服务例行程序(ISR,Interrupt Service Routine)。此函数会在中断发生执行,负责检测按键状态变化并相应地更新LED的状态。 - 在ISR中检查按键的状态,如果按键从未按下变为按下,则点LED;反之则熄灭LED。 #### 5. 主循环和应用逻辑: - 启动主循环,不断检查是否有中断发生。如果没有中断,继续执行应用程序逻辑。 - 当有中断到来,调用中断处理函数,并清除中断标志位以避免重复中断。 #### 6. 测试与调试: - 运行程序并测试按键和LED之间的互动是否按照预期工作。 - 使用调试工具跟踪中断的发生点及处理过程,确保所有功能正常且无异常情况。 ### 相关问题: 1. 如何在不同类型的微控制器上配置相同的按键中断控制LED灯功能? 2. 在嵌入式系统中,如何有效地管理资源有限环境下的中断和多任务处理? 3. 当遇到硬件故障或电路问题,在按键中断控制LED灯的应用中可能会遇到哪些常见错误及其解决策略是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值