1、准备材料

开发板(STM32F407G-DISC1

ST-LINK/V2驱动

STM32CubeMX软件(Version 6.10.0

keil µVision5 IDE(MDK-Arm

2、实验目标

使用STM32CubeMX软件配置STM32F407开发板的按键作为输入,利用按键输入使LED灯产生响应

3、实验流程

3.0、前提知识

对于所有的GPIO来说都是既可以作为输出引脚也可以作为输入引脚使用,本开发板上有一个用户按键,可以作为本次实验的输入,如下图所示为用户按键的电路原理图,当松开按键时,PA0为低电平;当按下按键时,PA0为高电平(注释1)

3.1、CubeMX相关配置

在Pinout & Configuration页面右边单片机引脚预览Pinout view中,寻找需要设置的具体GPIO,这里我们选择用户按键的PA0引脚,左键单击引脚可以对引脚功能进行设置,这里我们选择为GPIO_Input

当GPIO mode选择Input mode时,GPIO Pull-up/Pull-down可以选择无上/下拉、上拉和下拉。无上/下拉表示引脚输入状态完全由外部输入决定,称为浮空输入;上拉表示当无外部输入时,此时引脚的状态被上拉至高电平;同理,下拉表示当无外部输入时,此时引脚的状态被下拉至低电平,这里我们选择无上/下拉。

3.2、生成代码

单击上图页面右上角GENERATE CODE生成工程,然后从生成的代码工程目录中打开keil工程,在MX_GPIO_Init(void)函数中会发现我们新添加的USER_KEY按键初始化代码,其模式为输入模式

然后在主函数的主循环中添加按键扫描及响应函数,如下图所示

源代码如下

if(HAL_GPIO_ReadPin(USER_KEY_GPIO_Port,USER_KEY_Pin) == GPIO_PIN_SET)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(USER_KEY_GPIO_Port,USER_KEY_Pin) == GPIO_PIN_SET)
{
HAL_GPIO_TogglePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin) ;
while(HAL_GPIO_ReadPin(USER_KEY_GPIO_Port,USER_KEY_Pin) == GPIO_PIN_SET);
}
}

4、常用函数

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功能:读取某个GPIO当前的状态

参数:

  1. GPIOx:引脚组别(GPIOA - GPIOI)
  2. GPIO_Pin:引脚(GPIO_PIN_0 - GPIO_PIN_15)

返回值:

GPIO_PinState:低电平(GPIO_PIN_RESET)、高电平(GPIO_PIN_SET)

举例:

Now_PinState=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);

读取PA0当前状态并存储到Now_PinState变量中

5、烧录验证

5.1、具体步骤

“初始化LED引脚为输出 -> 初始化USER_KEY引脚为输入 -> 循环读取USER_KEY引脚状态 -> 如果状态为1表示按下按键 -> 翻转GREEN_LED引脚输出电平点亮/熄灭GREEN_LED”

5.2、实验现象

烧录程序,然后可以观察到当开发板上电后,四个颜色LED全部点亮,然后每按下一次用户按键,绿色LED灯状态均会发生翻转

6、注释解析

注释1:首先忽视掉R38和C38,因为笔者开发板上未焊接C38。当松开按键时,按键处相当于断路,此时PA0引脚经过R35、R39下拉至地,状态为低电平;当按下按键时,按键处相当于短路,此时PA0引脚经过R35被上拉至VDD,状态为高电平;

更多内容请浏览 OSnotes的CSDN博客

