当前位置: 首页 > news >正文

蓝桥杯嵌入式(STM32G431RBT6)入门第三天——使用按键(KEY)|CSDN创作打卡

接前一天,创建一个KEY练习的文件夹,并在文件夹里面创建KEY和KEY_test两个文件夹。

将前一天写完的LED的所有文件拷贝到KEY文件夹里面,并在KEY文件夹的Inc和Src文件夹中分别建立key.h和key.c两个文件。

下面打开官方提供的CT117E-M4产品手册找到7.7的按键,看原理图可知四个按键处于浮空状态,并且在按键未按下时IO口通过一个10k的电阻与VDD相连,所以按键未按下默认为高电平,当按键按下时接入到GND此时IO口电平为低电平。所以需要设置IO口为浮空输入模式,并且默认为上拉模式。

下面打开STM32CubeMX进行按键IO口的初始化(此处已跳过芯片选型步骤),由于是已经使用了前面的工程,所以不需要配置时钟只需要配置GPIO,依次选择PB0、PB1、PB2、PA0将其设置为GPIO Input,并在中间区域将其修改为Pull-up(即上拉输入)。

下面进行工程的设置,和之前的一样。

打开KEY文件夹中的工程,同时打开KEY_test中的工程,将生成的KEY_test工程中下面这一段复制进KEY工程的key.c中。

并做相应的修改,修改完成后的key.c代码如下,共有两个函数,第一个为刚刚复制的按键初始化函数,第二个函数为按键扫描函数,其中的B1-B4在key.h中采用宏定义的方式与HAL_GPIO_ReadPin()函数相通,用来获取按键对应的GPIO口的电平状态。延时的10ms用来消抖,此按键逻辑仅支持短按并且是按下有效,想了解别的控制方式可以去查看其他的文章亦可等待后续的更新。

#include "key.h" void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin : PA0 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pins : PB0 PB1 PB2 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } unsigned char key_scan(void) { static unsigned char key_up = 1; if(key_up == 1 &&(B1 == GPIO_PIN_RESET || B2 == GPIO_PIN_RESET || B3 == GPIO_PIN_RESET || B4 == GPIO_PIN_RESET)) { HAL_Delay(10); key_up = 0; if(B1==GPIO_PIN_RESET) return 1; else if(B2==GPIO_PIN_RESET) return 2; else if(B3==GPIO_PIN_RESET) return 3; else if(B4==GPIO_PIN_RESET) return 4; } else if(B1 == GPIO_PIN_SET && B2 == GPIO_PIN_SET && B3 == GPIO_PIN_SET && B4 == GPIO_PIN_SET) key_up = 1; return 0; }

key.h中代码如下

#include "main.h" #define B1 HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)//读取按键B1 #define B2 HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)//读取按键B2 #define B3 HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)//读取按键B3 #define B4 HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)//读取按键B4 void KEY_Init(void); unsigned char key_scan();

最后将main中代码进行如下修改,下载程序进开发板即可进行按键的实验,此测试仅使用了B1和B2两个按键。

int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ LED_Init(); KEY_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ unsigned char key_read; key_read = key_scan(); if(key_read == 1) { led_display(0x88); } if(key_read == 2) { led_display(0x44); } //led_display(0x00); } /* USER CODE END 3 */ }
http://www.jsqmd.com/news/446819/

相关文章:

  • ARM-MPU内存保护单元详解
  • 《计算机体系结构基础》课程速看(一)
  • 物联网之Arduino编程语言、条件语句、循环语句、变量、数组、函数
  • Web前端之页面可见性与元素重叠、懒加载、显示、隐藏、交叉、IntersectionObserver、visibilitychange
  • 怎么一步步实现小米智能家居之玄关篇
  • 探索PQ控制三相并网逆变器:从理论到仿真
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第二天——建立自己的初始化文件|CSDN创作打卡
  • 服务端之NestJS中获取完整请求Host的四种封装方式及应用场景、Service与拦截器对比、工具函数、装饰器
  • SAP HANA SQLScript 性能定位的起手式:用支持性工具锁定主导语句与主导算子
  • Cadence
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第一天——点亮LED|CSDN创作打卡
  • Web前端之监听元素的重叠度、设置所有元素的滚动条宽度都为0、节点布局的交叉状态、生成随机图片、阮一峰、标签、IntersectionObserver
  • 【解决】Ping 不是内部或外部命令,也不是可运行的程序或批处理文件
  • Python相关问题
  • 算法---LeetCode 剑指 Offer 26. 树的子结构
  • Web前端之上传文件夹、webkitdirectory
  • 通俗易懂解释知识图谱(Knowledge Graph)
  • Web前端之实现酷炫的仪表进度条、JavaScript动态设置Css属性值、标签元素属性选择器、hsl样式函数
  • 优先队列(priority_queue)总结
  • Web前端之实现累计功能、原生与UniApp版微信小程序两种方式实现、计算、累加、getElementById、innerHTML、Number
  • 在 SAP Kyma 上使用 Redis 服务
  • Web前端之鼠标悬浮,鼠标移入和鼠标移出、getElementById、onmouseover、onmouseout、mouseenter、mouseleave、hover
  • 读懂 Cost-Based Optimization:SAP HANA SQL 优化器如何用成本模型选出更快的执行计划
  • 这才是未来的“openclaw”
  • git 命令总结
  • postpresql 表结构修改、添加字段、外键、主键自增逻辑设置
  • 从扫描到索引:SAP HANA 查询处理路径与优化技巧的落地实战
  • 把运行在 Docker 容器内的 Microsoft SQL 服务器部署到 SAP Kyma 中
  • Python—1、基础篇
  • 读懂 SAP HANA 的 Optimized Logical Plan 与 Optimized Physical Plan:把优化器的思路“看见”