查看: 2096|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-9 16:50:18 | 显示全部楼层 |阅读模式
    分享到:
    在上两篇文章中,讲解了在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、实验现象:
    开发平台复位后,按下用户按键,会打印内容到串口助手上面








    代码地址链接
    https://www.eeboard.com/bbs/thread-39696-1-1.html
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 02:56 , Processed in 0.117698 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.