STM32F4X-GPIO输入功能使用

STM32F4 GPIO输入模式配置

上一节讲GPIO的时候说到了将GPIO设置成输出模式,并通过将GPIO的电平拉高拉低控制LED灯的例程。GPIO除了用作输出功能之外,还可以用作输入功能。最常用的就是检测按键的输入电平。

硬件设计

本章的硬件是基于正点原子的探索者ST32F407开发板进行开发。
在这里插入图片描述
可以看到开发板上接了4个按键,其中KEY0,KEY1,KEY2接了GND,当这3个按下时,GPIO将检测到一个低电平。WK_UP接了VCC,当按键按下时,GPIO将检测到一个高电平。

软件设计

GPIO配置成输入模式步骤

1、第一步要先把GPIO的时钟打开
2、将GPIO引脚设置成输入模式
3、读取GPIO电平状态

GPIO 操作函数

/**
函数作用:初始化一个GPIO
GPIOx:GPIO引脚所在的GPIO组
GPIO_InitStruct:GPIO对象的结构体 
**/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

/**
函数作用:读取GPIO电平
GPIOx:GPIO引脚所在的GPIO组
GPIO_Pin:GPIO引脚
返回值:GPIO电平状态
**/
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

GPIO 对象结构体

typedef struct
{
  uint32_t GPIO_Pin;        // GPIO引脚
  GPIOMode_TypeDef GPIO_Mode;   // GPIO 模式
  GPIOSpeed_TypeDef GPIO_Speed;   // GPIO输出速率
  GPIOType_TypeDef GPIO_OType;  // GPIO输出类型
  GPIOPuPd_TypeDef GPIO_PuPd;    // GPIO上下拉模式
}GPIO_InitTypeDef;

GPIO 输入例程

首先要先将GPIO初始化成输入模式

#define KEY0_GPIO_CLK       RCC_AHB1Periph_GPIOE
#define KEY0_GPIO       GPIOE
#define KEY0_GPIO_PIN   GPIO_Pin_4
void bsp_key_init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_AHB1PeriphClockCmd(KEY0_GPIO_CLK,ENABLE); // 打开GPIOE时钟
	
	GPIO_InitStruct.GPIO_Pin = KEY0_GPIO_PIN; // GPIO引脚编号
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;   // GPIO模式配置成输入模式
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; // GPIO输出速度 2MHZ
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // GPIO设置上拉
	GPIO_Init(KEY0_GPIO,&GPIO_InitStruct); // 初始化GPIO
}

设置好GPIO为输入模式后,就可以在main函数中轮询GPIO的状态

int main(void)
{
	u8 key_flag = 0;
	system_tick_init();
	bsp_led_init();	 // 初始化led
	bsp_key_init();  // 初始化按键
	
  while(1){
		// 轮询GPIO状态
		if(GPIO_ReadInputDataBit(KEY0_GPIO,KEY0_GPIO_PIN) == RESET) // 判断GPIO是否为低电平
		{
			delay_ms(50); // 延时
			if(GPIO_ReadInputDataBit(KEY0_GPIO,KEY0_GPIO_PIN) == RESET)
			{
				GPIO_ToggleBits(LED_RED_GPIO,LED_RED_GPIO_PIN);
			}
			while(GPIO_ReadInputDataBit(KEY0_GPIO,KEY0_GPIO_PIN) != SET);
		}
	}
  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值