ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

stm32使用固件库实现按键输入检测

2022-01-25 22:04:42  阅读:208  来源: 互联网

标签:LED key bsp stm32 KEY 按键 GPIO 固件 define


1. 使用固件库操作实现按键输入检测功能,同时使用LED灯指示按键状态。

2. 代码:

  main.c主函数

  

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

/*主函数*/
int main(void)
{		
	LED_GPIO_Config();		/*LED灯端口初始化*/
	KEY_GPIO_Config();		/*按键端口初始化*/
	GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);	/*设置LED灯初始化状态为灭*/
	while(1)			/*循环检测按键端口状态*/
	{
		if (KeyScan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON)		/*如果扫描按键端口电平为高,则打开LED灯*/
		{
				GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	/*开灯*/
		}
	}

}

  bsp_key.c

  

#include "bsp_key.h"
/*按键初始化函数,跟LED初始化函数类似*/
void KEY_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;		/*使用 GPIO_InitTypeDef 定义 GPIO 初始化结构体变量*/
	
	RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK,ENABLE);	/*开时钟*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;				/*设置GPIO pin口*/
	GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN_FLOATING;	/*设置输入模式为浮空输入*/
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;	/*设置速率*/
	GPIO_Init(GPIOA, &GPIO_InitStruct);	/*调用 GPIO_Init 函数向寄存器写入参数,完成 GPIO 的初始化*/
}

/*按键扫描函数*/
uint8_t KeyScan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
	if (GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)	/*判断按键被按下*/
	{
		while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON);	/*判断按键被松开,防按键抖动*/
		return KEY_ON;	/*返回按键状态1*/
	}
	else
		return KEY_OFF;
}

 

 

 

 

 

 bsp_key.h

  

#ifndef __bsp_key_h
#define __bsp_key_h
#include "stm32f10x.h"
/*按键GPIO口宏定义*/
#define KEY1_GPIO_PIN					GPIO_Pin_0				
#define KEY1_GPIO_PORT				GPIOA
#define KEY1_GPIO_CLK					RCC_APB2Periph_GPIOA

#define KEY_ON		1
#define KEY_OFF		0


	
void KEY_GPIO_Config(viod);
#endif /*__bsp_key_h*/

  bsp_led.c

  

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef	GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE);

	
	GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;

	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
	
}

  bsp_led.h

  

#ifndef __bsp_key_h
#define __bsp_key_h
#include "stm32f10x.h"
/*按键GPIO口宏定义*/
#define KEY1_GPIO_PIN					GPIO_Pin_0				
#define KEY1_GPIO_PORT				GPIOA
#define KEY1_GPIO_CLK					RCC_APB2Periph_GPIOA

#define KEY_ON		1
#define KEY_OFF		0


	
void KEY_GPIO_Config(viod);
#endif /*__bsp_key_h*/

  

 3. 参考资料

  野火原理图

  

 

 

 

   

 

 

 

4. 总结:

  (1)  每个程序编写没有明确的前后顺序,都需要交叉编写。但bsp_led.c和bsp_led.h优先比bsp_key.c和bsp_key.h编写。

  (2)  功能框图

    

 

 

  (3)  目前只实现了按键按下灯亮操作,没有实现灯亮灭切换。后续补充ing

 

标签:LED,key,bsp,stm32,KEY,按键,GPIO,固件,define
来源: https://www.cnblogs.com/kevin-hou1991/p/15844546.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有