历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2019年09月11日 | STM32学习---GPIO和按键(流水灯学习)

2019-09-11 来源:eefocus

//main的完整过程:

int main(void){

 

LED_GPIO_CONFIG(); //定义LED灯;

KEY_GPIO_CONFIG(); //定义按键;

 

//循环判断按键的过程:

while(1){

if((KEY_SCANF(GPIOC,GPIO_Pin_5)==0)){ //确定按键完全按下

if(GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)==0) //当灯都亮起时,GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)读到输出数据;

      GPIO_SetBits(GPIOD,GPIO_Pin_2); //置位,灯灭;

else

GPIO_ResetBits(GPIOD,GPIO_Pin_2); //复位,灯亮

}

}

}

//关于KEY的操作;

 //实现操作:(初始时灯亮)按一下按键后灯灭,再按一下灯亮;

 

 先按之前的代码点亮一个LED灯;

 GPIO_InitTypeDef GPIO_D;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

 

GPIO_D.GPIO_Pin=GPIO_Pin_2;

GPIO_D.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_D.GPIO_Speed=3;

GPIO_Init(GPIOD,&GPIO_D);

 

//然后定义按键;

void KEY_GPIO_CONFIG(void)

{

GPIO_InitTypeDef GPIO_C;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

    GPIO_C.GPIO_Pin=GPIO_Pin_5;

GPIO_C.GPIO_Mode=GPIO_Mode_IPU;

GPIO_C.GPIO_Speed=1;

GPIO_Init(GPIOC,&GPIO_C);

}

//定义按键和定义LED灯的过程差不多,主要区别在于Mode的配置上;

/*

4种输入模式 :

GPIO_Mode_IPD(下拉输入模式):在默认情况下(GPIO引脚无输入的情况下),读取得GPIO的引脚数据为1;

GPIO_Mode_IPU(上拉输入模式):在默认情况下(GPIO引脚无输入的情况下),读取得GPIO的引脚数据为0;

GPIO_Mode_IN_FLOATING(浮空输入模式):在芯片内部既没有上拉也没有下拉,经由触发器输入。由于其阻抗较大,所以一般把这种模式用于标准的通信协议如I2C,USART的接收端。

GPIO_Mode_AIN(模拟输入模式):关闭施密特触发器,不接入上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送到ADC模块,由ADC模块采集电压信号。所以使用ADC外设的时候,必须设置为模拟输入模式。

4种输出模式:

GPIO_Mode_Out_PP(普通推挽输出):一般用于输出电平为0和3.3V的场合。

GPIO_Mode_Out_OD(普通开漏输出):一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部接一个上拉电阻,电源为5V,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V的电平。

GPIO_Mode_AF_PP(复用推挽输出):

GPIO_Mode_AF_OD(复用开漏输出):

*/

//根据原理图:当KEY没有按下时为高电平,按下时为低电平,根据上述模式的介绍,可以选择上拉输入模式(GPIO_Mode_IPU)

 

//定义一个扫描KEY输入的函数:

u8 KEY_SCANF(GPIO_TypeDef* a,u16 PIN)

{

if(GPIO_ReadInputDataBit(a,PIN)==0){

Delay(10000); //按键消抖

if(GPIO_ReadInputDataBit(a,PIN)==0){

while(GPIO_ReadInputDataBit(a,PIN)==0);//

return 0;

}

else{

return 1;

}

}

else

return 1;

}

//逐句分析:

if(GPIO_ReadInputDataBit(a,PIN)==0):

//新的库函数:GPIO_ReadInputDataBit(a,PIN),读取输入的数据,可用输入电平高低判断。

//根据调用函数:KEY_SCANF(GPIOC,GPIO_Pin_5) 可知,判断的是KEY是否有输入;

//当没有按下KEY时,应输入模式确定为上拉输入模式,所以默认为高电平。然后,若有按下KEY,则输入变为低电平。

//第二个

if(GPIO_ReadInputDataBit(a,PIN)==0) //是确认确实有按键按下,而不是按下一半返回。

while(GPIO_ReadInputDataBit(a,PIN)==0);//不停的检测按键的电平,直至按键被释放,被释放后,按键的电平又恢复到默认的高电平。

//实际上这一整个过程都是按键扫描、消抖。


推荐阅读

史海拾趣

ANYSOLAR LTD.公司的发展小趣事

随着ANYSOLAR的产品在市场上取得一定的成功,公司开始考虑市场拓展。李明带领团队深入调研国内外市场需求,发现欧洲市场对高效、环保的光伏材料有着巨大的需求。于是,ANYSOLAR开始积极寻求与国际企业的合作机会。

经过多次洽谈和协商,ANYSOLAR最终与一家欧洲知名光伏企业达成了战略合作协议。双方共同投资建立生产线,共同开拓市场。这一合作不仅为ANYSOLAR带来了稳定的订单和资金支持,也提升了公司的品牌知名度和国际影响力。

Bud Industries公司的发展小趣事

