对于自己手上的这款核心板,考虑到还有一个外部外设没有使用,为了比较充分地用好板上的资源,在这里使用一个按键检测。

(一)按键外设

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核心板固件库开发(三) 按键检测相关推荐

  1. STM32F411核心板固件库开发(四) ADC配置

    (一)CEU6的ADC 因为之前已经和F411CEU6先生打过招呼了,这次呢,我们就让F411CEU6先生帮助我们完成电压采集的工作,我们要用一下F411CEU6的ADC模块. 这是F411CEU6的 ...

  2. STM32F411核心板固件库开发(二) USART配置

    (一)芯片USART信息 我自己手上的F411CEU6只有48个引脚,属于UFQFPN48封装.对于同一系列型号的芯片,封装不一样,引脚的个数也会不一样,芯片上的外设资源自然也会不一样.UFQFPN4 ...

  3. STM32F411核心板固件库开发(一) GPIO基本配置

    暑假这几天天气比较炎热,在宿舍和室友偶然谈起STM32芯片,他说他有块F411的核心板.鉴于我之前用的几款芯片主要是F103系列和F407系列,对于F411系列的核心板倒没怎么用过.我一时心血来潮,就 ...

  4. 固件库应用之按键检测

    文章目录 按键检测 什么是按键检测 按键硬件电路 编程步骤 1. 使能GPIO端口时钟 2. 初始化 GPIO 目标引脚为输入模式: 3. 检测GPIO引脚的输入,并判断按键状态 3.1 GPIO电平 ...

  5. 【致敬未来的攻城狮计划】第2期定向赠书《RT-Thread设备驱动开发指南》+ 《GD32 MCU原理及固件库开发指南》

    开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯(超链接:http://yyds.recan-li.cn)和 瑞萨MCU (超链接:瑞萨电子 (Renesas Electronics ...

  6. GD32F303固件库开发(7)----printf打印配置

    GD32F303固件库开发.7----printf打印配置 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 串口初始化 最后 串口重定向 打印测试 测试结果 概述 本章主要配置prin ...

  7. GD32F303固件库开发(16)----移植兆易创新SPI Nor Flash之GD25Q64Flash

    spi概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的 ...

  8. GD32F303固件库开发

    GD32F303固件库开发 芯片申请 GD32F303固件库开发(1)----前期准备与烧录 GD32F303固件库开发(2)----读保护与写保护 GD32F303固件库开发(3)----使用固件库 ...

  9. GD32F303固件库开发(5)----GPIO输出模式,速率测试、开漏和输出说明

    GD32F303固件库开发.5----GPIO输出模式,速率测试.开漏和输出说明 概述 样品申请 视频教学 csdn课程 硬件准备 开发板管脚配置 不同速率对应的波形 GPIO_OSPEED_2MHZ ...

最新文章

  1. 日常办公会用到的python模块-Python如何去实际提高工作的效率?也许这个会有用!...
  2. 藏妹子之处(excel)
  3. SQL语句将某字段查询出以逗号隔开
  4. X264码率控制流程分析 (转)
  5. Google Analytics Advanced Configuration - Google Analytics 高级配置
  6. python命令方式和关键字
  7. 微软设计套装 Expression Studio 4 (Ultimate+Web Pro+Encoder Pro) 最新版下载
  8. UOJ 55 【WC2014】紫荆花之恋——点分治+平衡树
  9. PPTP拨号后无法打开网页处理
  10. 微信小程序代码体积压缩到最小
  11. 06 - 雷达发射机 概述
  12. 【学习笔记】SAP资产模块
  13. 极狐gitlib的安装和使用
  14. Java专题 Java使用第一步 环境搭建JDK及JRE(含多版本JDK切换思路)
  15. 三国演义-(01不打不相识)
  16. grid - gap
  17. Data-free量化
  18. 安卓中Paint与Canvas用法
  19. 手机令牌 dKey M6介绍
  20. docker安装redis无法启动: The container name “/ly-redis“ is already in use by container

热门文章

  1. “专精特新”背后的京东动力
  2. 2020-03-05-stm32 学习--Stm32F407 SPI1 全双工DMA 收发数据
  3. Matlab的数据导入与拟合
  4. 要想学会编程,首先先会学习方法!
  5. linux安装java视频_linux安装java(zz)
  6. java程序员必读书籍
  7. php对mysql的增删改
  8. 有1、2、3、4个数字,能组成多少个互不相同 且无重复数字的三位数?都是多少?...
  9. linux关闭防火墙(临时/永久)
  10. 客户网站中经常用到的英文