STM32CubeMX教程3 GPIO输入 - 按键响应
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当前的状态
参数:
- GPIOx:引脚组别(GPIOA - GPIOI)
- 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输入 - 按键响应的更多相关文章
- 第12章 GPIO输入—按键检测
第12章 GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- 第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列
第12章 GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- 第13章 GPIO输入—按键检测
本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘 ...
- GPIO 输入—按键检测
这里要用到一定的模电知识.电容两端电压不能突变,电感两端电流不能突变.这里利用了电容的放电延时实现硬件消抖.按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充 ...
- GPIO输入—按键检测(开关控制小灯)
本次的代码全是在上次代码之上添加的. 1.user下新建文件夹key,新建bsp_key.h bsp_key.c文件. 2.keil项目添加bsp_key.c,魔术棒C/C++中include pat ...
- stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入. STM ...
- QPushButton 与 QListWidget 的按键响应
在Qt中添加按钮或表格控件时需要添加其按键响应,一般来说有两种方法,一种是直接实现其响应函数,第二种是自己写一个响应函数,然后用Qt的信号槽将它们连接起来.愚以为第一种方法更为简单一些. 声明这些控件 ...
- 关于Android悬浮窗要获取按键响应的问题
要在Android中实现顶层的窗口弹出,一般都会用WindowsManager来实现,但是几乎所有的网站资源都是说弹出的悬浮窗不用接受任何按键响应. 而问题就是,我们有时候需要他响应按键,比如电视上的 ...
- Android获取长按按键响应
Android获取长按按键响应http://www.2cto.com/kf/201312/261719.html Android下Listview的onItemClick以及onItemLongCli ...
- VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能
Ctrl组合键ASCII码 ^Z代表Ctrl+z ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符0(00) ...
随机推荐
- mpi转以太网连接300PLC无需编程与1200PLC数据交换
300PLC转以太网无需编程300PLC通过 NetDevice与1200PLC数据交换 应用概述: 兴达易控MPI转以太网模块MPI-ETH-XD1.0PLUS 通讯模块实现PLC无需编程通过简单的 ...
- JVM面试题、关键原理、JMM
boolean:占用1个字节,取值为true或false. byte:占用1个字节,范围为-128到127. short:占用2个字节,范围为-32,768到32,767. int:占用4个字节,范围 ...
- 在Go中如何实现并发
Go语言的并发机制是其强大和流行的一个关键特性之一.Go使用协程(goroutines)和通道(channels)来实现并发编程,这使得编写高效且可维护的并发代码变得相对容易.下面是Go的并发机制的详 ...
- FragmentStatePagerAdapter
public abstract class FragmentStatePagerAdapter extends PagerAdapter java.lang.Object ↳ android.s ...
- 解决 Steam 无法自动登录的问题
前言 劳动节假期闲的没事,重装一下电脑,结果电脑的 Steam 不会自动登录了,每次重启电脑就要重新输入密码和令牌.查了一下居然是 Windows 凭据管理器默认不会自动启动的问题. 解决方法 打开计 ...
- 轻松掌握组件启动之Redis集群扩展秘籍:轻松扩容与缩容,释放高性能潜能
扩展集群操作 扩容 在我们原始的集群基础上,我们决定增加一台主节点(8007)和一台从节点(8008),这样新增的节点将会在下图中以虚线框的形式显示在集群中. 1: 首先,在 /usr/local/r ...
- 一键安装LNMP
#!/bin/bash #2020年3月1日 #auto_install_lnmp. #by fly ################################ NGX_VER="$1 ...
- Mach-O Inside: 命令行工具集 otool objdump od 与 dwarfdump
1 otool otool 命令行工具用来查看 Mach-O 文件的结构. 1.1 查看文件头 otool -h -v 文件路径 -h选项表明查看 Mach-O 文件头. -v 选项表明将展示的内容进 ...
- 一文读懂计算机底层网络原理,包括TCP、UDP、header,什么是包、帧、段等关键问题
说到计算机网络原理,大家可能马上联想到,七层协议,传输层,链路层,三次握手四次挥手:前端的同学,还会想到我们用Crome F12的network里面的headers,状态码等.后端同学可能会联想到,抓 ...
- Docker从了解到部署应用的详细教程
一.Docker基础知识 1.Docker (1)Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可以移植的容器中,然后发布到任何的linux机器上,可以实现虚拟化: (2)Docker ...