FCI Connector的前身可以追溯到1937年成立的费城绝缘体公司(Philadelphia Insulation Company)。这家公司最初专注于电子零件的制造和销售。随着时间的推移,公司在1976年被德州仪器(Texas Instruments)收购,并更名为TI Electronic Components(TIEC)。然而,TIEC在1981年做出了一个重大的战略决策:将连接器业务剥离出来,成立了FCI Connector公司。这一决策让FCI能够更专注于电子连接器的研发、生产和销售,为其后续的快速发展奠定了基础。

ERNI公司的发展小趣事

20世纪70年代,ERNI开始实施全球化战略。他们意识到,只有不断扩大市场份额,才能确保公司的长期稳定发展。因此,ERNI开始在欧洲、北美和亚洲等地设立销售处和生产基地,为全球客户提供创新且高品质的产品。这一战略的实施,不仅使ERNI的销售额大幅增长,还进一步巩固了其在全球连接器市场的领先地位。

Handok Co Ltd公司的发展小趣事

1947年,瑞士工程师Ernst Rudolf Erni和他的妻子Elsa在瑞士那提空(Nänikon)共同创立了“ERNI & CO.”公司。他们的首个订单是为苏黎世克洛腾机场开发地雷探测器和机场导航灯。这个起点虽小,但为ERNI日后在电子行业的辉煌奠定了基础。随着订单的增多,公司逐渐扩大了生产规模,并开始涉足继电器、电气设备等领域。

胜利(VICTOR)公司的发展小趣事

胜利公司深知品牌文化对于提升品牌价值的重要性。因此,公司积极开展文化营销活动,如举办羽毛球文化节、赞助羽毛球赛事等。通过这些活动,公司不仅与消费者建立了深厚的情感联系,还提升了品牌的知名度和美誉度。

以上故事均基于虚构,旨在展示一个品牌成长的可能路径和方式。如有需要,请结合实际情况进行调整和修改。

广东爱晟电子(exsense)公司的发展小趣事

2020年新冠疫情期间,爱晟电子积极响应政府号召,全力支持抗疫工作。公司不仅向抗疫一线捐赠了防疫物资,还组织员工参与志愿服务。同时,公司还利用自身的技术优势,研发出适用于医疗设备的NTC热敏电阻,为抗击疫情提供了有力支持。这些行动彰显了爱晟电子的社会责任感和担当精神。

问答坊 | AI 解惑

恩智浦微控制器LPC2478 ARM7应用讨论

恩智浦微控制器LPC2478和LPC2470支持需高速通信的LCD应用 恩智浦半导体发布其全新的LPC2478微控制器,这是业界唯一的提供集成的LCD支持的基于闪存的ARM7 MCU。同时推出的LPC2470是其无闪存版本。全新的微控制器配有双路ARM高速总线,可实现多种高带 ...…

查看全部问答>

Crest Factor Reduction for OFDMA Systems

Introduction Crest factor reduction (CFR) is a technique for reducing the peak-to-average ratio (PAR) of an orthogonal frequency division multiplexing (OFDM) waveform. An OFDM signal is made up in the frequency domain as a set o ...…

查看全部问答>

锂电池成为真命天子要过5道坎!

目前混合动力汽车主要采用镍氢电池技术,但镍氢电池的一些技 术性能如能量密度、充放电速度等已经接近理论极限值。而锂电池具有能量密度高、容量大、无记忆性等优点,得到汽车厂商和电池厂商的一致认可,目前各国研发 的重点正是锂离子电池。 &n ...…

查看全部问答>

pxa270 ce5.0电源管理源码谁有,能给一份来参考下吗?

       目前我正在做pxa270平台,windows ce5.0系统,现在就只是简单的休眠啊,挂起啊之类的,有谁实现稍微复杂点的功能啊,如系统空闲的情况下降低CPU的频率,电压等。有的吗?100分送上…

查看全部问答>

如何打开ARM实时时钟计数器

请问ARM9中如何打开实时时钟计数器,我初始化了TICNT了,但是如何让他运行起来 我初始化过程 rRTCOON=0x0; rTICNT=(127&0x7f)|0x80; TICNT寄存器不会走,要如何让他走起来…

查看全部问答>

在哪能买到室外被动红外探测器的防爆罩?红外在加油站工作有危险吗?

大家都知道,加油站是禁止打手机的,那么红外是否也会引起同样的危险呢? 谢谢!…

查看全部问答>

通过以太网bootloader下载程序的方法

     很多芯片出厂的时候在开始地址处放有bootloader。比如在0x0~0x1000处。只不过经过我们烧写一次之后,就把这个位置的bootloader给擦掉了。 先简单说下步骤,然后再说程序该怎么改: 1.先下载以太网的bootloader到0x0处, ...…

查看全部问答>

请教Modbus高手makesoft:实现Modbus协议一定需要超时检测吗?

首先声明,我对Modbus不熟悉,尤其是如何实现它,最近才从网上下载了协议研究了一下,特此向高手请教。搞清楚这些问题,才能有效地在芯片中实现相应的功能,满足大家的需要。此帖的目的是继续另一帖的讨论:建议STM32的芯片加上串口超时功能, ...…

查看全部问答>

launchpad欢乐学习季

MSP挑战级(高级)78分,有没有机会获得铁电开发板呢? …

查看全部问答>