0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的GPIO输入编程实例之读取按键状态

2oON_changxuemc 2018-02-10 11:08 次阅读

一、概述

1、按键简介

按键是一种机械器件,按键两端分别对应某电路的两个断点,我们可以通过按键接通和断开控制该电路的电压等参数,我们利用按键做的应用通常有控制继电器、键盘、复位等。随着应用的扩展,按键已成为电路板上不可或缺的一部分。

2、按键类别简介

按键主要有四种类型:常开带复位、常开不带复位、常闭带复位、常闭不带复位。(本次实验使用的是常开带复位按键)

按键主要有以下4种工作模式:

常开带复位:初始默认状态是开路,当受力按下时按键使电路连通,受力结束后其自动返回开路状态。 常开带不复位:初始默认状态是开路,每按下一次按键改变一次开闭状态。 常闭带复位:初始默认状态是连通,当受力按下时按键使电路开路,受力结束后其自动返回连通状态。 常闭不带复位:初始默认状态是连通,每按下一次按键改变一次开闭状态。 3、按键消抖

使用手动按键的时候,由于机械抖动可能造成按键的错误识别。一般手动按下按键然后释放,按键两片金属膜接触的时间大约为50ms,按键松开到稳定的时间为5-10ms。因此,如果在首次检测到按键被按下后延时20ms左右再次检测,即可确认是否真的有按键被按下,从而消除按键抖动造成的错误识别。本实验通过给于一定延时后再进行检测,从而有效的避免了按键抖动带来的误判。

二、硬件电路

iCore3双核心开发板中,采用一个独立的按键与STM32F407的PH15相连,限流电阻为1K。

三、实验原理

按键的一端与STM32的GPIO(PH15)相连,另外一端接地,且PH15外接一个1K电流大小的上拉电阻。初始化时把PH15设置成输入模式,当按键弹起时,PH15由于上拉电阻的作用呈高电平(3.3V);当按键按下时,PH15直接被按键短接到GND,呈低电平。因此判断PH15的电平变化,可得到按键状态。

四、源代码

1、主函数

/*

* Name : main

* Description : ---

* Author : ysloveivy.

*

* History

* --------------------

* Rev : 0.00

* Date : 11/21/2015

*

* create.

* --------------------

*/

int main(void)

{

int i;

static int work_status = 0; //三色LED灯工作状态

static int key_status = 1; //按键松开标置

led.initialize(); //三色LED灯端口初始化

key.initialize();

while(1){

if(KEY_INPUT)key_status = 1;

if(key_status == 1){

if(!KEY_INPUT){

for(i = 0;i < 10000;i++); //按键防抖动

if(!KEY_INPUT){

key_status = 0;

work_status += 1;

if(work_status > 2)work_status = 0;

//操作 LED

switch(work_status){

case 0:

LED_RED_ON;

LED_GREEN_OFF;

LED_BLUE_OFF;

break;

case 1:

LED_RED_OFF;

LED_GREEN_ON;

LED_BLUE_OFF;

break;

case 2:

LED_RED_OFF;

LED_GREEN_OFF;

LED_BLUE_ON;

break;

default:

break;

}

}

}

}

}

}

2、GPIO初始化

LED的GPIO初始化配置方式与上一讲一致,以下是按键的GPIO初始化程序

/*

* Name : initialize

* Description : ---

* Author : ysloveivy.

*

* History

* --------------------

* Rev : 0.00

* Date : 11/21/2015

*

* create.

* --------------------

*/

static int initialize(void)

{

GPIO_InitTypeDef GPIO_uInitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);

//设置连接按键的IO端口

GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_15;

//设置端口为输入模式

GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_IN;

//设置速度为第三级

GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz;

//设置输入端口不变化

GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

//把设置的参数用到结构体

GPIO_Init(GPIOH, &GPIO_uInitStructure);

return 0;

}

3、小知识

voidRCC_AHB1PeriphClockCmd

(uint32_tRCC_AHB1Periph,FunctionalStateNewState)

此函数为外设使能函数,第一个参数为需要被使能的外设,第二个参数为使能与否。可能很多读者看到这函数不知道如何入手,不知道参数填啥子好,别急,咱先查看一下他的定义:

查看定义方法:双击函数名选中,右击再点GO TODefinition of ...就可以查看咯。

RCC_AHB1PeriphClockCmd函数定义如下:

void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)

{

/* Check the parameters */

assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));

assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE)

{

RCC->AHB1ENR |= RCC_AHB1Periph;

}

else

{

RCC->AHB1ENR &= ~RCC_AHB1Periph;

}

}

注意被我标红的字符串,按照刚刚查定义的方法,它会告诉我们函数的参数可以填啥。如查看IS_FUNCTIONAL_STATE:

#define IS_FUNCTIONAL_STATE(STATE)

(((STATE) == DISABLE) || ((STATE) == ENABLE))

我们可以看出第二个参数可填写DISABLE(使能)和ENABLE(不使能)。

小结:上面用外设的使能函数为大家介绍了查看函数的方法,此方法在实际应用经常可以用到,当我们在阅读、修改程序的时候,遇到哪些不太清楚的函数,就可以用这种方法查看。

五、实验现象

按键每按下一次,ARM·LED颜色变换(红色、绿色、蓝色轮流交换)一次。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348685
  • GPIO
    +关注

    关注

    16

    文章

    1132

    浏览量

    50553