STM32CubeMX教程3 GPIO输入 - 按键响应的更多相关文章

  1. 第12章 GPIO输入—按键检测

    第12章     GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  2. 第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列

    第12章     GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  3. 第13章 GPIO输入—按键检测

    本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘 ...

  4. GPIO 输入—按键检测

    这里要用到一定的模电知识.电容两端电压不能突变,电感两端电流不能突变.这里利用了电容的放电延时实现硬件消抖.按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充 ...

  5. GPIO输入—按键检测(开关控制小灯)

    本次的代码全是在上次代码之上添加的. 1.user下新建文件夹key,新建bsp_key.h bsp_key.c文件. 2.keil项目添加bsp_key.c,魔术棒C/C++中include pat ...

  6. stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入.   STM ...

  7. QPushButton 与 QListWidget 的按键响应

    在Qt中添加按钮或表格控件时需要添加其按键响应,一般来说有两种方法,一种是直接实现其响应函数,第二种是自己写一个响应函数,然后用Qt的信号槽将它们连接起来.愚以为第一种方法更为简单一些. 声明这些控件 ...

  8. 关于Android悬浮窗要获取按键响应的问题

    要在Android中实现顶层的窗口弹出,一般都会用WindowsManager来实现,但是几乎所有的网站资源都是说弹出的悬浮窗不用接受任何按键响应. 而问题就是,我们有时候需要他响应按键,比如电视上的 ...

  9. Android获取长按按键响应

    Android获取长按按键响应http://www.2cto.com/kf/201312/261719.html Android下Listview的onItemClick以及onItemLongCli ...

  10. VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能

    Ctrl组合键ASCII码 ^Z代表Ctrl+z                     ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符0(00) ...

随机推荐

  1. oracle监听配置与防火墙问题

    在建好pdb容器后,需配置网络,才能从客户端连接服务器端 1.首先查看pdb容器的服务名 lsnrctl status ... Service "19cdb" has 1 inst ...

  2. Markdown · Typora | 基本画图技巧

    如果想画一些简单的状态图,可以使用 typora 自带的 mermaid 工具. (mermaid 不止能画简单的状态图,还能画流程图等,详见参考资料) 定义节点 可以定义不同形状的节点,并为节点添加 ...

  3. 文本编辑器vi使用命令

    使用对象: 用于编辑任何ASCII文本,对于编辑源程序尤其有用.可以对文本进行创建]查找.替换.删除.复制和粘贴等操作. 三种工作模式 命令模式:进入vi编辑器默认处于命令模式.命令模式下控制屏幕光标 ...

  4. 单元测验3:亲密关系mooc

    单元测验3:亲密关系 查看帮助 返回   1 单选(2分) 在亲密关系中,有关权力的表述,以下说法不太准确的的是? A. 对关系付出越多,权力越大. B. 大部分人会倾向认为,在恋爱关系中,男女应该拥 ...

  5. 配置nginx访问控制-设置防盗链

    1.设置访问控制.只允许本机查看nginx的status状态信息,其它人均拒绝: nginx -V查看nginx是否有status模块,如果没有需要添加 编辑修改nginx.conf文件:在serve ...

  6. Python 轻松生成PDF文档

    PDF(Portable Document Format)是一种常用的文档格式,具有跨平台兼容性.保真性.安全性和交互性等特点.我们日常生活工作中的合同.报告.论文等通常都采用PDF格式,以确保文档在 ...

  7. C# WebBrowser document.execCommand()解析

            //         // Summary:         //     对文档执行指定的命令.         //         // Parameters:         ...

  8. Java Exception最佳实践(转)

    https://www.dubby.cn/detail.html?id=9033 1.异常介绍 2.Java中的异常介绍 3.自定义异常 4.几个建议 1)不要生吞异常 2)申明具体的异常 3)尽可能 ...

  9. win11中无法识别STM32 BOOTLOADER的解决方法

    如图,按照PYBoard的官方手册说可以直接右键选择自动更新驱动即可.但是我在WIN11上并没有成功. 主要是原因是,DFU模式下的STM设备驱动程序没有自动安装成功. 解决方法是手动安装一下驱动: ...

  10. 前端本地导出文件 导出txt sql (简版版的字符串案例)

    1.首页明确要导出的根据 一般有图片 excel  文字.针对不同的文件类型 配置不同的参数 2.知识点 Blob          URL.createObjectUrl new Blob( arr ...