首页 > 其他分享 >stm32f407探索者开发板(八)——按键输入实验--GPIO做输入

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

时间:2023-02-04 11:38:29浏览次数:52  
标签:Pin KEY2 探索者 UP 按键 GPIO 输入 define


文章目录

  • ​​一、按键实验的硬件连接​​
  • ​​二、GPIO输入操作说明​​
  • ​​三、按键实验​​
  • ​​3.1 支持连续按​​
  • ​​3.2 不支持随便按​​
  • ​​3.3 都兼容​​

一、按键实验的硬件连接

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


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

二、GPIO输入操作说明

stm32f407探索者开发板(八)——按键输入实验--GPIO做输入_嵌入式硬件_03

三、按键实验

3.1 支持连续按

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

stm32f407探索者开发板(八)——按键输入实验--GPIO做输入_嵌入式硬件_05

3.2 不支持随便按

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

3.3 都兼容

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

stm32f407探索者开发板(八)——按键输入实验--GPIO做输入_嵌入式硬件_08

//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;// 无按键按下
}


标签:Pin,KEY2,探索者,UP,按键,GPIO,输入,define
From: https://blog.51cto.com/u_15909950/6036985

相关文章

  • logback配置指定某个包下日志单独输入独立文件
    在logback-spring.xml配置文件中添加如下配置:<appendername="OPR_LOG"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/op......
  • js 正则表达式 匹配除汉字、字母、数字、逗号、句号、括号外的特殊字符(用来规范输入内
    /[^\u4e00-\u9fa5a-zA-Z\d,.,。()]+/其中\u4e00-\u9fa5匹配汉字,a-zA-Z匹配字母,\d匹配数字,,.,。()匹配逗号、句号或括号,^表示非,+表示尽可能多的匹配。letnameReg=/^[a-zA-Z0-......
  • 在 Rime 上对输入法进行定制
    RimeRime是什么?忘了!但是在用。而且很好用。了解Rime历史,还是去官网吧!定制Rime有两个目录:1.程序目录2.用户目录Rime的程序目录Windows上要看你安装的位置。Li......
  • stm32光敏传感器输入检测计数
    项目:stm32检测光敏传感器输入进行计数。思路:初始化GPIO外设端口时钟GPIO端口配置选择用于EXTILine的GPIO引脚外部中断配置配置优先级分组嵌套中断控制器配置外......
  • 输入的方法
    当输入个数未知使用while连续输入!!!1.逗号表达式逗号表达式只会判断最后一个语句的真值例:读入一个N,当N为0或负数则继续读取数字直至读入N值为正整数为止intn;......
  • Android动态数字输入框
    基础view如下:具体的思路实现:1:展示textview实现2:顶层使用透明的edittext.获取焦点/删除文字等。publicclassBaseVerificationCodeViewextendsRelativeLayout{......
  • 【智能车】RT1064-GPIO输入输出
    输入上拉输入GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),读取得的GPIO引脚数据为1,高电平;上拉输入默认是高电平,外接低电平有影响,故只能用来检测外接低......
  • 15-TTL与非门的输入特性和输出特性
    TTL与非门的电压传输特性传输特性输入电压连续发生变化,输出电压发生什么变化?需要研究输出电压与输入电压之间的关系输入小的时候,输出大的信号;输入大时候输出小信号中......
  • css input框输入错误抖动效果
    1、:valid用于匹配输入值为合法的元素2、:invalid用于匹配输入值为非法的元素3、required属性规定必需在提交之前填写输入字段4、pattern属性规定用于验证输入字段的正......
  • Java使用Scanner实现循环输入
    1publicstaticvoidmain(String[]args){2Scannersc=newScanner(System.in);3List<Integer>list=newArrayList<>();4Stringinput=......