按键实验stm32神舟王103zet开发板_第1页
按键实验stm32神舟王103zet开发板_第2页
按键实验stm32神舟王103zet开发板_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章按键实 按键实 按键检测的实现原 什么是按键抖 消除按键抖动的办 STM32GPIO输入模式实现方 STM32GPIO输出模式实现方 怎么选择GPIO管脚模式实现按键功 例程01按键控 例程02按键控制全功能 第1键实按键实验按键检测的实现原理单片机检测按键的原理是:单片机的I/O口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一高电平,然后让单片机不断地检测该O口是否变为低电平,当按键闭合肘,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后什么是按键抖动按键是机械器件,按下或者松开时有固定的机械抖动什么是机械抖动?通常的按键开关为机械弹性开关,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖5ms~10ms按键的连接方法和按键在被按下时其触点电压变化过这个抖动时间虽然很短,不同按键抖动不同,但对应单片机来说,很轻松就能检测到,单片机的运行的速度是微秒us级别。用示波器一个小的按钮开关在闭合时的抖动现象,得到如下图的波形观察波形可以帮助我们对抖动现象有一个直观的了解。水平 2ms/Div,抖动间隙大约10ms,在达到稳定状态前一共有6次变化,频率随时间升高。消除按键抖动的办法消除抖动分为软件去抖和硬件去抖两种办法,接下来我们详细分析一下硬件去抖最简单的就是按键两端并联电容,容量根据实验而定。当然也有的去抖动软件去抖使用方便不增加硬件成本,容易调试,所以现在大都使用软件去抖。软件去抖的实现步骤如下:检测到按键按下后进行5~10ms延时,用于跳过这个抖动区延时后再检测按键状态,如果没有按下表明是抖动或者干扰造成,如果仍旧按下,可以认为真正的按下。并进行对应的操作 GPIO输入模式实现方式在初始化GPIO的时候,根据我们的使用要求,必须把GPIO设置为相应的模式。如LED例程 引脚如果配置为模拟输入模式是必然会导致错结构图的上半部分为输入模式结构。图的最右端为I/O脚,左端的器件位于。I/O脚并联了两个用于保护的二极管。本图从ST提供的参考手册截取。接下来就遇到了两个开关和电阻,与VDD相连的为上拉电阻,与VSS相连的为下拉电阻。再连接到触发器就把电压信号转化为0、1的数字信号在输入数据寄存器(IDR)。我们可以通过设置配置寄存器(CRL、CRH),控制这两个开关,于是就可以得到GPIO的上拉输入(GPIO_Mode_IPU)和下拉输入模式(GPIO_Mode_IPD)了。从它的结构我们就可以理解,若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),得的GPIO引脚数据为1,高电平。而下拉模式则相反,在默认状态下其引脚数据为0,低而STM32的浮空输入模式(GPIO_Mode_IN_FLOATING)在既没有接上拉,也没有接下拉电阻,经由触发器输入。配置成这个模式直接用电压表测量其引脚电压为1点几伏,这是个不确定值。由于其输入阻抗较大,一般把这种模式用于标准的通讯协议如I2C、USART的接收端。模拟输入模式(GPIO_Mode_AIN)则关闭了触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送至给ADC模块,由ADC电压信号。所以使用ADC外设的时候,必 GPIO输出模式实现方式结构图的下半部分为输出模式结构线路经过一个由-MOS和N-MOS管组成的单元电路。而所谓推挽输出模式,则是根据其工作方式来命名的。在输出高电平时,-MOS导通,低电平时,N-MOS管导通。两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的供电平为0伏,高电平为33伏。在开漏输出模式时,如果我们控制输出为0N-MOS输出为1(无法直接输出高电平),则既不输出高电平,也不输出低电平,为高阻态。为正常使用时必须在外部接上一个上拉电阻“线与”特性,即很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0伏。STM32的GPIO输出模式就分为普通推挽输出(GPIO_Mode_Out_PP)、普通开漏输出(GPIO_Mode_Out_OD)及复用推挽输出 )、复用开漏输出 )普通推挽输出模式一般应用在输出电平为0和3.3伏的场合。而普通开漏输出一般应用在电平不匹配的场合,如需要输出5伏的高电平,就需要在外部接一个上拉电阻,电源为5伏,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5伏的电平。对于相应的复用模式,则是根据GPIO的复用功能来选择的,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。其它不同的复用场合的复用模式引脚配置将在具体的例子中讲解。在使用任何一种开漏模式,都需要接上拉电阻怎么选择GPIO管脚模式实现按键功能的GPIO引脚如果配置为模拟输入模式是必然会导致错误的。我们配合GPIO结构图,来看看GPIO的8种模式及其应用场合图的最右端为I/O引脚,左端的器件位于。I/O引脚并联了两个用于保护的二极管。本图四种输入模式结构图的上半部分为输入模式结构接下来就遇到了两个开关和电阻,与VDD相连的为上拉电阻,与VSS相连的为下拉电阻。再连接到触发器就把电压信号转化为0、1的数字信号在输入数据寄存器(IDR)。我们可以通过设置配置寄存器(CRL、CRH),控制这两个开关,于是就可以得到GPIO的上拉输入(GPIO_Mode_IPU)和下拉输入模式(GPIO_Mode_IPD)了。从它的结构我们就可以理解,若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),得的GPIO引脚数据为1,高电平。而下拉模式则相反,在默认状态下其引脚数据为0,低而STM32的浮空输入模式(GPIO_Mode_IN_FLOATING)在既没有接上拉,也没有接下拉电阻,经由触发器输入。配置成这个模式直接用电压表测量其引脚电压为1点几伏,这是个不确定值。由于其输入阻抗较大,一般把这种模式用于标准的通讯协议如I2C、USART的接收端。模拟输入模式(GPIO_Mode_AIN)则关闭了触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送至给ADC模块,由ADC电压信号。所以使用ADC外设的时候,必四种输出模式结构图的下半部分为输出模式结构线路经过一个由-MOS和N-MOS管组成的单元电路。而所谓推挽输出模式,则是根据其工作方式来命名的。在输出高电平时,-MOS导通,低电平时,N-MOS管导通。两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的供电平为0伏,高电平为33伏。1无法直接输出高电平),则既不输出高电平,也不输出低电平,为高阻态。为正常使用时必漏模式脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0伏。STM32GPIO输出模式就分为普通推挽出(GPIO_Mode_Out_PP)、普通开漏(GPIO_Mode_Out_OD)及复用推挽输出 )、复用开漏输出 )普通推挽输出模式一般应用在输出电平为0和3.3伏的场合。而普通开漏输出一般应用在电平不匹配的场合,如需要输出5伏的高电平,就需要在外部接一个上拉电阻,电源为5伏,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5伏的电平。对于相应的复用模式,则是根据GPIO的复用功能来选择的,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。其它不同的复用场合的复用模式引脚配置将在具体的例子中讲解。在使用任何一种开漏模式,都需要接上拉电阻按键实验分析了解了GPIO的8种工作模式之后,立即进行一下小测。如果采用以下的电路,我们的按键GPIO端口应该如何进行配置?有两个方案可以选择,一是采用上拉输入模式,因为按键在没按下的时候,是默认为高电平的,采且上拉模式正好符合这个要求。第二个方案是直接采用浮空输入模式,因为按照这个硬件电路图,在外部接了上拉电阻,其实就没必要再配置成上拉输入模式了,因为在外部上拉与上拉效果都是一样的。本实验中,按键都配置为浮空输入模式。STM32神舟王103ZET开发板按键硬件原理图STM32神舟王103ZET开发板总共有4WAKEUP按键和TAMPER按键及两个用于自定义功能按键,在不使用第二功能的情况下,这四个按键都可以作为通用的按键,由用户自定义其功能。这四个按键分别与PC3A1PC13和A0四个GPIOGPIO管脚为低电之,当没有按键按下时,对的GPIO管脚为高电平。其中A0(STM32的WKUP引脚)可以作为AKEUP功能,它除了可以用作普通输入按键外,还可以用作STM32的唤醒输入。PC13可以实现备份区寄存器的功能。本实验中所有的按键均作为普通IO使用例程012PC3PA1配置成输入,让按键对其控制,按键按下会使得管脚拉低到GND,并且有去按键抖动的操作;当检测到按键按下,程序通过控制LED亮灭来表现出按键被按下的动作,达到按LED灯的目的。KEY1KEY2LED亮灭,其KEY1DS4灯亮灭,KEY2DS2DS3两个灯的亮灭。 #include"key.h"#include"ledh"intmain(void){u8 //延时函数初始 //初始化与LED连接的硬件接 //初始化与按键连接的硬件接 { {caseKEY0_OK:caseKEY1_OK:}}} }代码分析1:引入新的文件:key.c和key.h。我们分析一下key.c文件的内容,主要引入了()函数 KEY_Scan()函数,一个负责对按键初始化,一个对按键扫描代码分析2:在KEY_Scan()函数中,通过延时100毫秒来去除按键抖动,然后判断是哪个按键按下,按下的按键值return回去。u8{{delay_ms(100);//去按键抖动,详细请看STM32神舟开发板用户手else}}代码分析3:扫描到哪个按键,用变量K来表示,然后通过switch语句来匹配对应按键应该产生的操作,如果是KEY0_OK按键,则对LED亮灭取反;如果是KEY1_OK按键被按下,则对LED1和LED2两个点的按键如果始终不停的按下,那么灯会不停的亮灭,所以该全功能版本实现每次按键按下,无论按下多长时间,LED灯都只亮灭一次。代码,并且按下【复位】键,按下按键KEY1和KEY2两个按键,可以使得LED亮灭,其中KEY1按键控制DS4灯亮灭,KEY2按键控制DS2和DS3两个灯的亮灭。无论按多长时间,LED大部分代码都与上个例子相同,唯一不同的地方是对KEY_Scan()函数增加了一个mode变量 u8KEY_Scan(u8mode){ //key_modemode1key_mode1,那么按键key_mode={ //key_mode=0表示按键还是按下的状delay_ms(10);//去按键抖动,详细请看STM32神舟开发板用户手return //KEY0_OK在宏定义=1,表KEY0按else;//}return0;//} }代码分析1:if(key_mode&&(KEY0=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论