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

发布者:TranquilVibes最新更新时间:2019-03-29 来源: eefocus关键字:嵌入式  stm32  按键检测 手机看文章 扫描二维码
随时随地手机看文章

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  按键检测 引用地址:嵌入式-stm32学习:按键检测

上一篇:assert_param函数的意义
下一篇:stm32的KEY控制LED

推荐阅读最新更新时间:2024-03-16 16:26

STM32,RTC周期性唤醒(wakeup)中断
STM32L151: int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); LED_ON(); MX_DMA_Init(); MX_SPI1_Init(); MX_SPI2_Init(); MX_TIM3_Init(); MX_USART2_UART_Init(); //MX_IWDG_Init(); MX_RTC_Init(); MX_USART3_UART_Init(); MX_USART1_UART_Init(); printf( init complete...\r\n ); LED_OFF(); uns
[单片机]
基于STM32的双相步进电机细分驱动器设计
步进电机是一种运用广泛的控制电机,其特征是不使用位置反馈回路就能进行速度控制及定位控制,即所谓的电机开环控制。相对于伺服电机,步进电机有着成本低廉,控制简单等优点,尤其是两相混合式步进电机,在工业运动控制系统中有着广泛的应用。然而,传统的驱动方式,比如单电压驱动、高低电压驱动、斩波恒流驱动等等,虽然已经应用十分成熟,但是只限于低速运行,并且细分度一般限制在1/2步距,无法很好消除低频振荡,以及定位精度差等缺点。细分驱动的出现很好地弥补了这一缺点。 常见的细分控制器一般由MCU、专用逻辑驱动芯片以及功率驱动模块组成,这样的驱动器虽然能满足多细分驱动,但由于细分数量和效果会受到逻辑驱动芯片的影响,并且无法调整细分数和限流值、从而造
[单片机]
基于<font color='red'>STM32</font>的双相步进电机细分驱动器设计
IAR在STM32的配置方法
1. 建立工程项目文件 新建一个文件夹来存放整个工程项目,在该项目文件夹下建立几个子文件夹存放不同类别的文件: i.将官方模板中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h和空白main.c文件复制到该项目文件夹下; ii. Obj-存放工程文件,将官方模板中的cortexm3_macro.s、lnkarm_flash.xcl、lnkarm_ram.xcl和stm32f10x_vector.c文件复制到该文件夹下。 iii.library-存放STM32 FWLib文件,将官方提供的固件库library复制到该文件夹下。 2. 在IAR中建立工程 打开IAR,在Project菜
[单片机]
IAR在<font color='red'>STM32</font>的配置方法
stm32 C语言的数据类型说明
stm32编程过程经常定义变量类型,经常担心数据运算过程中 超过变量类型范围。因为在编程过程中,不同的CPU,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在计算中可能会出现不确定的错误。所以下面列出常见数据类型: 一、C语言数据类型 stm32使用的数据类型定义在 stm32f4xx.h中 整型定义: #include core_cm4.h /* Cortex-M4 processor and core peripherals */ #include system_stm32f4xx.h #include stdint.h /** @addtogroup Exported
[单片机]
ST与麦吉尔大学携手开设全新多路传感器整合大学课程
横跨多重应用领域、全球领先的半导体制造商及全球第一大消费电子和便携式应用的MEMS(微机电系统)元器件供应商意法半导体 (STMicroelectronics,简称ST;纽约证券交易所代码:STM)与全球知名的加拿大蒙特利尔麦吉尔大学(McGill University)携手宣布,合作开设“如何在嵌入式计算机系统内整合多路先进传感器”的课程。该课程于2011年1月开始授课,目前已有约35名大学生完成此课程。 这个于北美地区首创的全新课程包括实验和最终项目两部分。最终项目让学生能够分析和设计整合多路传感器数据的系统。该课程由麦吉尔大学电气与计算机工程系教授Zeljko Zilic设计,以意法半导体获奖的iNEMO传感器平台
[传感器]
STM32 DMA的特性
STM32的DMA特性: ·每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通多软件来配置。 ·在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如在相等优先权时由硬件决定(请求0优先于请求1,以此类推)。 ·独立的源和目标数据区的传输宽度(字节8、半字16、全字32),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。 ·支持循环的缓冲器管理。 ·每个通道都有3个事件标志(DMA半传输,DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。 ·存储器和存储器间的传输。 ·外设和存储器,存储器和外设的传
[单片机]
<font color='red'>STM32</font> DMA的特性
嵌入式实时操作系统Nucleus PLUS在S3C2410A上移植的实现
引言 Nucleus PLUS是美国ATI 公司为实时性要求较高的嵌入式系统应用设计的操作系统内核。约95%的Nucleus PLUS代码用ANSI C语言编写,因此,非常便于移植并能够支持大多数类型的微处理器,如X86、68K、PowerPC、MIPS、ARM等。经过截减编译后,Nucleus PLUS 核心代码区一般不超过20KB大小。 同时提供TCP/IP网络、图形界面Grafix、文件系统File等模块。还有一个特点就是免费提供源代码,有利于节省开发费用。 S3C2410A是三星公司推出的基于ARM920T内核高性能低功耗16/32位RISC微控制器,内部集成了丰富的系统外围控制器。配合Nucleus PLUS操作系统可
[嵌入式]
基于linux的嵌入式无线可视门铃系统的设计
1、引言   在当前的电子行业中,无线技术已经渗透到方方面面,无论是电视机的遥控设备,还是计算机的外围设备都是如此,有的键盘和鼠标甚至也使用了无线技术。无线网络技术已经成为热门技术。无线网络产品广泛应用于家庭网络、小型办公室、会展中心、体育中心、飞机厂、医院、学校、港口、住宅小区、酒店、宽带接入。它使人们在Internet应用中摆脱了无穷无尽电线电缆的束缚,进入真正的无网不在的Internet自由空间。无线网络技术可望成为新的经济增长点。   近几年来, 随着市场上智能化楼宇的不断升温, 门铃系统已作为智能化办公室和智能化住宅小区的一个重要组成部分,被各商家和用户所接受。人们已开始习惯用门铃系统代替传统的铁钥匙去管理各通道门,
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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