STMCU小助手
发布时间:2022-4-5 11:12
|
对于按键,常见的是通过MCU不断检测按键连接GPIO的状态变化(高-->低或低-->高),来确认是否有按键输入,比如上一篇按键实验(上)。但是,轮询方式的缺点很明显,MCU一直在循环检测,对资源是一种浪费,不够高效。对于STM32,其 GPIO 是可以配置成中断的,有这个优势,我们就可以通过中断的方式来检测 GPIO 上电平的变化,进一步的得到按键的状态。 按键电路和按键实验(上)的电路图一样,如下:
一、外部中断/事件控制器EXTI控制器的主要特性如下: ●每个中断/事件都有独立的触发和屏蔽; ●每个中断线都有专用的状态位; ●支持多达20个软件的中断/事件请求; ●检测脉冲宽度低于APB2时钟宽度的外部信号。 二、外部中断概述 STM32中,每一个 GPIO 都可以触发一个外部中断,但是,GPIO 的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0 这些为1组,如果我们使用PA0作为外部中断源,那么其他的就不能再使用了。在此情况下,我们只能使用类似于 PB1,PC2 这种末端序号不同的外部中断源。
STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。 每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。 每一组使用一个中断标志EXTIx。EXTI0-EXTI4这5个外部中断有着自己单独的中断响应函数,EXIT5-EXIT9共用一个中断响应函数,EXIT10-EXIT15共用一个中断响应函数。 小R接着上一次按键实验进行补充,因此跳过新建 key.c 和 key.h 两个文件,以及把 key.c 添加到工程中。 在 key.h 中补充以下代码:
在 key.c 中补充以下代码:
实现按键中断控制LED灯亮灭
在这里需要说明一下,固件库还提供了两个函数用来判断外部中断状态以及清除外部状态标志位的函数 EXTI_GetFlagStatus 和 EXTI_ClearFlag,他们的作用和前面两个函数的作用类似。只是在 EXTI_GetITStatus 函数中会先判断这种中断是否使能,使能了才去判断中断标志位,而EXTI_GetFlagStatus 直接用来判断状态标志位。 小提示:如果身边没有按键面包板搭电路,可以使用一条杜邦线完成实验,杜邦线的一端接PA12,当另一端接GND时代表“按键”被按下。 |
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
10张图带你完全掌握STM32 GPIO,从入门到精通,收藏就够了!
如果你解决了这些问题,就可以直接学STM32
STM32的分类和选型
微信公众号
手机版