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

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;
}

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

 

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

 

 

 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. 参考资料

  野火原理图

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

 

 

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

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

 

 

 

4. 总结:

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

  (2)  功能框图

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

 

 

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

 

上一篇:有趣的算法题(二)


下一篇:Educational Codeforces Round 120 (Rated for Div. 2)