按键操作(CubeMX加HAL库学STM32系列)

2020-05-20来源: eefocus关键字:按键操作  CubeMX  HAL库  STM32系列)

这一篇是补充第一篇的按键操作, 因为第一篇很多地方很详细了, 写了很大的篇幅, 所以单独写一篇用CubeMX配置STM32使用自带按键的操作


提示 : 仍然按照先Cube配置再IAR或者Keil编程, CubeMX里面关于时钟的配置跟我上一篇写的一样, RCC和SYS设置以及时钟树(Clock Configuration)都按照第一篇配置即可, 没有什么特别的需求, 是从始至终不需改变这个地方的配置的。


1-2. 使用核心板自带按键

操作简介 :    通过板子上的两个按钮控制LED灯的亮灭 WK_UP按键按下则LED0闪烁, 松开停止闪烁并熄灭, 即WK_UP按键长按LED0才会持续闪烁    KEY0按下再松手, LED1就亮, 再按下一次LED1就灭, 类似于开关的功能,每按一次KEY0键, LED1状态翻转一次


Step1

(1) 新建工程(New Project)---->搜索自己所用的MCU型号(我的是STM32F407zg系列)

这里我直接把前面的工程拿来用, 添加对按键对应引脚的配置即可

在这里插入图片描述

这里关于引脚上拉下拉解释一下: 可以看到, 当WK_UP按下时, +3.3v就进入PA0,   而KEY0按下时, PE4就会变为低电平。 所以WK_UP相当于有一个下拉电阻. 我在图里标注了两个额外的上下拉电阻, 便于理解清晰

此外, 电阻是上拉还是下拉是看通过这个电阻, 电流是注入引脚 (就是下拉) 还是从引脚流出 (即上拉)


1、比如WK_UP对应那个地方, 通过那个电阻将WK_UP那一边钳在了低电平, 所以是下拉电阻

2、同理, KEY0那个对应引脚, 相当于是有一个另一端接VCC的电阻, 从而在KEY0那个按键没有按下的时候, KEY0引脚被钳在了高电平, 那个电阻还起着限流的作用


(2) 引脚配置

这里我们将按键都设置为输入引脚, 因为对应按键按下之后, 一个会给对应引脚输入高电平, 一个会输入低电平, 都会给引脚输入一个信号, 所以设置为输入GPIO_Input

在这里插入图片描述

根据前面的上下拉讲解, 应该知道, WK_UP对应的PA0引脚应设置为内部下拉(Pull-down)

KEY0对应PE4引脚内部设置为上拉(Pull-up) 具体配置见下图展示

在这里插入图片描述

同理配置KEY0对应的PE4

在这里插入图片描述

配置完成后点击 Generate Code---->Open Project

(3) 部分初始化代码展示

打开工程后, 我们先看一下多了哪些东西

在这里插入图片描述

在main.h 这里面也多了对引脚的宏定义, 因为我们自己给它起了个别名


在这里插入图片描述

Step2

(1) 功能代码编写

在这里插入图片描述

下面我直接把代码打出来, 便于复制

在这里插入图片描述

/* USER CODE BEGIN 3 */

// 在while(1)里面循环扫描, 判断读取的按键引脚状态

// 先读取WKUP引脚的电平   若为GPIO_PIN_SET(即WKUP得到了高电平, 表示这个按键按下了)

if (HAL_GPIO_ReadPin(WKUP_GPIO_Port, WKUP_Pin) == GPIO_PIN_SET)

{

HAL_Delay(10); // 延时10ms, 做一个软件的消抖, 防止因抖动而检测到按键按下

if (HAL_GPIO_ReadPin(WKUP_GPIO_Port, WKUP_Pin) == GPIO_PIN_SET)

{

HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);// 点亮LED0

HAL_Delay(100);

HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);  // 点亮LED0

HAL_Delay(100);

}

}

// 下面扫描KEY0按键的引脚信号

if (HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET)

{

HAL_Delay(10); // 延时10ms, 做一个软件的消抖, 防止因抖动而检测到按键按下

if (HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET)

{

// 做一个松手检测, 若KEY0一直是RESET(低电平),则一直在死循环

// 当KEY0位SET才会跳出,进而继续执行下面的对 LED1 的操作

while(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET);

HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);

}

}

  }

  /* USER CODE END 3 */


HAL_GPIO_ReadPin这个函数就是去读取引脚的状态, 读取引脚是RESET(0)还是SET(非0)

