STM32F411核心板固件库开发(三) 按键检测

对于自己手上的这款核心板,考虑到还有一个外部外设没有使用,为了比较充分地用好板上的资源,在这里使用一个按键检测。

(一)按键外设

1、核心板

2、核心板原理图

 按键上端和PA0引脚相连,按键下端接地。所以当按键被按下的时候,PA0应该读取到的是低电平才对。当按键没有被按下的时候,根据原理图中的这种设计,可见PA0既没有设置成上拉电阻,也没有设置下拉电阻,所以此处PA0不宜设置为浮空输入的模式(即既不上拉也不下拉的模式),从而使得芯片复位后,PA0端口的电平固定。

对于我们这款核心板的硬件设计,PA0的端口模式就应该设置为上拉模式,那么当按键没有按下的时候,PA0就会一定是高电平,以和下拉形成区别。

3、含有硬件消抖的原理图

 当按键没有按下的时候,引脚接地;当按键按下的时候,引脚接3.3V高电平。针对这里,引脚的输入模式就可设置为浮空输入的模式。

(二)编写代码:

1、按键GPIO配置

void Key_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*开启按键GPIO口的时钟*/
	RCC_AHB1PeriphClockCmd(KEY_GPIO_CLK,ENABLE);
	
  /*选择按键的引脚*/
	GPIO_InitStructure.GPIO_Pin = KEY_PIN; 
  
  /*设置引脚为输入模式*/
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 
  
  /*设置引脚为上拉*/
	//这时使用万用表可以测得PA0有电压,为高电平;如果设置为GPIO_PuPd_UP,就会变成低电平
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	
	
  /*使用上面的结构体初始化按键*/
	GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);   
  
  /*选择按键的引脚*/
	GPIO_InitStructure.GPIO_Pin = KEY_PIN; 
  
  /*使用上面的结构体初始化按键*/
	GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);  
}

根据核心板的硬件设计,按键检测的GPIO引脚设为上拉模式

2、按键检测

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			
	/*检测是否有按键按下 */
	if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 )
	{
		
		Delay_ms(10); //延时消抖
		if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0)
		{
			return 0;
		}		
		
	}
	else 
		return 1;
}

这里需要注意的是,按键使用的是软件消抖的方法。关于软件消抖的方法,有很多。有用延时的,也有用定时器计数的。这里只是为了测试F411CEU6这块核心板,使用了延时进行消抖。但要注意 ,这种办法不能用在工业控制中。

3、主函数

int main(void)
{
	LED_GPIO_Config();
	Key_GPIO_Config();
	SysTick_Init();
	
	while(1)
	{
		if( Key_Scan(KEY_GPIO_PORT,KEY_PIN) == 0  )
		{
			GPIO_ResetBits(GPIOC, GPIO_Pin_13);
			Delay_ms(200);
			GPIO_SetBits(GPIOC, GPIO_Pin_13);
			Delay_ms(200);
		}  
	}
     
}

在主函数里面,我们使用Key_Scan()函数,一旦检测到按键按下,就产生LED闪烁。

4、实验现象:

F411CEU6_KEY_DETECT例程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值