【STM32】按键---有关GPIO输入的那些事

GPIO的输入模式一共有4种:

  1. GPIO_Mode_AIN 模拟输入
  2. GPIO_Mode_IN_FLOATING 浮空输入
  3. GPIO_Mode_IPD 下拉输入
  4. GPIO_Mode_IPU 上拉输入

工作原理可以戳这里:GPIO工作原理

常见应用可以戳这里:八种GPIO模式总结

在洋桃1号开发板上按键驱动将GPIO配置成上拉输入模式即按键未按下时GPIO为高电平状态。

按键对应GPIO初始化函数:

void KEY_Init(void){ //微动开关的接口初始化
	GPIO_InitTypeDef  GPIO_InitStructure; //定义GPIO的初始化枚举结构	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);       
    GPIO_InitStructure.GPIO_Pin = KEY1 | KEY2; //选择端口号(0~15或all)                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择IO接口工作方式 //上拉电阻       
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)//在设置GPIO为输入模式的时候不用设置速率    
	GPIO_Init(KEYPORT,&GPIO_InitStructure);			
}

附上宏定义:

主函数:

int main (void){//主程序
	u8 a; //定义变量
	//初始化程序
	RCC_Configuration(); //时钟设置
	LED_Init();//LED初始化

	KEY_Init();//按键初始化

	//主循环
	while(1){
		if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
			delay_ms(20); //延时20ms去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
				//在2个LED上显示二进制加法
				a++; //变量加1
				if(a>3){ //当变量大于3时清0
					a=0; 
				}
				GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
			}
		}
	}
}

一些库函数:

读取GPIO端口管脚值:

读取GPIO端口值:

发布了88 篇原创文章 · 获赞 39 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43444989/article/details/99993229