历史上的今天
返回首页

历史上的今天

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

正在发生

2018年07月21日 | STM32(二)之GPIO操作(2)——通过按键控制LED灯的开关

2018-07-21 来源:eefocus

      STM32是一款低功耗的芯片,所以其外设均有一个与之对应的时钟,而在芯片刚上电的时候这些时钟是被关闭的,所以如果想要外设工作,便必须将与之对应的时钟打开。

      本文介绍如何基于GPIO来通过按键控制LEN灯的开关。

     (1)按键的控制


      上图所示为按键的电路,在按键未被按下的时候,KEY2的输出信号为低电平(按键所在的电路不通,其与地相连);在按键按下时,KEY2的输出状态为高电平(按键所在的电路导通,其与3.3V的电源相连)。因此,通过对引脚的电平进行检测便可以判断按键是否按下。

       按键的机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳点接通或断开,其会产生如下图所示的带波纹信号,需要使用软件消抖处理滤波,不方便输入检测。此外,硬件也可实现消抖功能,如上图所示,硬件的消抖功能便是通过C61的充放电实现延时从而消除了波纹,从而简化的软件的处理,使软件只需检测引脚的电平便可。

      

      如上文所说,首先是开启GPIO的时钟,使其外设可工作。本文使用STM32的库函数来编写代码:



//启动按键端口(端口A)的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

//定义一个结构体,用于配置PA0管脚的设置

GPIO_InitTypeDef GPIO_InitStructure;

//将结构体的引脚设为 0

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

//将结构体的模式设为浮空输入

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

//将结构体设为A端口,即将PA0管脚设为浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);



      上述代码便是先填好GPIO的结构体,再通过函数GPIO_Init()往对应的GPIO寄存器写入参数,完成GPIO的初始化。

      然后便是检测按键的状态,其代码如下:

//检测按键是否按下

if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == KEY_ON) {

//检测按键是否已经放开

      while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == KEY_ON);

//后续为按键后的代码处理         

............................................

}

(二)GPIO输出

       与GPIO输入类似,GPIO输出的代码如下:


//定义一个GPIO_InitTypeDef类型的结构体

GPIO_InitTyopeDef GPIO_InitStructure;

//开启GPIO相关的外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

//选择要控制的GPIO引脚

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

//设置GPIO引脚的输出模式为推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

//设置引脚速率为50MHZ

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHZ;

//调用库函数初始化GPIO

GPIO_Init(GPIOB, &GPIO_InitStructure);


      在使用上述代码设置后,便可以在主函数中对LED灯进行控制。

      将GPIOB->BSRR置1从而输出高电平来点亮LED灯,而通过GPIOB->BRR置1来输出低电平从而将LED熄灭。


推荐阅读

史海拾趣

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

在激烈的市场竞争中,品牌建设和形象提升对于企业的发展至关重要。Comclok Inc深知品牌建设的重要性,从产品设计、生产到销售服务,都注重塑造公司的品牌形象。公司注重产品的品质和用户体验,不断提升产品的性能和稳定性。同时,Comclok Inc还积极参加各类行业展会和交流活动,展示公司的技术实力和产品优势,提升了公司在行业内的知名度和影响力。

Engineered Components Co公司的发展小趣事

在追求经济效益的同时,ECC也注重可持续发展和环保责任。他们积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。ECC还投入资金建设了废水处理设施和废气处理设备,确保生产过程中的废弃物得到有效处理。此外,ECC还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了ECC的社会责任感,也为公司的长期发展奠定了坚实的基础。

ETA Electric Industry Co Ltd公司的发展小趣事

近年来,ETA Electric Industry Co Ltd积极响应全球环保倡议,致力于实现可持续发展。他们优化了生产流程,减少了废弃物和污染物的排放。同时,公司还加大了对环保型电子元器件的研发力度,推出了一系列节能、环保的新产品。这些举措不仅提升了公司的社会形象,也为其在激烈的市场竞争中增添了新的优势。

上述五个故事,讲述了ETA Electric Industry Co Ltd在电子行业的发展历程。从起步之初的艰难,到技术创新的突破,再到市场拓展和质量管理的成功,最后到对环保和可持续发展的追求,每一步都体现了公司的成长和进步。

Corning Cable Systems公司的发展小趣事

