标签:log ima str 相同 eset 初始化 通过 speed stm32
以探索者板载按键为例,以下是板载按键的电路图,此文章不包括RESET按键的相关内容
其中,KEY_UP -> PA1
KEY_0 -> PE4
KEY_1 -> PE3
KEY_2 -> PE2
事实上,按键相当于一个开关,按下时开关导通,两端电平相同,GPIO接口电平发生变化,通过库函数读取后触发一系列操作。
对于按键的初始化,以上图为例,代码如下(为节约时间,只放上关键代码)
1 void KEY_Init(void) 2 { 3 4 GPIO_InitTypeDef GPIO_InitStructure; 5 6 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA和GPIOE 7 8 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //KEY0 KEY1 KEY2对应PE4/3/2 9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//设置为输入模式
10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M 11 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//电平由高到低对应上拉 12 GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE
13 14 15 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//WK_UP按键对应PA0
16 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//电平由高到低对应下拉 17 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA 18 19 }
关于输入读取函数
#include "stm32f4xx_gpio.h" uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //官方标准库定义
初始化完成后,就可以进行按键扫描了,按键扫描主要是为了读取按键对应IO接口的电平变化,为方便起见,我们使用宏定义来写
1 #define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //PE4 2 #define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) //PE3 3 #define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) //PE2 4 #define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) //PA0 5 6 #define KEY0_PRES 1 7 #define KEY1_PRES 2 8 #define KEY2_PRES 3 9 #define WKUP_PRES 4 10 11 u8 KEY_Scan(u8 mode) 12 { 13 static u8 key_up=1;//按键松开标志
14 if(mode)key_up=1; //支持连按 15 if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) 16 { 17 delay_ms(10);//延迟,防止纹波干扰 18 key_up=0; 19 if(KEY0==0) 20 return 1; 21 else if(KEY1==0) 22 return 2; 23 else if(KEY2==0) 24 return 3; 25 else if(WK_UP==1) 26 return 4; 27 } 28 else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0) 29 key_up=1; 30 return 0;//没有按键按下 31 }
此后,就可以在主函数中调用按键扫描函数进行按键扫描,可以用if-else语句或者switch语句进行判断并执行后续操作,至于按键中断的相关内容,敬请期待
STM32单片机学习心得——GPIO(2)使用GPIO做输入
标签:log ima str 相同 eset 初始化 通过 speed stm32
原文地址:http://www.cnblogs.com/program-tech/p/6443772.html