stm32基础学习——按键的使用

stm32基础学习------按键的使用

所有可用资源可在我的gitee仓库查找,点击即可前往

一、前言

本篇文章继续介绍stm32的一些基本使用,文章主要是介绍按键的使用,用两个按键实现开灯和关灯操作(当然一个开关也可实现哈),废话不多说,咱们开始。

二、准备工作

硬件

  • stm32F103C8T6开发板
    ST-LINK V2下载器一个
  • 3~5V的LED灯(发光二极管)一个
    四引脚按键两个
  • 杜邦线若干+面包板

软件

其他(需要自行下载,点击前往,下载template文件即可

  • stm32工程模板(由于新建模板比较麻烦,初学还是找个工程模板吧,方便点)

电路图:

三、编写代码

至于完整的工程这里就不给出了哈,大家可以去我的gitee仓库自取,这里只给出主程序。

cpp 复制代码
#include "stm32f10x.h"

int main(void)
{
	// 开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 
	
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽模式
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  //输入上拉
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	while(1){
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0){ // 按下开
			GPIO_SetBits(GPIOB, GPIO_Pin_10);
		}
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0){  // 按下关
			GPIO_ResetBits(GPIOB, GPIO_Pin_10);
		}
	}  
	
}

编译并下载,然后就可以操作按钮了,按下链接pin_13引脚的按键,led灯会亮起来,按下pin_14引脚的按键,led灯则会熄灭。
当大家进行操作时可以发现,当某个按键按下后对应的操作就立马执行了,而一般按键都是抬手触发的,抬手触发更容易计数,一般情况来说都是通过延迟一小段时间实现消抖,但效果上还是不是特别好的。下面代码,在上面的基础上加多了一个弹起检测的标志,效果非常不错,关于这种消抖方式我之前有发过相关的文章点击前往

cpp 复制代码
#include "stm32f10x.h"
#include "delay.h"

uint8_t flag1 = 0;  //按键1标志位
uint8_t flag2 = 0;  //按键2标志位

int main(void)
{
	//初始化
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  //输入上拉
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //输出推挽
	GPIO_ResetBits(GPIOB, GPIO_Pin_10);
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	
	while(1){
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0){
			flag1 = 1;  //标志按键"开按下"
			Delay(50);
			if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 1 && flag1 == 1){
				GPIO_SetBits(GPIOB, GPIO_Pin_10);
				flag1 = 0;  // 重置
			}
		}
		
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0){  // 按键"关"按下
			flag2 = 1;  //标志位设为1
			Delay(50);
			if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 1 && flag2 == 1){  //表示按键弹起
				GPIO_ResetBits(GPIOB, GPIO_Pin_10);
				flag2 = 0; //重置
			}
		}
	}
}

上面的延迟函数Delay()大家随便在网上找一个能用的来进行调用即可,如果使用的是我的工程模板,则直接就能引入调用,正常执行,点击前往gitee仓库。在进行消抖之后,可以发现当按键按下后并没有执行操作,而是等待松手后才执行操作,并且效果很不错。

四、结束语

好了,stm32的基本使用------按键的基本使用先介绍到这,后续有时间我继续更新这方面的文章,敬请期待,我是"风行男孩",咱有缘再见!(码字不易,转载请标明出处!若是文章有帮助,点个赞留个痕迹即可。)

相关推荐
YCY^v^14 分钟前
JeecgBoot 项目运行指南
java·学习
飞睿科技18 分钟前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
云小逸20 分钟前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
JustDI-CM1 小时前
AI学习笔记-提示词工程
人工智能·笔记·学习
悟纤1 小时前
学习与专注音乐流派 (Study & Focus Music):AI 音乐创作终极指南 | Suno高级篇 | 第33篇
大数据·人工智能·深度学习·学习·suno·suno api
爱写bug的野原新之助1 小时前
加密摘要算法MD5、SHA、HMAC:学习笔记
笔记·学习
来自晴朗的明天1 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
百锦再2 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架
17(无规则自律)2 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件