HAL库学习02---按键(中断和扫描)控制LED

1、硬件设备

STM32F103ZET3开发板
STLink

1、实现功能

上电初始化后,LED0灯灭;
当按键按下时LED0状态翻转;

3、原理图分析

在这里插入图片描述
在这里插入图片描述
LED灯原理在上节已经解释,这节不再赘述,这里共有两个按键分别为KEY0、KEY1,以KEY0为例当按键按下时,电流流向按键,然后接地,则 PE4 为低电平0。
当按键松开时,电流流向 PE4 ,则 PE4 是高电平 1。
因此实现按键控制LED可以有两种方法
1、扫描:读取PE4引脚的电平,当为低电平时LED状态发生反转
2、中断:按键按下,触发外部中断,则将LED2灯状态翻转。

3、CubeMX配置

这里不再详细阐释步骤,采用中断控制LED时,记得要开启中断使能,这里的优先级采用默认的抢占优先级0,子优先级0,其中优先级数越小代表该中断的优先级也就越高。
按键

配置RCC时钟源
在这里插入图片描述

3、程序编写

采用模块化编程方式,适合后续的程序调用和移植,也可以理解为函数封装

函数封装: 函数封装是指将一组相关的功能封装到一个函数中,以便重复使用。它可以帮助程序员更有效地编写代码,并减少重复代码的重复编写。
方法一:

key.c

#include "key.h"
#include "led.h"

void Key(void)
{
	if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4))
	{
		HAL_Delay(100);//按键消抖
		if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4))
			Red_ON();
		else Red_OFF();
	}
}

key.h

#ifndef _KEY_H
#define _KEY_H
#include "main.h"
void Key(void);
#endif

main.c
直接在while后面加入

key();

方法二:

在main.c中直接增加中断回调函数,当检测到中断时执行中断回调函数,翻转LED0灯的状态。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//中断回调函数,当有中断发生时,将LED0灯进行翻转
{		
	 HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);	//sorry,忘记在上一章中定义LED翻转了,自己可以直接在后面定义的,如:#define LEDTOGGLE 	 HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin)
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值