STM32F411核心板固件库开发(三) 按键检测
对于自己手上的这款核心板,考虑到还有一个外部外设没有使用,为了比较充分地用好板上的资源,在这里使用一个按键检测。
(一)按键外设
1、核心板
2、核心板原理图
按键上端和PA0引脚相连,按键下端接地。所以当按键被按下的时候,PA0应该读取到的是低电平才对。当按键没有被按下的时候,根据原理图中的这种设计,可见PA0既没有设置成上拉电阻,也没有设置下拉电阻,所以此处PA0不宜设置为浮空输入的模式(即既不上拉也不下拉的模式),从而使得芯片复位后,PA0端口的电平固定。
对于我们这款核心板的硬件设计,PA0的端口模式就应该设置为上拉模式,那么当按键没有按下的时候,PA0就会一定是高电平,以和下拉形成区别。
3、含有硬件消抖的原理图
当按键没有按下的时候,引脚接地;当按键按下的时候,引脚接3.3V高电平。针对这里,引脚的输入模式就可设置为浮空输入的模式。
(二)编写代码:
1、按键GPIO配置
void Key_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/*开启按键GPIO口的时钟*/RCC_AHB1PeriphClockCmd(KEY_GPIO_CLK,ENABLE);/*选择按键的引脚*/GPIO_InitStructure.GPIO_Pin = KEY_PIN; /*设置引脚为输入模式*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; /*设置引脚为上拉*///这时使用万用表可以测得PA0有电压,为高电平;如果设置为GPIO_PuPd_UP,就会变成低电平GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; /*使用上面的结构体初始化按键*/GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure); /*选择按键的引脚*/GPIO_InitStructure.GPIO_Pin = KEY_PIN; /*使用上面的结构体初始化按键*/GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);
}
根据核心板的硬件设计,按键检测的GPIO引脚设为上拉模式
2、按键检测
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{ /*检测是否有按键按下 */if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 ){Delay_ms(10); //延时消抖if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0){return 0;} }else return 1;
}
这里需要注意的是,按键使用的是软件消抖的方法。关于软件消抖的方法,有很多。有用延时的,也有用定时器计数的。这里只是为了测试F411CEU6这块核心板,使用了延时进行消抖。但要注意 ,这种办法不能用在工业控制中。
3、主函数
int main(void)
{LED_GPIO_Config();Key_GPIO_Config();SysTick_Init();while(1){if( Key_Scan(KEY_GPIO_PORT,KEY_PIN) == 0 ){GPIO_ResetBits(GPIOC, GPIO_Pin_13);Delay_ms(200);GPIO_SetBits(GPIOC, GPIO_Pin_13);Delay_ms(200);} }}
在主函数里面,我们使用Key_Scan()函数,一旦检测到按键按下,就产生LED闪烁。
4、实验现象:
F411CEU6_KEY_DETECT例程
STM32F411核心板固件库开发(三) 按键检测相关推荐
- STM32F411核心板固件库开发(四) ADC配置
(一)CEU6的ADC 因为之前已经和F411CEU6先生打过招呼了,这次呢,我们就让F411CEU6先生帮助我们完成电压采集的工作,我们要用一下F411CEU6的ADC模块. 这是F411CEU6的 ...
- STM32F411核心板固件库开发(二) USART配置
(一)芯片USART信息 我自己手上的F411CEU6只有48个引脚,属于UFQFPN48封装.对于同一系列型号的芯片,封装不一样,引脚的个数也会不一样,芯片上的外设资源自然也会不一样.UFQFPN4 ...
- STM32F411核心板固件库开发(一) GPIO基本配置
暑假这几天天气比较炎热,在宿舍和室友偶然谈起STM32芯片,他说他有块F411的核心板.鉴于我之前用的几款芯片主要是F103系列和F407系列,对于F411系列的核心板倒没怎么用过.我一时心血来潮,就 ...
- 固件库应用之按键检测
文章目录 按键检测 什么是按键检测 按键硬件电路 编程步骤 1. 使能GPIO端口时钟 2. 初始化 GPIO 目标引脚为输入模式: 3. 检测GPIO引脚的输入,并判断按键状态 3.1 GPIO电平 ...
- 【致敬未来的攻城狮计划】第2期定向赠书《RT-Thread设备驱动开发指南》+ 《GD32 MCU原理及固件库开发指南》
开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯(超链接:http://yyds.recan-li.cn)和 瑞萨MCU (超链接:瑞萨电子 (Renesas Electronics ...
- GD32F303固件库开发(7)----printf打印配置
GD32F303固件库开发.7----printf打印配置 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 串口初始化 最后 串口重定向 打印测试 测试结果 概述 本章主要配置prin ...
- GD32F303固件库开发(16)----移植兆易创新SPI Nor Flash之GD25Q64Flash
spi概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的 ...
- GD32F303固件库开发
GD32F303固件库开发 芯片申请 GD32F303固件库开发(1)----前期准备与烧录 GD32F303固件库开发(2)----读保护与写保护 GD32F303固件库开发(3)----使用固件库 ...
- GD32F303固件库开发(5)----GPIO输出模式,速率测试、开漏和输出说明
GD32F303固件库开发.5----GPIO输出模式,速率测试.开漏和输出说明 概述 样品申请 视频教学 csdn课程 硬件准备 开发板管脚配置 不同速率对应的波形 GPIO_OSPEED_2MHZ ...
最新文章
- 日常办公会用到的python模块-Python如何去实际提高工作的效率?也许这个会有用!...
- 藏妹子之处(excel)
- SQL语句将某字段查询出以逗号隔开
- X264码率控制流程分析 (转)
- Google Analytics Advanced Configuration - Google Analytics 高级配置
- python命令方式和关键字
- 微软设计套装 Expression Studio 4 (Ultimate+Web Pro+Encoder Pro) 最新版下载
- UOJ 55 【WC2014】紫荆花之恋——点分治+平衡树
- PPTP拨号后无法打开网页处理
- 微信小程序代码体积压缩到最小
- 06 - 雷达发射机 概述
- 【学习笔记】SAP资产模块
- 极狐gitlib的安装和使用
- Java专题 Java使用第一步 环境搭建JDK及JRE(含多版本JDK切换思路)
- 三国演义-(01不打不相识)
- grid - gap
- Data-free量化
- 安卓中Paint与Canvas用法
- 手机令牌 dKey M6介绍
- docker安装redis无法启动: The container name “/ly-redis“ is already in use by container