历史上的今天
返回首页

历史上的今天

今天是:2025年07月21日(星期一)

正在发生

2018年07月21日 | STM32_GPIO之按键输入

2018-07-21 来源:eefocus

/* 

名称:STM32_GPIO之按键输入 

说明:这个实验是GPIO的输入功能。基本的思路和51单片机差不多。也是 

操作相应的IO口,不过不同的是对于独立按键输入实验来说,51单片机是 

需要一开始把待检测的IO口设置成高电平,然后检测其何时被拉低。而对 

于STM32来说,其GPIO端口就可以设置成上拉输入,即不需要再人为的把对 

应的对应的IO口设置成高电平,硬件电路会自动把对应端口引脚拉成高电 

平。


还有一点关于条件编译要说的:这个ifndef… #endif 一般用在头文件中。书上说为了防止重复编译。就我目前了解的来看,在实际应用中,如果在两个.c源文件中都include了一个头文件,那么好像加不加这个条件编译都没什么影响(如果没有定义什么特殊的东西的话)。 但是,最好不要在头文件中定义变量(如int i);因为这样的话,如果两个.c源文件的都include了这个头文件,那么就会在链接时(注意是链接不是编译时)发生重复定义的错误。(好像是因为声明可以多次,但定义只能一次。)所以通常的做法是在.c源文件中定义变量,然后在对应的头文件中利用外部声明(即类似于extern int i;) 进行使用。


*/


#include "key.h"


//KEY端口配置

void KEY_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);


    GPIO_InitStructure.GPIO_Pin = ALLKEY;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


    GPIO_Init(KEY_PORT, &GPIO_InitStructure);



}



//声明延时函数

void delay_ms(u16 time);


//检查独立按键

int CheakKey()

{

    uint16_t key = 1;

    int i = 0;

    for(i = 1;i <= 8;++i)

    {


        //软件消抖

        if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)

        {

            delay_ms(10);

            if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)

                return i;

        }


        key = key<<1;       //左移一位

    }


    //if( i > 8)

        return -1;

}


推荐阅读

史海拾趣

FlexiPanel公司的发展小趣事

FlexiPanel深知研发投入是企业持续发展的动力源泉。因此,公司每年都将大量资金用于技术研发和创新项目的实施。通过不断投入研发,FlexiPanel在RF模块领域取得了多项专利和技术突破,推动了整个行业的产业升级和技术进步。同时,公司还积极参与国际技术交流与合作,引进和吸收国际先进技术和理念,为企业的长远发展奠定了坚实的基础。

Echelon公司的发展小趣事

进入21世纪后,Echelon在智能楼宇领域取得了重大突破。公司凭借其先进的LonWorks技术和能源管理服务方案,成功为多个大型楼宇提供了智能化的能源管理解决方案。这些解决方案不仅提高了楼宇的能源利用效率,还降低了运行成本,赢得了客户的广泛赞誉。Echelon在智能楼宇领域的成功,进一步巩固了其在能源管理市场的领先地位。

EDAL公司的发展小趣事

EDAL公司始终秉持持续创新和客户至上的理念。公司不断投入研发资源,推出新的EDA产品和解决方案,满足客户的多样化需求。同时,EDAL公司还建立了完善的客户服务体系,为客户提供全方位的技术支持和解决方案。这些举措不仅增强了客户对EDAL公司的信任和忠诚度,还为公司的长期发展奠定了坚实的基础。

富芯森美(FUXINSEMI)公司的发展小趣事

为了进一步提升公司的竞争力和市场地位,富芯森美积极寻求资本市场的支持。通过上市融资等方式,公司获得了充足的资金支持,为技术研发、市场拓展和产能扩张提供了有力保障。同时,资本市场的关注也进一步提升了富芯森美的品牌价值和市场影响力。在资本市场的助力下,富芯森美实现了快速发展,成为了电子行业中一颗璀璨的明星。

Acutechnology公司的发展小趣事

在市场竞争日益激烈的背景下,Acutechnology公司深知品质是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重品牌建设,通过广告宣传、参加展会等方式提升品牌知名度和美誉度。这些举措有效地提升了公司的市场竞争力,赢得了客户的广泛认可。

昭华(CHA)公司的发展小趣事

昭华(CHA)公司自2007年成立以来,就致力于拨码开关与轻触开关的研发制造。在初创阶段,公司面临着技术挑战、资金短缺以及市场竞争激烈等多重困难。然而,昭华团队凭借着对技术的热情和执着,通过不断的技术创新和产品优化,逐渐在市场上树立了自己的品牌。他们不仅成功研发出多款高性能的开关产品,还积累了丰富的行业经验,为公司的后续发展奠定了坚实的基础。

问答坊 | AI 解惑

ISP上位机软件AVR_fighter

我花了一些时间用 Borland C++Builder 6 制作了一个共享软件 AVR_fighter for USBASP 做为2008年新年礼物,供大家免费使用.欢迎大家测试使用.欢迎回贴交流! 程序中加入了大量AVR芯片,我目前只测试了Atmega8,Atmega16,Attiny13这3种芯片. 支持 ...…

查看全部问答>

16路DS18B20的verilog HDL 代码

16路DS18B20的verilog HDL 代码…

查看全部问答>

quartus 中编译的一个小问题,请各位达人帮看下~~~

程序: module Ser_Par_Conv_32(Data_out,write,Data_in,En,clk,rst); output [31:0] Data_out; output        write; input         Data_in; input       ...…

查看全部问答>

十万火急,无线模块法彩信的问题!

现在我在做毕设,就是要用WAVECOM发彩信 型号:wavecom Q2406 PL 002 在我往串口发送了 AT+CGDCONT=1,\"IP\",\"CMWAP\" ATD*99***1# 之后,服务器给我重复了好多次,发了这样的一段数据:(我用了ACCESSPORT来显示串口收到的16进制数据) ...…

查看全部问答>

请教大师单片机复位的问题

请教几个问题: 1、单片机要完成复位,为什么复位信号必须至少持续2个机器周期啊。 2、复位期间单片机在做什么?主要是这2个机器周期内在做什么。(书上有说,但不具体) 3、单片机上电之后复位之前,单片机在做什么? 谢谢!…

查看全部问答>

请问用两个标准的8051怎样接成一个扩展8051?????

请教各位,怎样把两个标准的8051接成扩展的8051,只用一条线…

查看全部问答>

16550做串口通信,遇到麻烦了

16550做串口通信,如何判断FIFO是否为空? 现在老是读到空数据。用中断法也不大好控制。 (51单片机keil c51)…

查看全部问答>

谁能提供一个vs2005下控制ARM2440的IO或AD的例子呀?

刚开始学WIN CE的菜鸟。想了解VS 2005下如何控制ARM2440的IO或AD。 哪位老大能给个例子,不胜感激。 只有这么多分啦。…

查看全部问答>

有LVDS的例子布板么?

网上能GOOGLE得到的基本都是文字叙说,我想看看大家实际情况是怎么布的板,怎么分的层走线,和各类安排方面的,有这方面的版图让我看看么?…

查看全部问答>