stm32按键控制LED灯亮灭(中断法)

这篇具有很好参考价值的文章主要介绍了stm32按键控制LED灯亮灭(中断法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

用按键控制STM32上的LED灯亮灭,可以采用轮询法和中断法。轮询法需要不断检测按键的状态,消耗MCU;而中断法只是在按下的那一刻触发中断,控制灯亮灭。轮询法相对于更常规,容易操作。因此我们这里讲的用中断法。关于中断的概述,这里不作介绍,只讲操作,分析代码,可以的话,欢迎上车。
注意: 使用HAL库,不讲标准库的使用

1、创建工程

这里我们用两个按键KEY1,KEY2和LED1,LED2.它们在单片机电路原理图上的位置如下图所示:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
打开STM32CubeMX,按下图分别配置好上述引脚:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
中断触发类型分为:上升沿;下降沿;上升沿和下降沿都触发三种方式,这里我们选用下降沿,即按下按键,灯灭,松开灯亮。
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
配好NVIC:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
配好RCC:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
配好SYS
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
配时钟(以STM32F103系列为例,8M外部晶振)
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
工程管理与代码生成:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件

2、keil5的主函数改写

进入到keil5后,只需要进行main.c的改写即可,在main主函数外加入下述代码。因为之前在STMCubeMX的配置已经生成了相关的配置代码。那具体该写些什么呢?先放上代码再做分析:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	
	switch(GPIO_Pin){
		case GPIO_PIN_0:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
		break;
		case GPIO_PIN_1:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
		break;
	}
}

上述是一个接口重写的代码。那为什么要这样写?这里就应该提到HAL库的优势之一:提供用户友好的API函数接口。我们这里采用的是中断法,只需要找到处理中断的那部分函数配置。如下图所示:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
上图1部分是处理中断请求的函数;2部分是个虚函数,我们仔细看一下上图的那个绿色字体关于这个函数的作用解释。可以理解为:检测中断发生的事件。这两个部分合起来可以理解为:2部分检测是否发生了中断,检测到了交给1部分来处理。而且2部分是个虚函数,绿色字体表明它可以作为一个回调函数。回调函数不是由该函数的实现方直接调用,而是在特定事件或条件发生时由另外的一方调用,用于对该事件或条件的响应。这就是为什么我们会在main.c里面对2部分进行了重写。另外关于上述函数体里面的代码,其实都只是调用了生成配置代码中的函数再加上C语言的语法。相关函数原型如下:
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件
stm32按键控制led灯亮灭,STM32教程,stm32,单片机,嵌入式硬件

结语

中断点灯就此结束,上述内容由我一个人整理,难免有疏漏。有问题欢迎留言讨论!文章来源地址https://www.toymoban.com/news/detail-723053.html

到了这里,关于stm32按键控制LED灯亮灭(中断法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】按键控制LED亮灭实验——GPIO、LED、KEY、SYS

    无锁存时:当按下独立按钮时LED亮,松开LED灭。 锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。 硬件部分 软件部分 1、引入头文件 2、主函数 首先时钟、led、按键初始化 锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。常

    2024年02月08日
    浏览(94)
  • 【stm32----按键中断实验,按键控制LED灯】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1灭; 2、按下KEY2,LED2亮,再次按下KEY2,LED2灭; 3、按下KEY3,LED3亮,再次按下KEY3,LED3灭; 一、头文件 1、gpio.h 2、key.h 二、初始化函数及功能函数 1、gpio.c 2、key.c 三、中断处理函数 do_irq.c 四、主函数 main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    浏览(50)
  • STM32——05-按键、时钟控制、中断复位 点亮LED灯

    如何点亮一颗LED灯   编程实现点灯 常用的 GPIO HAL 库函数: void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_TogglePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin );  结构体  GPIO_InitTypeDef  定义:

    2024年02月08日
    浏览(45)
  • 设计分享|单片机独立按键控制4个LED灯亮灭

    目录 具体实现功能 设计介绍 51单片机简介 设计思路 设计内容 仿真图(protues8.7) 程序(Keil5) 具体实现功能 单片机四个按键分别控制四个LED的亮灭! 设计介绍 51单片机简介 51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应

    2024年02月06日
    浏览(47)
  • FPGA通过一个按键控制三个LED灯亮灭(状态机法)

    FPGA型号:Cyclone IV EPFCE10F17C8    开发工具:Quartus13.0专业版  Modelsim 10.1d 文章目录 状态机 一、设计思路 二、代码设计 1.顶层代码 2.测试代码 三、仿真 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成

    2024年02月02日
    浏览(89)
  • 基于STM32CubeMX与keil采用按键外部中断方式控制LED与蜂鸣器

    这篇文章详细记录外部中断方式控制LED的亮灭以及蜂鸣器的开关;本文从原理图开始到最后实现功能,内容详细。 本栏目的所有都是基于STM32F407ZET6芯片,博主采用的是普中的天马F407开发板。 实现功能:LED0与LED1默认熄灭,蜂鸣器默认关闭。按下按键KEY0,控LED0亮灭;按下按

    2024年02月16日
    浏览(47)
  • STM32使用定时器更新中断使LED亮灭交替1S闪烁

    在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR(自动装载寄存器)计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件,当使能了更新中断以后,计数器溢出时则产生更新中断。 上图源自一位b站up主的定时器中断

    2024年02月05日
    浏览(50)
  • ARM day9 (按键中断控制led亮灭)

     保存现场 异常的处理流程,保存现场会做哪些事情(四大步三小步) ----CPU自动完成 1.保存CPSR寄存器中的值,到SPSR_mode寄存器中 2.修改CPSR寄存器对应的位         1修改CPSR寄存器对应的状态位(T位)         2根据需要,禁止相应中断位(I位 / F位)         3修改CPSR寄存

    2024年02月13日
    浏览(43)
  • 驱动控制STM32LED灯的两秒,亮灭

    2024年02月12日
    浏览(43)
  • HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05模块是一种基于蓝牙协议的简单无线通信设备,共有6个引脚,其中两个引脚通过stm32的两个含TX和RX的接口与之进行通信,一般用于无线控制,智能家居等。 VCC:用于供电 GND:用于供电 TX(发送):与单片机某一RX口进行通信 RX(接收):与单片机某一TX口进行通信 一句话

    2024年02月08日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包