stm32f407探索者开发板(八)——按键输入实验--GPIO做输入

简介: stm32f407探索者开发板(八)——按键输入实验--GPIO做输入

一、按键实验的硬件连接

二、GPIO输入操作说明

三、按键实验

3.1 支持连续按

3.2 不支持随便按

3.3 都兼容

//key.h
/*下面的方式是通过直接操作库函数方式读取IO*/
#define KEY0    GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //PE4
#define KEY1    GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) //PE3 
#define KEY2    GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) //PE2
#define WK_UP   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) //PA0


/*下面方式是通过位带操作方式读取IO*/
/*
#define KEY0    PEin(4)     //PE4
#define KEY1    PEin(3)   //PE3 
#define KEY2    PEin(2)   //P32
#define WK_UP   PAin(0)   //PA0
*/


#define KEY0_PRES   1
#define KEY1_PRES 2
#define KEY2_PRES 3
#define WKUP_PRES   4

void KEY_Init(void);  //IO初始化
u8 KEY_Scan(u8);      //按键扫描函数  
//key.c
/*对按键进行时钟使能*/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE时钟
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //KEY0 KEY1 KEY2对应引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4
  
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//WK_UP对应引脚PA0
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//下拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA0
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 
//4,WKUP按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2>WK_UP!!
u8 KEY_Scan(u8 mode)
{  
  static u8 key_up=1;//按键按松开标志
  if(mode)key_up=1;  //支持连按     
  if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
  {
    delay_ms(10);//去抖动 
    key_up=0;
    if(KEY0==0)return 1;
    else if(KEY1==0)return 2;
    else if(KEY2==0)return 3;
    else if(WK_UP==1)return 4;
  }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;      
  return 0;// 无按键按下
}

相关文章
|
4月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
343 0
|
4月前
stm32f407探索者开发板(十九)——外部中断实验-EXIT
stm32f407探索者开发板(十九)——外部中断实验-EXIT
296 0
|
4月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
69 0
|
4月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
378 0
|
4月前
|
程序员
stm32f407探索者开发板(二十一)——窗口看门狗
stm32f407探索者开发板(二十一)——窗口看门狗
147 0
|
4月前
|
芯片
stm32f407探索者开发板(二十)——独立看门狗实验
stm32f407探索者开发板(二十)——独立看门狗实验
300 0
|
4月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
270 0
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
428 2
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
694 0
|
5月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
503 4