STM32 按键模块化
【摘要】 @TOC 前言本篇文章将继续带大家学习模块化编程,今天主要给大家讲解按键的模块化。 一、按键的原理图我们可以看到按键分别接到了板子的PE3和PE4引脚。按键的具体原理这里我就不多讲了,大家可以看我之前的文章。按键原理 二、按键的GPIO配置driver_key.c文件#include "driver_key.h"#include "main.h"void key_init(void){ ...
@TOC
前言
本篇文章将继续带大家学习模块化编程,今天主要给大家讲解按键的模块化。
一、按键的原理图
我们可以看到按键分别接到了板子的PE3和PE4引脚。
按键的具体原理这里我就不多讲了,大家可以看我之前的文章。
按键原理
二、按键的GPIO配置
driver_key.c文件
#include "driver_key.h"
#include "main.h"
void key_init(void)
{
// 定义GPIO的结构体变量
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能按键的GPIO对应的时钟
KEY1_GPIO_CLK_EN();
KEY2_GPIO_CLK_EN();
GPIO_InitStruct.Pin = KEY0_UP_GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 默认上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 引脚反转速度设置为快
// 初始化引脚配置
HAL_GPIO_Init(Key1_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = KEY1_UP_GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 默认上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 引脚反转速度设置为快
// 初始化引脚配置
HAL_GPIO_Init(Key2_GPIO_Port, &GPIO_InitStruct);
}
uint8_t Key1_Value(void)
{
if(Key1 == 0)
{
HAL_Delay(10);
if(Key1 == 0)
{
return 0;
}
else
{
return 1;
}
}
return 1;
}
uint8_t Key2_Value(void)
{
if(Key2 == 0)
{
HAL_Delay(10);
if(Key2 == 0)
{
return 0;
}
else
{
return 1;
}
}
return 1;
}
driver_key.h文件
#ifndef __DRIVER_KEY_H
#define __DRIVER_KEY_H
#include "stm32f1xx_hal.h"
#define Key1_Pin GPIO_PIN_4
#define Key1_GPIO_Port GPIOE
#define Key2_Pin GPIO_PIN_3
#define K2_GPIO_Port GPIOE
#define KEY1_GPIO_CLK_EN() __HAL_RCC_GPIOE_CLK_ENABLE()
#define KEY2_GPIO_CLK_EN() __HAL_RCC_GPIOE_CLK_ENABLE()
#define Key1 HAL_GPIO_ReadPin(Key1_GPIO_Port, Key1_Pin)
#define Key2 HAL_GPIO_ReadPin(Key2_GPIO_Port, Key2_Pin)
uint8_t Key1_Value(void);
uint8_t Key2_Value(void);
void key_init(void);
#endif
总结
按键的模块化其实和LED的模块化区别不大主要就是需要主要设置GPIO的模式为输入,然后将引脚设置为上拉。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)