【STM32】使用标准库检测按键

按键检测使用到GPIO外设的基本输入功能。

1.硬件设计

在这里插入图片描述

作者使用的硬件没有按键模块。故使用了一个引脚模拟按键,将PWM1引脚拉低表示按键按下。思路如下:PWM1配置为输入,默认拉高,PWM1手动接地来模拟按下按键,此时PWM1拉低。当PWM1拉高时,LED亮,当PWM1拉低时,LED灭。

2.软件设计

#ifndef __BSP_KEY_H
#define __BSP_KEY_H

#ifdef __cplusplus
extern "C"{

#endif

#include "stm32f4xx.h"

#define KEY_PIN             GPIO_Pin_0
#define KEY_GPIO_Port       GPIOA
#define KEY_GPIO_CLK        RCC_AHB1Periph_GPIOA

void Init_KEY(void);
uint8_t GET_KEY_STATUS(void);
	
	
#ifdef __cplusplus
}
#endif

#endif


#include "bsp_key.h"

void Init_KEY(void)
{
	//使能GPIO时钟
	RCC_AHB1PeriphClockCmd(KEY_GPIO_CLK,ENABLE);
	
	//初始化GPIO
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin=KEY_PIN;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
	//GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;//输入模式时不需要配置输出模式
	GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;//默认拉高
	//GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;//输入模式时不需要配置速度
	
	GPIO_Init(KEY_GPIO_Port,&GPIO_InitStruct);
}

uint8_t GET_KEY_STATUS(void)
{
   return GPIO_ReadInputDataBit(KEY_GPIO_Port,KEY_PIN);
}


#include "bsp_led.h"
#include "bsp_key.h"

void delay(uint32_t cnt)
{
	while(cnt--);
}