随着全球通信市场的不断扩大,Corning Cable Systems公司积极调整生产战略,不断扩大生产规模。公司在全球范围内建立了多个生产基地,并引进了先进的生产设备和技术,以确保能够及时满足市场对光纤产品的需求。同时,公司还注重提高生产效率和质量,为客户提供了更加优质的产品和服务。

Acmelux Taiwan Inc公司的发展小趣事

在追求经济效益的同时,Acmelux Taiwan Inc公司也积极履行社会责任,致力于实现可持续发展。公司不仅关注环保和节能减排,还积极参与公益事业,为社会做出贡献。通过实施绿色生产、推广环保产品等措施,Acmelux不仅降低了生产成本,还提升了企业的社会形象。同时,公司还注重与社会的和谐发展,通过捐资助学、扶贫济困等方式,回馈社会,实现了经济效益与社会效益的双赢。


这些故事都是基于一般企业发展规律和可能的实践而编写的,与Acmelux Taiwan Inc公司的实际情况可能存在差异。如果您需要更具体的信息,建议直接查阅该公司的官方网站、新闻报道或相关研究报告。

Astema公司的发展小趣事

Astema公司自创立之初,就专注于研发创新的电子技术。公司投入大量资源于研发部门,不断推出具有竞争力的新产品。其中,一款具有高效能、低功耗特点的芯片产品,在市场上获得了巨大成功,为公司带来了可观的收入。这一成功促使Astema在行业内建立了良好的声誉,吸引了更多的客户和合作伙伴。

问答坊 | AI 解惑

有毒气体报警器毕业设计

有没有全套的啊,原理图也行,求各位高手帮忙,小弟快急死了…

查看全部问答>

LM3S8962学习心得

1. 学习LM3S8962只要有51单片机基础就可以学习.它使用Keill编译.     下载可以用多种方法下载.并且是接用keil软件下载,并不要安装其它软件,操作方法,快捷.而且还可以用keil在线认真调试,    非常不错的功能.   下 ...…

查看全部问答>

WINCE6 使用 TFAT的问题?

原来用FAT系统在掉电或RESET情况下,存在数据丢失,文件系统被破坏的问题。 现在准备升级使用TFAT,另外CE6中增加了EXFAT File System,准备使用TFAT+EXFAT的方式。 有没有用过的兄弟知道这样使用需要如何设置,是不是在Storage Manager下选择了 ...…

查看全部问答>

PlaySound()与WaveOutWrite()有什么区别?

PlaySound()与WaveOutWrite()有什么区别? PlaySound()是否是WaveOutWrite()的上层函数?也就是事实上PlaySound也是调用了WaveOutWrite()? 那么,到底是用哪个层次的函数来播放声音好呢? 另外,PlaySound()的第一个参数可以使文件的路径名也可 ...…

查看全部问答>

Linux命令组合

Linux命令实在是强大,简单的命令通过不同的组合可以实现很强大的功能,利用这些命令编写的脚本程序有时要比用c语言去实现简单的多,在看脚本的时候遇见了两条组合语句,感觉很怪,以前没见过,大家帮看一下:ps aux|grep $PROGRAM |grep -v grep|w ...…

查看全部问答>

关于M3不同系列CAN的设置问题

用的IAR软件。2000(fury)的CAN程序拿到5791(tempest)中就有问题了。IO加了GPIOpinConfig函数。发是能发(抓到报文了),但是进不去中断。是IAR软件的设置还是程序中应该注意什么?中断程序中可以设置断点,但进不去,2000可以进去。icf文件改了 ...…

查看全部问答>

█ █ █富人和穷人的十二个致命差异█ █ █

1.自我认知     穷人:很少想到如何去赚钱和如何才能赚到钱,认为自己一辈子就该这样,不相信会有什么改变。富人:骨子里就深信自己生下来不是要做穷人,而是要做富人,他有强烈的赚钱意识,这已是他血液里的东西,他会想尽一切办 ...…

查看全部问答>

TIVA WARE库 bug

今天弄了一天的GPIO复用功能。。。书上说要配置GPIOPCTL寄存器。我翻了好久发现只要库函数中的void GPIOPinConfigure(uint32_t ui32PinConfig) 这个函数涉及到了这个寄存器。。。。。。可是,可是,可是!!!!!!这个函数的参数该写什么啊?? ...…

查看全部问答>

怎么通过蓝牙下载程序

能通过蓝牙下载程序吧.怎么下 …

查看全部问答>