STM32CubeMX基础例程(小熊派):02.按键轮询检测

2023-11-11

1、准备开发板

这里我选用了一块网红开发板:”小熊派“,这款板子的人气比较高,还是全国大学生物联网设计竞赛(华为杯)的华为竞赛开发板,我个人也比较喜欢用这款板子,这款板子在放在纸箱吃灰半年之后,被我重新拿了起来,并想借此写博客的机会,整理一下自己的代码。

开发板功能区分布图

在这里插入图片描述

开发板俯视图

在这里插入图片描述

外设引脚对应表

MCU引脚 引脚标注名
PC13 LED
PB2 KEY1
PB3 KEY2

按键原理图

在这里插入图片描述

2、STM32CubeMX生成代码

在这里插入图片描述

搜索并选择芯片型号

在这里插入图片描述

配置系统时钟

在这里插入图片描述

配置时钟树

STM32L4的最高主频可达到80M,最后使HCLK = 80Mhz即可:

在这里插入图片描述
在这里插入图片描述

配置GPIO引脚

在这里插入图片描述

修改引脚的用户标签名(相当于取另一个新名字)

在这里插入图片描述

配置PB2和PB3设置成上拉输入

在这里插入图片描述

在这里插入图片描述

生成工程设置

在这里插入图片描述

代码生成配置

在这里插入图片描述

生成代码

在这里插入图片描述

生成成功

在这里插入图片描述

3、在MDK中编写代码

在gpio.h文件中添加

typedef enum
{

	LED_OFF = 0,
	LED_ON,
	LED_Toggle

} LED_ENUM;

#define LED_Set(status) status != LED_Toggle ? HAL_GPIO_WritePin( LED_GPIO_Port, LED_Pin, status != LED_ON ? GPIO_PIN_RESET : GPIO_PIN_SET): HAL_GPIO_TogglePin( LED_GPIO_Port, LED_Pin);

新建key.h文件编写以下代码

#ifndef _KEY_H
#define _KEY_H

#include "main.h"

#define KEY1  HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)//读取按键1
#define KEY2  HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)//读取按键2

#define KEY1_PRES 	  1	//KEY1按下
#define KEY2_PRES	  2	//KEY2按下

unsigned char KEY_Scan(unsigned char mode);
#endif

新建key.c文件编写以下代码

//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY1按下
//2,KEY2按下
//注意此函数有响应优先级,KEY1>KEY2!!
unsigned char KEY_Scan(unsigned char mode)
{	 
	static unsigned char key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up && (KEY1 == 0||KEY2 == 0))
	{
		HAL_Delay(10);//去抖动 
		key_up = 0;
		if(KEY1 == 0)return KEY1_PRES;
		else if(KEY2 == 0)return KEY2_PRES;
	}else if(KEY1 == 1&&KEY2 == 1)key_up=1; 	    
 	return 0;// 无按键按下
}

在main.c中的main函数编写以下代码

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      unsigned char key = KEY_Scan(0);	//按键按下检测函数
      if(key == 1)
      {
          LED_Set(LED_ON);		//点亮LED
      }
      if(key == 2)
      {
          LED_Set(LED_OFF);		//熄灭LED
      }
  }
  /* USER CODE END 3 */

在这里插入图片描述

4、配置烧录器

在这里插入图片描述
在这里插入图片描述

5、烧录代码

在这里插入图片描述

6、实验现象

按下按键1,LED灯点亮。按下按键2,LED熄灭。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMX基础例程(小熊派):02.按键轮询检测 的相关文章

  • vue中实现删除校验-iview的气泡提示

    前言 很多时候我们担心删除会出现误删的情况 这样就需要对删除进行二次校验 确定是否继续删除 效果图 实现代码
  • Type Incompatible operand types String and int

    今天eclipse包了一个错误 意思就是Description Resource Path Location Type Incompatible operand types String an 但是昨天还没有错误为什么那 最后找了好久发现不
  • 区块链之PBFT算法

    在公有链中用的最多的是pow算法和pos算法 这些算法都是参与者的利益直接相关 通过利益来制约节点诚实的工作 解决分布式系统中的拜占庭问题 拜占庭容错算法是一种状态机副本复制算法 通过节点间的多轮消息传递 网络内的所有诚实节点就可以达成一致
  • jQuery实现省市二级联动

    主要实现流程 步骤分析 1 设置加载页面函数事件 2 在里面获取select的id并且设置下拉事件并且绑定函数 3 定义2维数组存放相应的城市 4 遍历2维数组省份 并且使用if判断 点击时的this value值 如果值与省份 二位数组下

