STM32G4之按键实验

news/2024/9/23 4:34:58/

文章目录

  • 前言
  • 一、按键原理
  • 二、程序编写
    • 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  刚开始肯定差值大于100msif((uwTick -uwTick_Set_Point) < 100) return; // 每隔100ms扫描一次	uwTick_Set_Point = uwTick;  // 记录每次扫描时的uwTick值ucKey_Val = Key_Scan();ucKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val);ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);ucKey_Old = ucKey_Val;if(ucKey_Down == 4){LED_Display(0x88);}if(ucKey_Down == 1){LED_Display(0x00);}
}
&(按位与): 两个操作数都为1 ,才为1  1&0 = 0 0&1 = 0 1&1 = 1
|(按位或):两个操作数只要有一个为1 ,结果为1  1|0 = 1 1|1= 1  0|0 = 0
^(按位异或):两个操作数相同为0 ,不同才为1 0^0 = 1 1^0 = 0
~(取反):0变为11变为 0 ~0=1

位运算参考:位运算

按键扫描可以分为三种情况:

情况1 : 100ms扫描了两次,按键返回的结果从0 变为4(按键4被按下了),产生了下降沿
ucKey_Val = 4 (0000 0100)
ucKey_Down = 0000 0100 & (0000 0000 ^ 0000 0100) = 0000 0100 & 0000 0100 = 0000 0100 =4
ucKey_Up = ~0000 0100 & (0000 0000 ^ 0000 0100) = 1111 1011 & 0000 0100 = 0 
ucKey_Old = 4情况2 : B4产生了下降沿后,按键一直按着
ucKey_Val = 4
ucKey_Down = 0000 0100 & (0000 0100 ^ 0000 0100) = 0000 0100 & 0000 = 0
ucKey_Up = 1111 1011 & 0000 0000 =0
ucKey_Old = 0000 0100 = 4情况3 : B4按键一直按下后在松手时产生上升沿这个时候
ucKey_Val = 0
ucKey_Down = 0000 0000 & (0000 0100 ^ 0000 0000) = 0000 0000 & 0000 01000 = 0
ucKey_Up = 1111 1111 & 0000 01000 = 0000 01000 = 4
ucKey_Old = 0

总结

提示:这里对文章进行总结:


http://www.ppmy.cn/news/307032.html

相关文章

stm32g431使用CubeMX配置按键与使用

stm32g431使用CubeMX配置按键与使用 使用cubemx新建一个工程 配置八个LED的GPIO口为输出(GPIO_Output)&#xff0c;四个按键的GPIO口为输入&#xff08;GPIO_Input&#xff09; 设置晶振 配置时钟 生成工程 工程生成之后在工程目录下新建这些文件夹和文件&#xff0c;这样方便…

【N32G457】 基于RT-Thread和N32G457的迷你键盘

此文为参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛期间作品。 由于疫情影响加上其他各种原因&#xff0c;本应在3月25日结束的比赛在今日终于完成了一个比较完整的作品&#xff0c;无论是否可以参赛&#xff0c;还是希望对大家有所帮助。 先放个图。 应用背景 …

【ADB】设置adb输入法

1、安装输入法apk adb -s <设备id> install keyboard.apk 2、检查是否安装成功 adb -s <设备id> shell ime set com.android.adbkeyboard/.AdbIME 当未安装adbkeyboard输入法时&#xff0c;会出现如下信息&#xff1a; Error: Unknown id: com.android.adbkeyb…

并行计算及GPU简介

并行计算&#xff08;Parallel Computing&#xff09;指同时使用多种计算资源解决计算问题的过程&#xff0c;它的基本思想是将待求解问题分解成多个子问题&#xff0c;在相同的时间用不同的处理器计算各个子问题&#xff0c;从而有效地节约计算的时间。早期的并行计算只能由专…

什么是GPU计算?阿里云国际版有没有GPU计算?-Unirech

GPU计算是指使用GPU&#xff08;图形处理单元&#xff09;作为协处理器来加速CPU&#xff0c;以加速科学、分析、工程、消费者和企业应用程序的运行。GPU加速器由NVIDIA于2007年首次推出&#xff0c;现在已经支持了世界各地的政府实验室、大学、公司和中小企业的节能数据中心。…

在数据科学领域,为什么GPU计算速度比CPU快许多的一个最简单解释

为了回答这个问题&#xff0c;我们需要知道几个知识&#xff1a; 1、一个CPU通常只有 几个核 2、一个GPU通常有 几千个核 (为了容易理解&#xff0c;暂且可以把CPU的核和GPU的核看成是同一个东西) 3、通常&#xff0c;CPU的核 性能比GPU的核 性能要强得多 4、标题说到是在数…

Pytorch入门(5)—— 使用 GPU 进行计算

参考&#xff1a;动手学深度学习注意&#xff1a;由于本文是jupyter文档转换来的&#xff0c;代码不一定可以直接运行&#xff0c;有些注释是jupyter给出的交互结果&#xff0c;而非运行结果!! 文章目录 1. 计算设备2. Tensor 的 GPU 计算3. Module 的 GPU 计算 1. 计算设备 打…

腾讯云GPU云服务器产品概述和产品优势,GPU计算型应用场景

本文分享 腾讯云GPU云服务器产品概述和产品优势&#xff0c;GPU计算型应用场景 更多更多参阅腾讯云GPU云服务器产品概述和产品优势&#xff0c;GPU计算型应用场景文档 腾讯云GPU云服务器产品概述 GPU 云服务器&#xff08;GPU Cloud Computing&#xff09;是基于 GPU 的快速…