原文标题:STM32学习2:GPIO输入实验——读取按键状态

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX6ULL 驱动开发7—按键输入捕获与GPIO输入配置与高低电平读取

    本篇主要介绍了i.MX6ULL的按键检测的使用,主要的知识点是设备树的修改,以及GPIO输入配置与高低电平的读取
    的头像 发表于 05-24 09:11 5415次阅读
    i.MX6ULL 驱动开发7—<b class='flag-5'>按键</b><b class='flag-5'>输入</b>捕获与<b class='flag-5'>GPIO</b><b class='flag-5'>输入</b>配置与高低电平<b class='flag-5'>读取</b>

    【HAL库每天一例】第004例:GPIO-按键状态判断扫描式

    GPIO输出高低电平实现LED灯亮灭,现在是时钟GPIO输入模式,按键按下时会改变GPIO的电平,对应的
    发表于 05-09 10:06

    【零基础学习STM32】第二讲:GPIO输入实验——读取按键状态

    ,采用一个独立的按键STM32F407的PH15相连,限流电阻为1K。三、实验原理按键的一端与STM32GPIO(PH15)相连,另外一
    发表于 01-27 14:06

    讲讲关于GPIO按键输入的关键要点

    上次我们讲解了操作STM32GPIO-输出的3种方法和关键代码,这节我们讲关于GPIO按键输入的关键要点,分为
    发表于 12-09 06:33

    GPIO输入--按键

    程序简介 -工程名称:GPIO输入--按键 -实验平台: 秉火STM32 F429 开发板 -MDK版本:5.16 -ST固件库版本:1.5.1 【 !】功能简介: 使用两个
    发表于 12-12 19:08 3次下载

    STM32--固件库使用--按键输入

    STM32–固件库使用–按键输入简介1.硬件STM32F103C8T6 独立按键2.软件keil软件硬件部分软件部分key.c#includ
    发表于 11-21 17:51 15次下载
    <b class='flag-5'>STM32</b>--固件库使用--<b class='flag-5'>按键</b><b class='flag-5'>输入</b>

    STM32H7教程】第19章 STM32H7的GPIO应用之按键FIFO

    STM32H7教程】第19章 STM32H7的GPIO应用之按键FIFO
    发表于 11-23 18:21 8次下载
    【<b class='flag-5'>STM32</b>H7教程】第19章 <b class='flag-5'>STM32</b>H7的<b class='flag-5'>GPIO</b>应用之<b class='flag-5'>按键</b>FIFO

    STM32F103-入门基础实验-GPIO输入-按键(查询/中断)控制LED核心代码(固件库版)

    上次我们讲解了操作STM32GPIO-输出的3种方法和关键代码,这节我们讲关于GPIO按键输入的关键要点,分为
    发表于 11-26 13:21 0次下载
    <b class='flag-5'>STM32</b>F103-入门基础实验-<b class='flag-5'>GPIO</b><b class='flag-5'>输入</b>-<b class='flag-5'>按键</b>(查询/中断)控制LED核心代码(固件库版)

    STM8S自学笔记-006 GPIO输入按键输入按键滤波

    STM8S自学笔记-006 按键输入GPIO输入【修订记录】1、20210812,第一版GPIO输入
    发表于 12-05 11:36 9次下载
    STM8S自学笔记-006 <b class='flag-5'>GPIO</b><b class='flag-5'>输入</b>:<b class='flag-5'>按键</b><b class='flag-5'>输入</b> 与 <b class='flag-5'>按键</b>滤波

    STM32 按键输入实验

    加粗样式一.实验目的1.熟悉使用STM32F4XX开发板2.掌握其GPIO的使用方法3.掌握按键的实现方法二.实现步骤(1)使能按键对应IO口时钟。调用函数
    发表于 12-27 18:53 4次下载
    <b class='flag-5'>STM32</b> <b class='flag-5'>按键</b><b class='flag-5'>输入</b>实验

    STM32基本GPIO操作:按键输入(扫描+外部中断)

    STM32基本GPIO操作:按键输入(扫描+外部中断)本文章向大家介绍STM32基本GPIO操作
    发表于 12-29 19:27 13次下载
    <b class='flag-5'>STM32</b>基本<b class='flag-5'>GPIO</b>操作:<b class='flag-5'>按键</b><b class='flag-5'>输入</b>(扫描+外部中断)

    STM32笔记之按键KEY输入

    关于STM32学习分享第二章 按键输入控制文章目录前言二、代码1.key.c2.key.h3.main.c总结前言开始!开始!单片机的按键配置为输入
    发表于 12-31 19:49 6次下载
    <b class='flag-5'>STM32</b>笔记之<b class='flag-5'>按键</b>KEY<b class='flag-5'>输入</b>

    GPIO输入——按键检测

    按键检测使用到GPIO外设的基本输入功能,本章中不再赘述GPIO外设的概念,如您忘记了可重新回到第八章节进行阅读。
    的头像 发表于 02-15 15:45 1922次阅读
    <b class='flag-5'>GPIO</b><b class='flag-5'>输入</b>——<b class='flag-5'>按键</b>检测

    GPIO读取按钮状态

    树莓派的GPIO可以控制发光二极管,这是GPIO的Output(输出)能力,它也具有input(读取)的能力,所以才能叫做I/O(输入/输出)端口。今天我们就来用
    的头像 发表于 07-02 15:06 887次阅读
    用<b class='flag-5'>GPIO</b><b class='flag-5'>读取</b>按钮<b class='flag-5'>状态</b>

    stm32怎么读取io口输入电平

    读取STM32的IO口输入电平,你可以使用GPIO外设来完成。GPIO是通用输入输出端口,它可
    的头像 发表于 01-05 11:46 1274次阅读