6.4 STM32F107VCT独立按键功能深入剖析(神舟IV号)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.4 独立按键 (2)

6.1.1 按键的分类 (2)

6.1.2 按键属性 (2)

6.1.3 STM32的位带操作 (3)

6.1.4 例程01 STM32芯片按键点灯(无防抖) (8)

6.1.5 例程02 STM32芯片按键点灯-增加了防抖的代码 (12)

6.4 独立按键

6.1.1按键的分类

目前,按键有多种形式。有机械接触式,电容式,轻触式等。

1.按制作工艺分:

硬板按键:带弹簧的按键焊接在印刷电路板上

软板键盘:以导电橡胶作为接触材料放在以聚脂薄膜作为基底的印刷电路上所形成的按键。

2.按工艺原理分:

可以将键盘分为编码键盘和非编码键盘,编码键盘的键盘电路内包含有硬件编码器,当按下某—个键后,键盘电路能直接提供与该键相对应的编码信息,例如ASCII码。非编码键盘的键盘电路中只有较简单的硬件,采用软件来识别按下键的位置,并提供与按下键相对应的中间代码送主机,然后由软件将中间代码转换成相应的字符编码,例如ASCII码;非编码键盘主要靠软件编程来识别的,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式(又称矩阵式)键盘。

6.1.2按键属性

键盘实际上就是一组按键,在单片机外围电路中,通常用到的按键都是机械弹性开关,当开关闭合时,线路导通,开关断开时,线路断开,下图是几种单片机系统常见的按键:

弹性小按键被按下时闭合,松手后自动断开;自锁式按键按下时闭合且会自动锁住,只有再次按下时才弹起断开。

单片机的外围输入控制用小弹性按键较好,单片机检测按键的原理是:单片机的I/O口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一高电平,然后让单片机不断地检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。

从上图可看出,理想波形与实际波形之间是有区别的,为什么呢?因为实际波形在按下和释放的瞬间会有抖动现象出现,这是因为通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短和按键的机械特性有关,一般为5~l0ms。为了不产生这种现象而作的措施就是按键消抖。通常我们手动按下键然后立即释放,这个动作中稳定闭合的时间超过20ms。因此单片机在检测键盘是否按下时都要加上去抖动操作。

消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。按键的消抖,可用硬件或软件两种方法,硬件的去抖主要是用专用的去抖动电路,也有专用的去抖动芯片;另外一种方式就是用软件延时的方法就能很容易解决抖动问题,而没有必要再添加多余的硬件电路。所以软件消抖适合按键比较多的情况,而硬件消抖适合按键比较少的情况。

如果按键较多,就用软件方法去抖,即检测出键闭合后执行一个延时程序,5ms~10ms 的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序,这样就靠软件模拟整个按键的过程,控制只取最稳定的那个按键状态。

实现方法:一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。假设检测到按键按下之后,为了避免检测到很多的抖动,可以先延时5ms~10ms,再次检测,如果按键还被检测按下,那么就认为有一次按键输入(因为如果不避开抖动的话,会有很多次按键输入信号出现,通过去抖,模拟人的按下的过程和时间,按下和松开按键实际也占用了20ms以上的时间,记录正确的按键次数。

6.1.3STM32的位带操作

1.什么是位带操作

还记得51单片机吗?单片机51中也有位的操作,以一位(BIT)为数据对象的操作;例如51单片机可以简单的将P1端口的第2位独立操作,P1.2=0或者P1.2=1,就是这样把

P1口的第三个脚(bit2)置0(输出低电平)或者置1(输出高电平)。

而现在STM32的位段、位带别名区这些就是为了实现这样的功能,可以在SRAM、I/O 外设空间实现对这些区域的某一位的单独直接操作。

2.为什么要用位带操作?

那么51单片机中间不是有位的操作吗,而STM32为什么要提出位带的操作呢?首先,这里不得不提一个事情就是STM32的内部区域访问只能是32位的字,不能是字节或者半字,这部分STM32在神舟开发板手册的GPIO章节中提到过;而51单片机里一个bit(一个字节等于8个bit,一个字是32个bit)。这个是STM32的特点决定的,所以STM32使用一种新型的方式来解决这个问题,设计一个办法来解决用一次访问32bit的这样的操作达到51单片机那种只访问一个bit的效果。

3.如何设计和实现位带操作的?

从编程者这个角度来说,我们操作的对象是一个一个的bit位,而对于STM32来说,它内内部只能是32位bit每次的访问。如果要实现这个技术,必须要做一个映射,也就是从1个bit映射到32个bit,就是用STM32内部的一次访问(32个bit)来代表编程者认为的1个bit。

那STM32内部是如何解决的呢?它是在支持位带操作的地方,取个别名区空间,而这个别名区空间可以让一次32位来进行访问,对这个别名进行操作就相当于对SRAM或者I/O 存储空间中的位(1个寄存器里的位就是1个bit,1个bit最后对应别名区空间的32个位,因为STM32芯片内部只能是32位去访问)进行操作。

这样呢,1MB SRAM就可以32M个对应别名区空间,就是1位膨胀到32位(1bit 变为1个字);我们对这个别名区空间开始的某一字操作,置0或置1,就等于它映射的SRAM 或I/O相应的某地址的某一位的操作。

4.STM32中位带操作的具体部署情况是

支持位带操作的两个内存区的范围是:

序号支持位带操作的两个内存区的范围对应的别名区空间范围

1 SRAM区中的最低1MB:

0x2000_0000-0x200F_FFFF SRAM所对应的别名区32MB空间:0x2200_0000-0x23FF_FFFF

2 片上外设区中的最低1MB:

0x4000_0000-0x400F_FFFF 片上外社区所对应的别名区32MB空间:0x4200_0000-0x43FF_FFFF

下面是内部空间映射图:

相关文档
最新文档