历史上的今天
返回首页

历史上的今天

今天是: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熄灭。


推荐阅读

史海拾趣

FerriShield公司的发展小趣事

FerriShield公司起源于一家小型电子材料研究实验室。创始人Dr. Smith是一位材料科学家,他发现了一种新型的铁磁屏蔽材料,能够有效减少电子设备中的电磁干扰。这一发现引起了业界的广泛关注。Dr. Smith决定将其商业化,并创立了FerriShield公司。凭借这种创新材料,FerriShield在成立初期就获得了多项专利,并成功吸引了第一轮风险投资。

台湾兆欣(EMTEK)公司的发展小趣事

在立足台湾市场的同时,兆欣也积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,成功将产品打入国际市场。特别是在亚洲地区,兆欣的产品受到了广泛欢迎和认可。这种多元化的市场布局为公司的快速发展提供了有力支持。

AMI Semiconductor公司的发展小趣事

随着电子产品的不断小型化和集成化,兆欣面临着越来越大的技术挑战。然而,他们并没有退缩,反而加大了研发投入。经过无数次试验和改进,兆欣成功开发出全自动薄型功率电感,这一产品在市场上引起了广泛关注。同时,他们还针对USB3.0的市场趋势,预计导入相关对应产品,为公司的未来发展奠定了坚实基础。

Electro Technik Industries公司的发展小趣事

作为一家具有社会责任感的企业,ETI始终关注环保问题。公司积极推广绿色生产理念,采用环保材料和工艺进行生产。同时,ETI还投入大量资金用于环保设施的建设和运营,减少了对环境的污染。此外,ETI还积极参与社会公益活动,为环保事业贡献自己的力量。这些举措使ETI在业界树立了良好的形象,赢得了社会各界的广泛赞誉。

EMBEST公司的发展小趣事

在XXXX年12月,EMBEST成为了Microsoft银牌合作伙伴。这一荣誉的获得标志着EMBEST在软件开发和服务方面得到了业界的广泛认可。作为Microsoft银牌合作伙伴,EMBEST将能够更好地利用Microsoft的技术和资源,为客户提供更优质的服务和解决方案。

ACCUTEK公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,ACCUTEK公司开始将目光投向国际市场。公司积极参加国际电子展会和技术交流活动,与全球多家知名企业建立了合作关系。同时,公司还在海外设立了多个分支机构,以便更好地服务当地客户。这些举措不仅提升了公司的国际影响力,也为公司的长远发展注入了新的活力。

问答坊 | AI 解惑

ucos入门知识!

[local]1[/local]uCOS-II中文手册…

查看全部问答>

帮忙关于LCD12864

我的这块就是KS0108控制器不带汉字库的 datasheet :http://www.datasheetarchive.com/pdf-datasheets/Datasheets-312/166945.pdf 可不可以提供显示图形的程序.具体电路图…

查看全部问答>

无线通信芯片nRF903

本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 无线通信芯片nRF903与89C51的接口设计  …

查看全部问答>

过滤空气的环保手表

这是个外形前卫的手表除了能显示时间之外还有更新鲜的功能,那就是过滤空气。现在全球变暖的问题日益严重,而人类呼出的二氧化碳就是一种主要的温室气体。这款手表的设计师企图从源头消灭掉人类呼出的二氧化碳,所以在手表中加入了小型的空气过滤装 ...…

查看全部问答>

关于wince手写识别的几个问题

麻烦各位了,小弟新手,有几个问题在这里求教: 1.wince自带手写识别软件不能识别简体,请问怎样做才能让它识别简体? 2.如果要编写一个自己的识别软件,难度大吗?编写的大概步骤是什么?(希望能  比帮助文档具体一点)恳请赐告!谢谢 …

查看全部问答>

关于SCSIOP_READ命令的一些疑问.

在我对U盘做过滤的时候,得到当我在访问U盘的时候, 用到的是SCSIOP_READ命令,也就是说我是通过他来 访问U盘的,但是我U盘是通过什么方式或者说是哪个 命令把我要访问的内容返回给我的呀.??? 请大家给解释一下.^_^…

查看全部问答>

中九复活

中九如何复活,短接bl,vcc无效…

查看全部问答>

【设计工具】大话FPGA

一直以来都想写点什么,关于 FPGA 设计,因为有点不太服气。为什么同样是设计,有些人可以好像玩一样的摆弄,photoshop,很时尚,很跩。有些人可以用所谓的广告创意玩弄人们的智商。而硬件工程师则一律的被人以为呆板没有创意。我是说,为什么我们 ...…

查看全部问答>

锂电池——三菱的PHEV事故

转 三菱的电池问题,算是告一段落了,在这里总结一下这次的事情。 1.事件的开端 Mitsubishi reports fire in i-MiEV battery pack, melting in Outlander PHEV pack     Mitsubishi Motors reported two separate incidents with ...…

查看全部问答>