【学习记录】STM32中断进阶任务:按键控制指示灯闪烁频率

这篇具有很好参考价值的文章主要介绍了【学习记录】STM32中断进阶任务:按键控制指示灯闪烁频率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

采用德飞莱STM32板,主控芯片STM32F103ZET6。

任务内容:利用按键B1控制指示灯LD2的闪烁频率,闪烁频率设置为3档:初始状态时,LD2按照2Hz的频率闪烁;第一次按键后,LD2按照10 Hz的频率闪烁;第二次按键后,LD2按照20Hz的频率闪烁。再次按键后让LD2恢复以2Hz的频率闪烁,并重复上述过程。按键的检测采用中断方式。

硬件原理:按键B1由引脚PC13控制:按键按下时为下降沿触发方式,释放时为上升沿触发方式。指示灯LD2由引脚PA5控制;PA5输出高电平,开启指示灯;PA5输出低电平,关闭指示灯。

任务实现

1. 设计思路

采用前后台编程模式:定义一个全局变量BlinkSpeed,初始化为0。在外部中断服务程序(前台程序)中修改BlinkSpeed的值;在主程序(后台程序)的while(1)循环中不断检测BlinkSpeed的值,根据取值的不同修改指示灯的闪烁频率。

2. 引脚分配和外设配置

本任务所使用的引脚和外设与基础任务中所使用的相同,因此省去引脚分配和外设配置的过程。

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

1.

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

双击进入

2.

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

3.

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

4.配置LED灯引脚(PB5)

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

5. 配置KEY键引脚(PE2)

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

配置上拉、上升沿和下降沿

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

使能中断

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

6.配置时钟树

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

7.改名、保存、打开

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

stm32按键控制led闪烁频率,STM32,中断,按键,stm32,单片机,学习

3. 程序编写

生成MDK工程后,进行应用程序的编写。具体代码如程序代码段1和2所示。

代码段1:

/* USER CODE BEGIN PV */
volatile uint8_t BlinkSpeed = 0;// 指示灯闪烁频率:0->2Hz 1->10Hz  2->20Hz
/* USER CODE END PV */
/* ………………………… */ // 省去中间部分代码 
/* Infinite loop */
/* USER CODE BEGIN WHILE */ 
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if( BlinkSpeed == 0) // 2Hz 闪烁频率
		{
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
			HAL_Delay(500);
		}
		else if( BlinkSpeed == 1 ) // 10Hz 闪烁频率
		{
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
			HAL_Delay(100);
		}
		else							 // 20Hz 闪烁频率
		{
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
			HAL_Delay(50);
		}
		
  }
  /* USER CODE END 3 */

程序解释:

① 第2行定义了一个变量 BlinkSpeed,用来存放指示灯的闪烁频率:BlinkSpeed为0表示2 Hz的闪烁频率;BlinkSpeed为1表示10Hz的闪烁频率;BlinkSpeed为2表示20 Hz的闪烁频率。由于变量BlinkSpeed在中断服务程序中修改,在主程序中判断。为了避免变量被编译器优化,在变量定义时,添加了关键字 volatile 来修饰。

② 第11~25行是while(1)循环中报执行的代码。采用if-else if-else的多分支语句,通过判断BlinkSpeed的取值来改变指示灯的闪烁频率:当BlinkSpeed为0时,设置闪烁频率为 2 Hz,即延时时间为500ms;当BlinkSpeed为1时,设置闪烁频率为10Hz,即延时时间为100ms;当BlinkSpeed为2时,设置闪烁频率为20Hz,即延时时间为50ms。

代码段2:

/* USER CODE BEGIN 4 */
/*
 * @brief ExTI line detection callbacks.
 * @param GPIO_Pin: Specifes the pins connected EXTI line
 * @retval None
*/

void HAL_GPIO_EXTI_Callback(uint16_t GPI0_Pin)
{
	
	if(GPIO_PIN_2 == GPI0_Pin) // 判断发生外部中断的 GPIO 引脚
	{
		BlinkSpeed++; // 修改 BlinkSpeed 变量的值 
		if( BlinkSpeed == 3) // 判断是否完成一次循环
		{
			BlinkSpeed = 0;
		}
	}
}
/* USER CODE END 4 */

程序解释:

在外部中断回调函数中对变量Blink ASpeed加1,并判断BlinkSpeed的值是否等于3。如果等于3,则对BlinkSpeed清零,重新开始下一轮的循环。