随机推荐

  • 深入理解 == 与 equals 区别

    深入理解 与 equals 区别 这是一个老生常谈的问题了 也是在面试过程中常见的问题之一 网上所提供的常用回答是 equals比较值 比较值和引用 对java源码有了一定了解了之后回头再思考这个问题并不是那么的简单单一 java中的二元运
  • springboot的配置注入

    文章目录 第一种 使用 Value 第二种 使用 ConfigurationProperties springboot配置注入 数据绑定 有两种方式 第一种 使用 Value 首先 在application yml中定义自己的数据 appl
  • 蓝桥杯基础试题汇总(Python)看这一篇就够了

    目录 蓝桥杯习题汇总 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积
  • 浅谈数据同步实现rsync+inotify

    浅谈数据同步实现rsync inotify 数据的实时同步介绍 数据的实时同步实现 inotify inotify的介绍 实现inotify软件 inotify rsync使用方式 实现inotify rsync 1 rsync基本概述 2
  • ubuntu安装deb包

    ubuntu安装deb包 安装deb包 sudo dpkg i 包名 安装deb包后 可能会出现依赖关系而不能正常安装软件 这个时候先更新下源然后解决依赖关系后重装即可 sudo apt get update 更新 sudo apt get
  • 教程网站 汇总:Linux 、 C /C++ 、HTML、CSS

    C 语言教程 菜鸟教程 https www runoob com cprogramming c tutorial html C 教程 菜鸟教程 https www runoob com cplusplus cpp tutorial html
  • 安装apache后无法访问localhost但可以访问127.0.0.1的解决方法

    localhost与127 0 0 1的概念和工作原理之不同 概念 localhost 也叫local 正确的解释是 本地服务器 127 0 0 1 在windows等系统的正确解释是 本机地址 本机服务器 工作原理 localhot 是不
  • VS2019的常见错误和调试功能

    目录 一 VS2019常见问题 1 scanf问题 2 如何在当前页面下再创建新项目和创建多项目后无法运行当前项目的问题 二 VS2019的调试功能 不打断点 三 VS2019的调试功能 打断点 四 总结 一 VS2019常见问题 1 sc
  • 爬虫实战爬取豆瓣电影Top250榜单电影

    爬虫实战爬取豆瓣电影Top250榜单电影 实战内容 直接上代码 重要地方有注释 from bs4 import BeautifulSoup import re import urllib request urllib error impor
  • Postman + Pre-resuestScript:预请求脚本发送GET请求

    通过预执行脚本 Pre request Script 发送GET请求 一 效果演示 二 控制台 Console 打印响应结果 代码注释详解 pm sendRequest 是发送一个请求 function 中的 err 表示请求返回的错误信息
  • Node的Buffer对象和fs模块

    一 Node的模块化管理 1 模块化 node应用程序由模块组成 遵循的是CommonJS模块规范 使用模块管理的好处是隔离模块的作用域 避免出现命名冲突 2 什么是CommonJS 是一套代码的规范 构建一个在浏览器之外的JavaScri
  • 报错:ImportError: rocketmq dynamic library not found解决方法

    目录 一 ImportError rocketmq dynamic library not found 二 OSError librocketmq so cannot open shared object file No such file
  • Shell脚本的通配符和特殊符号

    通配符 符号 意义 0到无穷个任意字符 一个任意字符 如 abcd 表示a b c d中任意一个 在编码顺序内的所有字符 如 0 9 表示0到9间的数字 反向选择 如 abc 表示非a b c的其它字符 特殊符号 符号 内容 管线 分割两个
  • 项目质量管理__七种基本质量工具__老七工具和新七工具

    七种基本质量工具 用于在PDCA Plan Do Check Action 循环的框架内解决与质量相关的问题 1 老七工具 包括因果图 流程图 核查表 帕累托图 直方图 控制图和散点图 因果图 又称鱼骨图或石川馨图 流程图 也称过程图 核查
  • 热部署系统实现

    热部署 是指在不关闭或重启服务的情况下 更新Java类文件或配置文件 实现修改内容生效 通过热部署 可提高开发效率 节省程序打包重启的时间 同时 可实现生产环境中需要不停机或重启的服务的升级 在大厂的核心中台 订单服务 商品服务往往有几千台
  • @Cacheable缓存相关使用总结

    本篇文章主要讲解Spring当中 Cacheable缓存相关使用 在实际项目开发中 有些数据是变更频率比较低 但是查询频率比较高的 此时为了提升系统性能 可以使用缓存的机制实现 避免每次从数据库获取 第一步 使用 EnableCaching
  • 【LeetCode】贪心

    贪心 55 跳跃游戏 55 跳跃游戏 55 跳跃游戏 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 1 输入 nums 2 3 1 1
  • rsync实时同步

    rsync实时同步 文章目录 rsync实时同步 toc 一 简介 二 特性 三 常用选项 四 部署 1 目标服务器操作 2 源服务器操作 3 设置脚本开机自启 一 简介 rsync是Linux系统下的数据镜像备份工具 从字面意思上 rsy
  • linux 中移动文件_如何在Linux中移动文件

    linux 中移动文件 在Linux中移动文件看似比较简单 但是可用的选项却比大多数人想象的要多 本文向初学者讲授如何在GUI和命令行中移动文件 同时还解释了幕后实际发生的情况 并介绍了许多经验丰富的用户很少探索的命令行选项 搬什么 在研究
  • STM32CubeMX基础例程(小熊派):02.按键轮询检测

    1 准备开发板 这里我选用了一块网红开发板 小熊派 这款板子的人气比较高 还是全国大学生物联网设计竞赛 华为杯 的华为竞赛开发板 我个人也比较喜欢用这款板子 这款板子在放在纸箱吃灰半年之后 被我重新拿了起来 并想借此写博客的机会 整理一下自