嵌入式-stm32学习:按键检测

发布者:数字小巨人最新更新时间:2019-06-21 来源: eefocus关键字:stm32  按键检测  GPIO 手机看文章 扫描二维码
随时随地手机看文章

bsp_key.h


#ifndef __KEY_H

#define __KEY_H


#include "stm32f4xx.h"


//引脚定义

/*******************************************************/

#define KEY1_PIN                  GPIO_Pin_0              //GPIO引脚号   

#define KEY1_GPIO_PORT            GPIOA                   //GPIO端口A   

#define KEY1_GPIO_CLK             RCC_AHB1Periph_GPIOA    //GPIO端口时钟


#define KEY2_PIN                  GPIO_Pin_13                 

#define KEY2_GPIO_PORT            GPIOC                      

#define KEY2_GPIO_CLK             RCC_AHB1Periph_GPIOC

/*******************************************************/


 /** 按键标置宏,

   * 按键按下高电平,KEY_ON=1,KEY_OFF=0,

   * 按键按下低电平,KEY_ON=0,KEY_OFF=1

    */

#define KEY_ON  1

#define KEY_OFF 0


void Key_GPIO_Config(void); //定义KEY-GPIO初始化配置函数

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin); //按键按下检测


#endif /* __LED_H */




bsp_key.c


#include "./key/bsp_key.h" 


/**

  * 配置按键用到的IO口

  */

void Key_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;


  /*开启按键GPIO口时钟*/

    RCC_AHB1PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK,ENABLE);


  /*选择按键GPIO引脚*/

    GPIO_InitStructure.GPIO_Pin = KEY1_PIN; 


  /*设置GPIO引脚为输入模式*/

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 


  /*设置引脚不上拉也不下拉*/

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;


  /*使用上面配置的结构体GPIO_InitStructure初始化按键*/

    GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);    


  /*选择按键GPIO引脚*/

    GPIO_InitStructure.GPIO_Pin = KEY2_PIN; 


  /*使用上面配置的结构体GPIO_InitStructure初始化按键*/

    GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);  

}


/**

  * @brief      检测是否有按键按下     

  * @param  GPIOx:具体的端口(x=A,B...K)

  * @param  GPIO_PIN:具体的端口位(x=0...15)

  * @retval  按键状态

  *     @arg KEY_ON:按键按下

  *     @arg KEY_OFF:按键没按下

  */

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) //按下返回KEY_ON,没按返回KEY_OFF

{           

    /*检测是否有按键按下*/

    if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  

    {    

        /*等待按键释放*/

        while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   

        return  KEY_ON;  

    }

    else

        return KEY_OFF;

}

/*********************************************END OF FILE**********************/


关键字:stm32  按键检测  GPIO 引用地址:嵌入式-stm32学习:按键检测

上一篇:嵌入式-stm32学习:位带操作
下一篇:嵌入式-stm32学习:使用固件库点亮LED

