复制LED灯闪烁的工程,重命名为源码(key),打开工程
一、新建key.c 与key.h
key.c
内容复制led.c的内容进行修改GPIO_MODE_OUTPUT_PP跳转到定义
Mode
改为输入
Pull
下拉输入指的是在按键未按下时,输入引脚会被拉低。这种情况下,按键按下时会使输入引脚变为高电平。
上拉输入与下拉输入相反,指的是在按键未按下时,输入引脚会被拉高。按键按下时,输入引脚会被拉低。
需要进行消抖
#include "./BSP/KEY/key.h"
void key_init(void)
{
//定义结构体
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOB_CLK_ENABLE();
gpio_init_struct.Pin=GPIO_PIN_1; /*根据自己接的引脚*/
gpio_init_struct.Mode=GPIO_MODE_INPUT; /*输入*/
gpio_init_struct.Speed=GPIO_SPEED_FREQ_LOW; //可以不考虑
gpio_init_struct.Pull=GPIO_PULLDOWN; //下拉输入
HAL_GPIO_Init(GPIOB,&gpio_init_struct);
}
/// 按键扫描函数
// 此函数用于检测特定按键是否被按下,并进行消抖处理。
uint8_t key_scan(void)
{
// 如果按键按下
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0)
{
delay_ms(10); // 消除按键抖动
// 再次确认按键是否按下
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0)
{
// 按键一直按下的情况
while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0)
{
return 1; // 返回按键按下的状态
}
}
}
// 没有按键按下的情况
return 0;
}
uint8_t
是 C 语言中的一种数据类型,表示一个无符号 8 位整数。在很多系统中,uint8_t
通常被定义为 unsigned char
,表示范围在 0 到 255 之间的整数。
这种数据类型通常用于表示 8 位二进制数据,例如像素值、字节等。uint8_t
可以存储的最小值是 0,最大值是 255。
在程序中使用 uint8_t
类型可以确保明确地表示你要处理的数据是无符号的 8 位整数,这有助于提高代码的可读性和可移植性。
key.h
#ifndef __KEY_H
#define __KEY_H
#include "./SYSTEM/sys/sys.h"
void key_init(void);
uint8_t key_scan(void);
#endif
main.c
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/KEY/key.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
led_init(); /* LED初始化 */
key_init(); /* KEY初始化 */
// 进入主循环
while(1)
{
// 如果检测到按键按下
if(key_scan())
{
// 切换 GPIOA 的引脚状态以实现 LED 翻转
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);
}
else
{
// 如果没有检测到按键按下,则延迟一段时间
delay_ms(100);
}
}
}
编译
load
二、接线
LED
如果LED阳极接A9,阴极必须接GND
如果LED阴极接A9,阳极必须接3.3V
按键
如果设置的是PULLUP,上拉输入,按键连接在GPIO口和GND
如果设置的是PULLDOWN,下拉输入,按键连接在GPIO口和3.3V
笔者按键接的是B1和GND(面包板上"-"号那一列)
LED灯,阴极接的GND,阳极接的A9,按一次A9就会翻转一次,A9为1时,LED亮,A9为0时,LED灭。
设置取消注释快捷键
参考
【【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式】https://www.bilibili.com/video/BV1bv4y1R7dp?p=51&vd_source=be33b1553b08cc7b94afdd6c8a50dc5a