STM32 Nucleo初级教程5:中断方式的按键实现

作者: fengye5340
上传时间为: 2014-12-09 04:50 PM

在上两篇文章中,讲解了在STM32-NUCLEO-072RB开发平台上实现串口驱动,可以随时将MCU的信息打印到串口助手上面。这一篇文章讲解利用中断方式来实现用户按键的输入操作。

在MCU上实现用户按键输入,首先要将GPIO相应的引脚连接到按键电路,然后采用两种方式实现。一种是不断查询GPIO相应引脚的高低电平状态;另一种是通过GPIO引脚上高低电平的上升沿或者下降沿或者电平触发中断,在中断事件中判断引脚状态。因为第一种方法比较简单,这里讲解一下第二种方式,也就是中断事件的方式。下面看一下STM32F0的中断事件内容。

          一、STM32F0的外部中断事件

STM32F0具有扩展的外部中断/事件控制器(EXTI),它支持多达28个(21个外部事件和7个内部事件),每个外部事件可以独立选择触发源,内部事件为上升沿触发!另外,某些通信外设(USART、I2C、CEC和比较器等)能在MCU处于停止模式时产生唤醒事件把MCU唤醒。

下面是28个事件名称,EXTI line(0..15)是用于GPIO的外部中断,STM32的每个GPIO(特殊引脚除外)都具有外部中断能力,也就是都可以用作按键接口。

       

下面看一下EXTI_InitTypeDef结构体的内容:

下面是EXTI_InitTypeDef结构体各个变量成员的定义

中断线定义:

EXTI模式定义:

触发模式:

下面是STM32中断事件的库函数定义:

EXTI参数初始化库函数:EXTI_Init()

获取外部中断线的状态:EXTI_GetITStatus()

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

清除外部中断线的状态位:EXTI_ClearITPendingBit()

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

这部分内容较少,仅需要掌握着几个库函数就可以。有了库函数,再看一下硬件电路的GPIO引脚连接。

二、STM32-NUCLEO-072RB的按键硬件电路

电路图如下:

按键电路采用PC14引脚连接,采用4.7K上拉电阻,并增加了阻容吸收电路,使得按键电平跳变更加稳定。下面看一下具体的代码实现。

三、KEIL-MDK工程软件代码实现

1、Keil-mdk工程模板中加入KEY.C文件, 在includes.h文件中加入KEY.H头文件

2、按键端口PC13在KEY.H头文件宏定义

这里采用中断方式,需要指明中断线,中断引脚源和外部中断服务函数优先级名

3、按键端口和中断线配置函数Key_Init()函数的实现

4、在NVIC里面配置外部中断的优先级:

这里把按键中断配置为外部中断中最低的优先级即可。

5、外部中断复位函数代码实现(stm32f0xx_it.c

在里面,定义一个计数器变量,实现对按键次数进行计数,并打印到串口助手上

6、主函数main.c代码配置:

在主函数里面加入按键初始化代码后就可以了。

7、实验现象:

开发平台复位后,按下用户按键,会打印内容到串口助手上面

代码地址链接

http://www.eeboard.com/bbs/thread-39696-1-1.html

摩尔吧视频地址链接

http://www.moore8.com/courses/306




全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示