int main(void)
{
	Init_LED();

	Init_KEY();
	
  /* Infinite loop */
  while (1)
  {
	  if(Bit_SET==GET_KEY_STATUS())
	  {
		  //输入高电平
		  LED_ON();
		  
	  }else if(Bit_RESET==GET_KEY_STATUS())
	  {
		  //输入低电平
		  LED_OFF();
	  }
	  else
	  {
		  //输入不确定
	  }	  
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/722856.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何做好亚马逊、速卖通自养号测评?这些细节很重要

亚马逊,作为电商领域的领军者,吸引了无数卖家入驻。在这片竞争激烈的土地上,Review成为了卖家们展现实力、赢得消费者信任的关键。 Review不仅反映了产品的质量和卖家的服务,更是消费者选择购买的重要因素。因此,对于卖…

收入公平性评估方法

一、Gini系数## 1.1什么是基尼系数## 基尼系数是国际上用来综合考察居民内部收入分配差异状况的一个重要分析指标。每个人的收入有多有少,差距大时,基尼系数就高;差距小时,基尼系数就低。 1.2基本概念## 基尼系数表示在全部居民收…

js语法---理解防抖原理和实现方法

什么是防抖(节流) 在实际的网页交互中,如果一个事件高频率的触发,这会占用很多内存资源,但是实际上又并不需要监听触发如此多次这个事件(比如说,在抢有限数量的优惠券时,用户往往会提…

golang windows打包为linux可执行文件

使用go的交叉编译功能 set GOOSlinux set GOARCHamd64然后再执行go build 可能会报异常, 所以贴出我的go env配置仅供参考 go env环境配置 D:\GoWork\src\go-tzv>go env set GO111MODULEauto set GOARCHamd64 set GOBIN …

架构师篇-1、总体架构设计

业务架构哲学本质 定位:赋予业务架构设计能力,具备业务架构设计思维模型,掌握业务架构哲学本质,形成以不变应万变的业务架构设计能力。 架构师所需要的能力: 带领业务成功通过框架思维赋能业务架构师知识体系构建掌…

华北水利水电大学-C程序设计作业

目录 基础题 1-1 分析 代码实现 1-2 分析 代码实现 1-3 分析 代码实现 1-4 ​编辑 分析 代码实现 1-5 分析 代码实现 1-6 分析 代码实现 基础题 1-1 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。其中学生信息包括学号、姓名…

学会python——制作一款天气查询工具(python实例七)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、天气查询工具 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的…

pip安装总是失败,如何配置pip安装源,让环境重获新生?

前情提要 公司新项目组报道后,因为用的是公司内网,安装完python 和pycharm 后,发现pip 下载安装包总是报错 具体解决 1.确认python 环境已经安装 2.在cmd中执行如下命令配置参数 pip config set global.index-url https://这里填写自己公…

Linux 软件包管理器 yum

文章目录 yum是什么?Linux(centos)的生态yum的相关操作yum本地配置安装包lrzsz yum是什么? yum可以形象的比喻成一个下载安装管理的一个客户端,比如小米应用商店、华为应用商城 Linux中的安装包是有依赖关系的(比如下载游戏的时候有各种文件…

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…

滑动窗口练习1-长度最小的子数组

1.题目链接:209.长度最小的子数组 2.题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条…

【机器学习】第9章 降维算法——PCA降维

一、概念 1.PCA (1)主成分分析(Principal ComponentAnalysis,PCA)一种经典的线性降维分析算法。 (2)原理,这里以二维转一维为例,原来的平面变成了一条直线 这是三维变二…

git 基本命令

列出分支基本命令: git branch 如果我们要手动创建一个分支 。执行 git branch (branchname) 即可: git branch testing 切换到testing分支: git checkout testing 我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立…

1504 - Java多线程面试题

少年,思无邪,最最动人。 1.Java中有哪几种创建线程的方式 1.1 继承Thread类 代码示例 class HelloWorld01 extends Thread{Overridepublic void run() {System.out.println("这是继承 Thread 类方式实现多线程!");} }public class CreateTh…

Redis 高可用 sentinel

简介 Sentinel提供了一种高可用方案来抵抗节点故障,当故障发生时Redis集群可以自动进行主从切换,程序可以不用重启。 Redis Sentinel集群可以看成是一个Zookeeper集群,他是Redis集群高可用的心脏,一般由3-5个节点组成&#xff0…

从“产品的RFM分析”看如何探索“职业方向”

我们在做产品分析时,经常会用到一种方法“产品的RFM分析”,它是一种客户细分和价值评估的常用方法,广泛应用于电子商务、零售和其他众多行业,它可以帮助企业和产品团队更好地理解用户行为,优化营销策略,提升…

python发邮件给多人的注意事项?如何群发?

python发邮件给多人的效率如何?python发邮件的方法? 在利用Python编程语言实现邮件群发功能时,需要注意许多细节,以确保邮件能有效送达且用户体验良好。AokSend将详细探讨python发邮件给多人时需要注意的各个方面,以帮…

2024年历史、文学与人文艺术国际会议(ICHLH 2024)

2024年历史、文学与人文艺术国际会议(ICHLH 2024) 2024 International Conference on History, Literature, and Humanities 【重要信息】 大会地点:兰州 大会官网:http://www.ichlh.com 投稿邮箱:ichlhsub-conf.com 【…

【第10章】Vue之Element Plus常用组件

文章目录 前言一、表格1. 带斑马纹表格2. 展示 二、分页1.国际化(中文)2.分页代码3. 展示 三、表单1. 表单代码2. 展示 四、卡片1. 卡片代码2. 展示 总结 前言 通过上一章的快速入门,我们已经学习了按钮使用,接下来学习Element Plus的常用组件&#xff…

02-QWebEngineView的使用

Qt WebEngine_hitzsf的博客-CSDN博客 一、QWebEngineView QWebEngineView 类是一个实现Web浏览器的便捷类,提供了back() 、forward()、reload()、stop() 等方法,可轻松实现页面的前进、后退、重载等导航功能,要实现一个简单的只有网页加载网…