第一节补充:按键操作


《用CubeMX学习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 <CubeMX配置>


(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 <IAR或者Keil编程>

(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);// 点亮LED0HAL_Delay(100);HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);  // 点亮LED0HAL_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) 实际效果展示

我来过, 我战斗过, 我不在乎结局! 加油
Author : 李光辉
date : Thu Dec 26 12:43:45 CST 2019
blog ID: Kevin_8_Lee
blog site : https://blog.csdn.net/Kevin_8_Lee/

第一节补充: 按键操作(CubeMX加HAL库学STM32系列)相关推荐

  1. HAL库学STM32 关于定时器的几个问题

    编者按:路漫漫其修远兮,吾将上下而求索.这句从小学在"日积月累"模块背下来的话,是对屈原最深刻的印象了.昨晚又看了三毛的<撒哈拉的故事>,人生的最大的感动,左不过就是在 ...

  2. stm32 IOT_基于STM32平台的cubeMX和HAL库详解

    课程简介: <朱有鹏老师单片机完全学习系列课程>总共5季,其中第1.2季是51单片机学习,第3.4.5季是STM32单片机与RTOS学习.整个课程时长约250小时,是一套零基础.全面系统. ...

  3. STM32F103以SPI 驱动128*128的TFT彩屏,LCD驱动为ST7735s,程序使用CubeMX的HAL库开发方式,另外也做了标准库的程序移植

    0.  关于本文: 其实我一直都比较懒,不喜欢写博客.但网上关于详细讲解SPI驱动LCD的文章比较少,虽然也能下载到一些案例程序,但对于初学者来说,如果不懂LCD驱动的原理,不懂如何对文字和图片取模, ...

  4. Cubemx与HAL库系列教程|系统时钟配置详解及源码分析

    STM32时钟系统简介 STM32种类繁多,时钟系统也不尽相同,但基本的还是大差不差,今日小飞哥就F1系列的MCU简单聊一聊STM32的时钟系统 1.时钟种类介绍: 先来看一看时钟树图,包含了整个系统 ...

  5. HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置、原理图接线、物料准备

    系列文章目录 编码电机测速 HAL库版 0.96'OLED的使用 HAL库版STM32双轮自平衡车(一) ---代码思路和PID的简单介绍 HAL库版STM32双轮自平衡车(二) --- CubeMX ...

  6. STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)

    STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库 文章目录 STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库 一.O ...

  7. HAL库版STM32双轮自平衡车(三) ———代码精讲

    系列文章目录 编码电机测速 HAL库OLED的使用 HAL库版STM32双轮自平衡车(一) ---代码思路和PID基础精讲 HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接 ...

  8. HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

    系列文章目录 HAL库版STM32双轮自平衡车(一) ---代码思路和PID的简单介绍(本篇) HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接线.物料准备 HAL库版ST ...

  9. HAL库版STM32双轮自平衡车(五) ———— 调参

    系列文章目录 HAL库版STM32双轮自平衡车(一) ---代码思路和PID基础精讲 HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接线.物料准备 HAL库版STM32双轮 ...

  10. HAL库的STM32单片机LTDC驱动显示LCD屏幕

    本文基于STM32H750核心,学习使用LTDC外设,用CubeMX创建HAL库工程,驱动显示LCD屏幕.LCD屏采用AT070TN83. 文末有工程链接. 目录 一.CubeMX生成工程 LCD屏的 ...

最新文章

  1. python 设计模式 观察者_python设计模式之观察者模式
  2. 如何让GAN生成更高质量图像?斯坦福大学给你答案
  3. 《正则表达式必知必会》读书笔记
  4. mysql binlog_checksum_【原创】研发应该懂的binlog知识(下)
  5. 全球及中国汽车涂料市场前景态势与投资渠道分析报告2022版
  6. html5后代选择符,css选择符有哪些?哪些属性可以继承?
  7. nginx配置静态资源允许跨域访问
  8. (免费领取名企Java面试题)volatile作用,指令重排相关
  9. CCNA学习指南第六章
  10. 《Redis视频教程》(p17)
  11. 计算机转换外界信息原理,高级文秘及办公自动化教程-计算机基础
  12. 随机预言机模型与标准模型
  13. linux防病毒软件_十大Linux最佳防病毒软件-Linux防病毒软件列表!
  14. 关于Ubuntu22.04无法定位软件包
  15. 信用卡数字识别(opencv,轮廓计算)
  16. SWUST OJ492: 荷兰国旗问题
  17. BZOJ 4084 [Sdoi2015]双旋转字符串
  18. 面试谈薪资不要怂,6个技巧,助你轻松拿高薪!【吊打面试官系列】
  19. es文件管理器怎么运行html,es文件管理器,详细教您es文件浏览器怎么用
  20. js style.display=block显示布局错乱问题

热门文章

  1. Linux开发sudo apt-cache search检索包
  2. Node.js 4.0 中的 ES 6 特性介绍
  3. Linux系统目录结构解析(centos)
  4. Ubi菜鸟(二)Ubuntu16.04LTS新特性
  5. 电脑C盘的大小影响电脑正常使用吗?
  6. 每个程序员都必须搞懂的抽象类和接口的含义以及区别
  7. 并行开发 4.同步机制(上)
  8. Linux命令之---cat
  9. linux系统快捷键使用
  10. 移植marvell poncat3 demo板的总结