运行结果:

将程序编译链接,生成可执行代码,通过ST-Link仿真器下载到开发板上可以观察到:上电后,指示灯LED2按照2Hz频率闪烁。按下按键B2后,指示灯LED2闪烁频率加快,照10Hz频率闪烁。再下按键B1后,示灯LED2闪烁频率更快,按照20 Hz频率闪烁。第三次按下按键后,指示灯恢复到2 Hz的闪烁频率,并重复上述过程。文章来源地址https://www.toymoban.com/news/detail-725333.html

到了这里,关于【学习记录】STM32中断进阶任务:按键控制指示灯闪烁频率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32】利用CubeMX对FreeRTOS用按键控制任务

    对于FreeRTOS中的操作,最常用的就是创建、删除、暂停和恢复任务。 此次实验目标: 1.创建任务一:LED1每间隔1秒闪烁一次,并通过串口打印 2.创建任务二:LED2每间隔0.5秒闪烁一次,并通过串口打印 3.创建任务三:通过KEY1实现对任务一的创建和删除。 按键按下以后如果有任

    2024年02月13日
    浏览(50)
  • STM32G030C8T6:使用按键控制LED亮灭(外部中断)

    本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考; 本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过KEY1 按键的PA0 引脚配置成中断输入引脚,PB9引脚配置成输出,每次按键,PA0 引脚就会进入一次外部中断,每进

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

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

    2024年02月16日
    浏览(39)
  • 【STM32】STM32学习笔记-按键控制LED 光敏传感器控制蜂鸣器(08)

    led.h led.c key.h key.c main.c 电路图: 实物图: buzzer.h buzzere.c lightsensor.h lightsensor.cpp main.c 04-Key控制LED.rar 05-光敏传感器控制蜂鸣器.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年04月23日
    浏览(42)
  • STM32—按键中断

    目录 中断简介 程序  注: (1)         EXTI(外部中断):EXTI是ST公司在其STM32产品上扩展的外中断控制。它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断,以及软件中断。其输出最终被映射到NVIC的相应通道。因此,配置EXTI中断的过程 必然包含对NVIC的配置

    2023年04月08日
    浏览(23)
  • 【STM32】外部中断实现按键实验

    🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言: 你只管努力,剩下的交给时间! 在前面的文章控制LED和蜂鸣器的按键实验中详细的讲解了怎样通过GPIO的输入模式来控制LED灯和蜂鸣器的状态。这篇文章同样是实现上诉的功能,但是方式是采用外部中断的方式实现的

    2024年02月05日
    浏览(38)
  • HAL库STM32CUBEMX学习记录(一)——USART(串口中断收发数据)

    一、首先使用STM32CUBEMX新建一个工程 二、打开工程文件 1.在usart.c中添加以下代码  2.然后在最后面加入中断回调函数 3.在usart.h文件中加入  4.新建一个cmd.c文件,创建命令check函数 5.在mian函数中的while(1)循环中调用USART1_Check(USART_RX_BUF)函数 6.最后串口初始化函数后打开串口中

    2024年02月16日
    浏览(31)
  • STM32HAL库定时器中断、按键中断、串口中断、按键消抖和低通滤波算法详解

    本文将详细介绍STM32HAL库中的定时器中断、按键中断、串口中断的使用方法,以及按键消抖和低通滤波算法的实现。希望能对您的STM32开发提供帮助。 目录 1. 定时器中断 2. 按键中断 3. 串口中断 4. 按键消抖 5. 低通滤波算法 一、定时器中断 定时器中断是STM32开发中常用的一种

    2024年02月15日
    浏览(34)
  • STM32MP157驱动开发——按键驱动(中断)

    对于使用中断的按键驱动,内核自带的驱动程序 drivers/input/keyboard/gpio_keys.c 就可以,需要做的只是修改设备树指定引脚及键值 中断是引入其他基础知识的前提:休眠-唤醒、POLL 机制、异步通知、定时器、中断的线程化处理都离不开中断 设备树相关 查看原理图确定按键使用的

    2024年02月15日
    浏览(32)
  • STM32 | STM32F407ZE中断、按键、灯(续第三天)

    上节回顾 STM32 | 库函数与寄存器开发区别及LED等和按键源码(第三天) 中断概念 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行(面试题)。 STM32外部中断需要

    2024年03月17日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包