推荐阅读最新更新时间:2024-11-17 15:16

Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
概述 从前面介绍的STM32开发可以感受到, 虽然SPL对于纯寄存器方式开发已经是很大的进步, SPL将大部分寄存器配置做了很好的封装, 配置项简单易读, 但是外设与输出脚的映射关系, 配置项的数量, 配置之间的关联都使得配置难度并未降低, 在项目启动阶段依然要通过不断查阅MCU的用户手册去修改方案, 各种情况下的代码例程直接借鉴容易出错, 需要反复尝试, 往往在调通外设这一步就已经耗费了开发人员的大量时间. 所以ST将开发库的重心迁移到了HAL上, 配合HAL的就是STM32CubeMX这个图形化配置工具. 通过图形化界面, 通过预设的逻辑辅助生成代码模板. 这样可以将底层寄存器和外设的复杂定义和逻辑包装在工具界面之下, 避
[单片机]
STM32库函数void USART_SendData()的缺陷和解决方法
简介:本文主要谈到了STM32库函数void USART_SendData()存在的一些问题,针对这些问题提到了3个解决方案,一起来看看。 2.1问题及现象 使用USART_SendData()函数非连续发送单个字符是没有问题的;当连续发送字符时(两个字符间没有延时),就会发现发送缓冲区有溢出现象。若发送的数据量很小时,此时串口发送的只是最后一个字符,当发送数据量大时,就会导致发送的数据莫名其妙的丢失。 如: for(TxCounter = 0;TxCounter RxCounter; TxCounter++) USART_SendData(USART1, RxBuffer ); 2.2原因 此API
[单片机]
STM32模拟I2C时序读写EEPROM精简版
平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+外部EEPROM(不需要上拉电阻) 工程介绍:主要文件在USER组中,bsp_i2c_ee.c,bsp_i2c_ee.h,bsp_eeprom.c,bsp_eeprom.h和main.c,其中bsp_i2c_ee.c中主要时基本的模拟I2C时序,而bsp_eeprom.c中主要利用前一个文件中定义的基本操作,进行EEPROM的读写操作。其他类似I2C时序的协议,均可以保留bsp_i2c_ee.c的基础上添加新的内容。本文有些内容借鉴了其他网友的总结,在此表示感谢。 1.硬件部分:电路连接较为简单,笔者在淘宝上买的24C02N主要有四根线,两根电
[单片机]
<font color='red'>STM32</font>模拟I2C时序读写EEPROM精简版
IAR EW6.30版本下建立STM32工程(芯片型号STM32F105VC)
参考博客及文档有: 1,http://www.cnblogs.com/ele-eye/archive/2011/11/28/2266229.html 2,http://www.cnblogs.com/king-77024128/articles/2512997.html(CMSIS介绍) 3, http://wenku.baidu.com/link?url=2blE__GxI1lmJglihBi5xJQPolza-NMxcZqGThxwysiY80ZOe6hLl5k6mowbTN2j30WsPftFZsBe1pRt8WlCDIT7Ce5EIReo4uGCEyegh7S(IAR 新建 STM32工程) 4,
[单片机]
IAR EW6.30版本下建立<font color='red'>STM32</font>工程(芯片型号STM32F105VC)
关于单片机STM32裸机程序架构设计
本着授人以渔的原则,既提供我一直在用的程序架构,也讲程序架构的设计思路。 如果本文内容,你都能领悟并做到,不管项目多复杂,都将游刃有余。 我研发的那几年,接触大多数工程师,都没有程序架构的概念,基本一个while死循环干到底。 模块之间也没有封装好,导致代码写好以后,扩展性和维护性太差,类似的功能代码,也很难移植到新项目去复用。 早期我也是这样写的,反正实现功能就行了,代码好不好,功能上又看不出区别。 不过,等你接触到复杂的项目时,这招就行不通了,没设计好程序架构,根本做不稳定。 我意识到这个问题,是碰到两种需求的时候: 1.是做一个基于STM32的网关项目,项目做完以后,客户老是要改功能,客户不懂技术,在客户眼里,觉得改一个
[单片机]
关于单片机<font color='red'>STM32</font>裸机程序架构设计
基于STM32的电能质量检测技术研究
0 引言 近些年来, 随着现代化工业设备和民用电器设备的普及, 电力用户对供电质量的要求越来越高。特别是大量非线性电力负荷用到日常生活和工业生产中, 使得公用电网中的电能质量问题愈显凸出, 已经严重影响了电能供应质量。因此, 根据国家电能质量检测标准, 有必要对电网供电的各项参数进行测试, 分析电网的电能质量。 国内外已有不少方法对电能质量进行检测。但是传统的基于8、16 位的单片机的电能检测设备存在处理速度慢, 硬件结构不够完善等缺点。而当下比较流行的运用DSP 处理器的电能检测设备, 虽然其处理速度快、精度高,但是成本较高、功耗大, 不利于大规模的推广。本文提出一种基于STM32 芯片以内嵌入式智能仪器模式设计的方案。ST
[单片机]
基于<font color='red'>STM32</font>的电能质量<font color='red'>检测</font>技术研究
STM32休眠时关闭看门狗计数的简单解决方案
测试平台 本文采用STM32L476进行测试,休眠模式为STOP,看门狗为独立看门狗IWDG。 其余STM32芯片可参考本贴进行测试。 问题的提出 在此之前对这个问题的解决方法主要有三种: (1)采用调试模式关闭内核的功能来关闭看门狗计数; (2)休眠时采用时钟唤醒来喂狗后继续休眠; (3)用基于系统时钟的窗口看门狗WWDG 第一种方法对STM32L476无效;第二种方案太折腾了,影响RTC使用且费电;第三种方案喂狗间隔太短。 问题的解决 官方数据手册中说明了可以在STOP休眠状态关闭IDWG 因此,只需要修改FLASH_OPTR寄存器的对应位既可以实现休眠免喂狗的功能。 源代码 源代码参考了STM3
[单片机]
<font color='red'>STM32</font>休眠时关闭看门狗计数的简单解决方案
STM32入门开发--LED模块实现跑马灯
1、案例描述 利用STM32F103ZE开发板实现控制LED灯实现跑马灯现象。 正在不断学习嵌入式开发中,博客还会持续更新,敬请关注! 2、开发环境 keil 5.14 + Windows 10 + FlyMcu 参考资料:STM32参考手册 3、实现原理 A.根据硬件接口图: 由接口图发现,开发板上面的两个LED分别接在PB5,和PE5接口处。即我们可以操作GPIO口的寄存器从而操作GPIO端口的控制器。 B、初始化(使能)PB,PE端口,查找手册发现端口PB,PE分别由APB2ENR端口的第三位和第六位控制。我们就将该位置1,其他位不变(|=操作) APB2ENR:外设时钟使能寄存器
[单片机]
<font color='red'>STM32</font>入门开发--LED模块实现跑马灯
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved