按键的输入其实就是对GPIO口进行操作。同时引入了中断的概念。实际上按键控制分为两种情况,第一种是按键扫描,这种情况下,CPU需要不停的工作,来判断GPIO口是否被拉低或者置高,效率是比较低的。另一种方式为中断控制,中断控制的效率很高,一旦系统IO口出现上升沿或者下降沿电平就会触发执行中断内的程序。
相信按键是所有接触过MCU的朋友都知道的,其基本原理我就不啰嗦了,这一节的教程主要针对了实验四和实验三。
下面我就来分别介绍下STM32F051的按键控制方式。
首先来学习下按键扫描方式:
硬件准备:
在青风stm32f051开发板上设置了2个用户按键如下图所示:
Key1和Key2分别和PF6和PF7两个IO管脚相连。这里设置了按键管脚加了3.3V的上拉,可以提高驱动能力。当IO管脚为低的时候可以判断管脚已经按下。通过key的按下来控制led的亮灭。
软件准备:
在代码文件中,实验三建立了一个演示历程,我们打开看看需要那些库文件。打开user文件夹中的key工程:
如上图所示:按照上面的方式添加好相应的函数,其中led.c和key.c是用户自己所编写的驱动子文件,用于控制按键和LED灯。Lib库中只需要添加:stm32f0xx_rcc.c和stm32f0xx_gpio.c两个文件。
Led.c和我们第一节所编写的驱动一样,下面我们来看看如何编写key.c文件。Key.c文件主要是要起到两个作用:第一:初始化开发板上的按键。第二:扫描判断按键是否有按下,按键扫描是通过MCU不停的判断端口的状态来实现的。完成这两个功能够就可以在main.c文件中直接调用本驱动了。下面看看代码:
那么在主函数中直接可以调用key,c和led.c两个子文件,代码如下:
那么更加好的按键控制方法是使用中断控制,这样可以大大节省了CPU的占有率。
中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是实时系统中尤为有用,这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”。简单的来说就比如某个人正在做某事,突然来了个电话,他就要停下手中的事情去接电话,中断相当于这个电话。触发中断后跳出原来运行的程序去执行中断处理。
软件准备:
在使用stm32f051库函数来完成中断,需要设置如下几个地方:第一:中断嵌套的设置。
第二:外部GPIO中断的设置。 首先是中断嵌套的问题:在stm32f05xx的参考手册第157页有一个中断嵌套列表,列出了各类中断的地址,在库文件stm32f0xx_misc.c里对嵌套进行了设置。并且在stm32f0xx.h文件中给出了中断列表中各类中断的中断频道号,并且封装成IRQn_Type结构体。
我们设置中断的类型只要设置如下结构体的参数就行:
其中NVIC_IRQChannel在stm32f0xx_misc.c里对嵌套进行了设置,NVIC_IRQChannelPriority可以在1到3直接进行设置。 NVIC_IRQChannelCmd频道命令主要是使能和禁能的作用。
第二个问题是外部IO中断的设置,主要是stm32051中断各种外部中断所使用的。在库函数中,在stm32f0xx_exti.c文件中进行了详细设置,我们只需要配置下面一个结构体就可以实现外部中断的控制了:
按照上面的配置要求,我们编写exit.c外部中断子函数,如下面的代码:
其中exit.c就是上面我们编写的按键中断初始化的驱动函数。而Lib树下文件我们之间添加ST公司提供的库函数。这里面,我们需要在stm32f0xx_it.c中加入相应的中断后执行函数,也就是发生按键中断后,我们执行反转LED的命令:
通过上面几个步骤,下面的主函数就相当的简单了,我们直接调用exit.h函数就可以完成按键中断的初始化了。看看下面代码,是不是非常简单不解释:
实验下载到QF-STM32F0开发板后的实验现象如下:
上一篇:stm32f051(2)系统时钟设置
下一篇:USART发送字符串首字符丢失原因及解决办法
推荐阅读最新更新时间:2024-03-16 15:14
设计资源 培训 开发板 精华推荐
- 闯关集卡|轻型电动车与电动工具正当时,英飞凌邀你上道!
- 有奖直播【Keysight World Tech Day 2023分论坛——汽车自动驾驶与新能源】
- 直播已结束【ADI 低噪声 Buck 稳压器如何减小电源噪声】
- ADI有奖下载活动之14 ADI公司针对pH计和电导率仪的演示系统
- ADI 生命体征监测技术:对人体实施状态监控,答题有好礼
- 【温故喝新之单片机版块】温2016年MCUs,喝2017年版块新篇章
- 学C2000精品课程,低价抢购 C2000 LaunchPad!
- 【分享成长,10月有奖】EEWORLD优秀主题/回复第15期活动开始啦!!!
- 下载有礼:数据中心养生秘籍《福禄克数据中心解决方案》等你带回家!
- 半导体品牌知名度问卷调查