您的位置:首页 > 娱乐 > 八卦 > 三、GPIO按键读取

三、GPIO按键读取

2024/10/6 2:25:03 来源:https://blog.csdn.net/jzkj201/article/details/140604756  浏览:    关键词:三、GPIO按键读取

在上一篇文章中,我们详细讲解了GPIO的写函数。万事万物都具有一定的相对性,GPIO的操作也不例外。既然有写操作,那么必然也有读操作。有了上一篇文章的基础,理解本篇内容将会更加容易。

一、这篇文章能了解什么

本篇文章将基于上一篇的内容,进一步探讨如何实现对LED灯的控制。
阅读完本篇文章后,您将了解到以下内容:

1.GPIO输入的初始化
2.GPIO读操作的实现
3.按键消抖
4.使用按键控制LED灯的实现方法
通过对这些知识的掌握,您将能够更全面地理解和运用GPIO操作,实现更复杂的功能。

1.1 GPIO输入的初始化

        首先,我们需要初始化用于按键的GPIO引脚。以下是一个示例代码,展示了如何初始化GPIO引脚以读取按键输入。

void KEY_Init(){GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //启动GPIO的时钟线,让时钟进去以驱动其GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设不设置都可以GPIO_Init(GPIOA, &GPIO_InitStructure);
}

        在上述代码中,我们首先启动了GPIOA的时钟,然后配置了GPIO引脚2为上拉输入模式。

1.2 GPIO读操作的实现

        接下来,我们需要实现GPIO读操作,以检测按键的状态。通过读取GPIO引脚的电平,可以判断按键是否被按下。

uint8_t KEY_Read(){return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2);
}

        上述函数KEY_Read用于读取GPIOA引脚2的状态。如果返回值为0,则表示按键被按下;如果返回值为1,则表示按键未被按下。

1.3 按键消抖

        在实际使用按键时,由于机械抖动的存在,会导致按键在短时间内多次触发。为了解决这个问题,我们需要进行按键消抖处理。以下是一个简单的按键消抖算法示例:

int Key_detection(void){int Key_flag;if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)==0) {Delay_Ms(20);if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)==0) {while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2));Key_flag=1;}} else Key_flag= 0;return Key_flag;
}

        按键消抖的代码其实还可以更加精简,小伙伴们有好的方法嘛,可以留言在评论区。

二、代码程序

2.1 main.c(使用按键控制LED灯的实现方法)

int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);SystemCoreClockUpdate();Delay_Init();USART_Printf_Init(115200);	printf("SystemClk:%d\r\n",SystemCoreClock);printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );printf("This is printf example\r\n");LED_Init();KEY_Init();while(1){if(Key_detection()==1){GPIO_ResetBits(GPIOA, GPIO_Pin_0 |GPIO_Pin_1 );}else{GPIO_SetBits(GPIOA, GPIO_Pin_0 |GPIO_Pin_1 );}}
}

2.2 按键原理图

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com