在while(1)里面循环扫描, 如果发现按键按下, 就执行其内部的函数, 每次读取引脚电平后还要用HAL_Delay()函数做一个小延时, 作为软件消抖,消除按键意外抖动出现的结果


(2) 功能函数解释

在这里插入图片描述

(3) 实际效果展示

在这里插入图片描述

关键字:按键操作  CubeMX  HAL库  STM32系列) 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic497717.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:IAR平台下使用STM32的DSP配置方法
下一篇:STM32f407---oled屏幕配套取字模软件使用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

第一节:用Cube学32之简单IO口操作(点灯及按键)
;// 延时100ms单片机效果如下面动图所示每个函数都可以自己Go To Definition 去看一下如果使用, 都有详细注释keil编程如果你用的Keil, 也是同样, CubeMX配置不变, 只是选择用MDK-ARM打开然后对Flash Download选项卡设置到这里就over了, 开始写代码keil和IAR不同, 下载代码之后自己就运行了,keil的编译速度也比较IAR要慢很多点灯操作就到这里, 下面分一篇小篇幅的博客再写按键
发表于 2020-05-17
第一节:用Cube学32之简单IO口操作(点灯及按键)
非常完备的按键操作系统,单击、双击、N击,长按。可移植
; utime getTimer; //获取时钟精准时刻,用于设定按键扫描周期    utime acquisitionMoment; //获取时钟精准时刻,用于记录相同按键状态持续时长    uchar  (*read_gpio)(void); //获取按键状态方法};/*================================outPutEn 是为后面接收按键是单击、多击长按函数准备的参数。比如按键扫描程序10ms运行一次,输出的是单击,如果没有outPutEn这个参数,后面的接收程序会在10ms内一直都接收的是单击指令,这样就会一直执行单击需要进行的操作,本来单击一次档位变化
发表于 2019-12-11
STM32学习第二课——(操作)按键控制LED灯
对于按键控制LED灯这一课,首先要看小黑板的原理图如下所示 查看可知KEY0按键对应的IO口是PC1,KEY1按键所对应的IO口是PC13。这样就可以操作写代码了吗?不不不,在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等以下是代码部分://FUNCTION:按键所对应的IO口初始化//DATA:20180914void key_Init(void){    GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量       RCC_APB2PeriphClockCmd
发表于 2019-09-27
STM32学习第二课——(操作)按键控制LED灯
STM32学习第二课——(操作)按键控制LED灯
对于按键控制LED灯这一课,首先要看小黑板的原理图如下所示 , 查看可知KEY0按键对应的IO口是PC1,KEY1按键所对应的IO口是PC13。这样就可以操作写代码了吗?不不不,在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等以下是代码部分://FUNCTION:按键所对应的IO口初始化//DATA:20180914void key_Init(void){    GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量       RCC_APB2PeriphClockCmd
发表于 2019-06-24
STM32学习第二课——(操作)按键控制LED灯
使用STM32GPIO读取按键实现按键操作(STM32_08)
一、开发板按键设置    在"STM32-PZ6806L"开发板上除了复位按键外,还设计了4个按键,分别标为"UP"、"DOWN"、"LEFT"和"RIGHT",其电路如下:根据电路连接得知K_UP按键一端与GPIOA_0连接,另一端通过一个1KΩ电阻接3.3V,所以在对GPIOA_0配置时应设置工作方式为“下拉输入”,当按键松开时为低电平,按键按下时为高电平;K_LEFT、K_DOWN和K_RIGHT三个按键的一端分别与GPIOE_2、GPIOE_3和GPIOE_4相连,另一端接地,所以对GPIOE_2
发表于 2019-05-29
使用STM32GPIO读取按键实现按键操作(STM32_08)
STM32CubeMX学习--(4)CAN使用
CUBE配置CAN参数配置配置引脚PD0 PD1为CAN功能。在Connectivity->CAN1中勾选Master Mode。在ParameterSettings中配置:NVIC Settings中勾选RX0中断在NVIC中配置CAN1中断组为2 2修改代码添加bsp_can.c文件,代码如下:#include "bsp_can.h" #include "main.h"#define CAN1FIFO CAN_RX_FIFO0#define CAN1FIF1 CAN_RX_FIFO1CAN_TxHeaderTypeDef TxMeg;CAN_RxHeaderTypeDef
发表于 2020-05-14
STM32CubeMX学习--(4)CAN使用
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved