您当前的位置: 首页 >  stm32

风间琉璃•

暂无认证

  • 1浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

STM32G4之按键实验

风间琉璃• 发布时间:2022-01-17 13:02:40 ,浏览量:1

文章目录
  • 前言
  • 一、按键原理
  • 二、程序编写
    • 1.按键扫描函数
    • 2.按键处理函数
  • 总结

一、按键原理

按键电路原理图(CT117E-M4产品手册) 在这里插入图片描述 这四个按键一端都接了VDD,所以默认高电平,当我们按下按键时,电路闭合,IO口电平从高电平到低电平,检测IO口电平的变化就是判断按键是否按下的依据。

由于按键默认上电为高电平,所以可以选择浮空输入模式,该模式只是默认输入值不能确定,但是这里是接的VDD,也就是默认输入值高电平。而上下拉输入模式,默认输入值是确定的。读取输入结果时,只有0或1两种,只是默认值不能确定

在单纯作为输入的时,浮空模式是有用的,在外部有上拉/下拉的条件下,可以设置为浮空输入。或者IO有冲突的时候,也可以设置为浮空输入,从而完全不干扰其他IO

对比一下正点原子F4按键实验模式选择:KEY0,1,2选择的是输入上拉,KEY_UP选择的输入下拉 在这里插入图片描述 KEY0、 KEY1 和 KEY2 是低电平有效的,而 KEY_UP 是高电平有效 的, 并且外部都没有上下拉电阻,所以,需要在 STM32F4 内部设置上下拉,STM32G4是可以看到外部接了上拉电阻的,所以程序里面没有设置上下拉模式

输入上拉:无论输入管脚悬空或者被高电平驱动时,读取的都是1. 只有在输入端为0的时,读取到的值才是0。

要判断KEY0,1,2的IO口电平,只有按键按下了,输入端为0 ,才能检测读取到低电平,所以这三个引脚选择输入上拉模式

输入下拉:无论输入管脚悬空或者被低电平驱动时,读取的都是0. 只有在输入端为1的时,读取到的值才是1。

要判断KEY_UP的IO口电平,只有按键按下了,输入端为1,才能检测读取到高电平,所以这这个引脚选择输入下拉模式

GPIO模式详细介绍:GPIO模式

二、程序编写

按键GPIO设置为浮空输入,使用STM32CubeMX配置

在这里插入图片描述

将里面按键IO的初始化移植到LED的工程下。

1.按键扫描函数
unsigned char Key_Scan(void)
{
	unsigned char unKey_Val = 0;
	
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET)
		unKey_Val = 1;

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET)
		unKey_Val = 2;

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == GPIO_PIN_RESET)
		unKey_Val = 3;
	
	if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
		unKey_Val = 4;	
	
	return unKey_Val;
}

2.按键处理函数

__IO uint32_t uwTick_Set_Point = 0;

unsigned char ucKey_Val,ucKey_Down,ucKey_Up,ucKey_Old;
void Key_Proc(void)
{
	// uwTick每隔1ms加1  刚开始肯定差值大于100ms
	if((uwTick -uwTick_Set_Point)             
关注
打赏
1665385461
查看更多评论
0.0565s