2.外部中断方式检测按键输入并控制LED示例

这篇具有很好参考价值的文章主要介绍了2.外部中断方式检测按键输入并控制LED示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是中断

打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

2.中断向量表

2.1 系统中断

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

其中,系统中断表 及对应的说明 如下图所示:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

我们可以按住 Ctrl 点击中断向量表中的 ISR 函数名,可以进入该函数,可以发现,这些系统函数虽然都定义了,但是没有编写其工作方式,即函数体。

例如:按如下操作:

第1 步:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

第2步:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

此就是滴答中断函数:(其他找到 中断函数的方法 都一样)

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

如果用户需要对中断内容进行定义,就要在对应的中断函数内编写对应的中断执行代码。

其中,SysTick是个非常有用的定时中断,它能精确产生 1ms 的定时供用户使用。

2.2 外部可屏蔽中断(82个可屏蔽中断)

NVIC采用4位二进制数设置中断优先级,分为 抢占优先级次优先级

1.抢占优先级次优先级 相同的情况下,自然优先级越高,就先执行;

2.次优先级 相同的情况下,即使次优先级 高的中断正在执行,抢占优先级 高 的中断也可以打断它,并先执行;

3.次优先级 高的中断不能打断 次优先级 低的中断;

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

注意:中断优先级别设置非常重要,但该工作都可以在CUBEMX中可视化完成,比较简单。

在CUBEMX中设置NVIC方法如下:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

中断的相关函数所在位置:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

3.外部中断的使用

3.1 23个EXIT外部中断线(16个GPIO线关联,7个外部事件关联)

​ STM32F407有23个外部中断,其中16个与GPIO引脚相挂钩(如下图所示),另外7个EXIT线与其他外设产生的事件信号相关联。

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

外部中断EXIT线共用及ISR函数情况:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

另外7个EXIT线连接的对应事件信号:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

3.2 跟GPIO相关的EXIT外部中断线函数

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

4.外部中断按键示例

要求:以外部中断方式检测按键按下,并控制LED的亮灭

第1步:导入先前建立的.ioc文件,就可以在原来的MX配置文件中继续添加功能了

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

第2步:输入新的工程文件名

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

第3步:将引脚从原来的“输入模式”修改为 “外部中断”模式

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

按键引脚修改完成以后的前后对比:

修改以前:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

修改以后:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

然后设置NVIC优先级:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

第4步:保存,点击生成代码:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

第5步 生成代码分析

main.c主程序分析:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

main.h 对引脚号、端口的宏定义:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

在文件 stm32f4xx_it.c中,自动生成了4个ISR的代码框架,如下图所示:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

CTRL键,进入到该函数

HAL_GPIO_EXTI_IRQHandler()

中,这些ISR最终都要调用回调函数

HAL_GPIO_EXTI_Callback()

如下图所示:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

因此,我们只需要重新实现 该 回调函数 的功能, 就可以完成中断的任务了。

第6步 编写用户功能代码

在其中调用外部中断软中断的宏函数:2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

在gpio.c中,用户沙箱中重新编写该“回调函数”:

/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == Key_Up_Pin)     //上按键  按下,两LED灯翻转
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(500);
	}
	else if(GPIO_Pin == Key_Right_Pin) //右上按键 按下,LED2灯翻转
	{
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(1000);
	}
	else if(GPIO_Pin == KeyDown_Pin)   //下上按键  按下,上按键产生软中断,两LED灯翻转
	{
		__HAL_GPIO_EXTI_GENERATE_SWIT(Key_Up_Pin);
		HAL_Delay(1000);
	}
	else if(GPIO_Pin == KeyLeft_Pin)  //左上按键  按下,LED1灯翻转
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_Delay(1000);
	}
}
/* USER CODE END 2 */

还需要对以下系统函数调整语句位置:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32

最后实现功能:

  • 按下 上按键,两个LED输出翻转;
  • 按下 下按键,产生EXTI0软中断,模拟 上按键 按下;
  • 按下 右按键,LED2输出翻转;
  • 按下 左按键,LED1输出翻转;

中断优先级测试:

2.外部中断方式检测按键输入并控制LED示例,# STM32F407高效开发学习教程,嵌入式硬件,stm32文章来源地址https://www.toymoban.com/news/detail-849702.html

  • 按下 左按键 后,再快速按下右按键 ,LED2不会立刻翻转,需要等待1000ms后再变化。
  • 按下 下按键,产生EXTI0软中断,执行1000ms的延时后,再进入 上按键 产生的中断,实现两LED翻转。

到了这里,关于2.外部中断方式检测按键输入并控制LED示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【stm32----按键中断实验,按键控制LED灯】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1灭; 2、按下KEY2,LED2亮,再次按下KEY2,LED2灭; 3、按下KEY3,LED3亮,再次按下KEY3,LED3灭; 一、头文件 1、gpio.h 2、key.h 二、初始化函数及功能函数 1、gpio.c 2、key.c 三、中断处理函数 do_irq.c 四、主函数 main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    浏览(54)
  • 驱动——按键中断控制LED灯实验

    要求:按键按一下灯亮,再按一下灯灭 注:由于开发板位置,为了方便一一对应观察,采用key1控制LED3,key2控制LED2,key3控制LED1 0、添加相关设备树节点信息 ①按键相关引脚,通过原理图可得: key1------gpiof9; key2------gpiof7; key3------gpiof8 ②LED灯相关引脚: led1-----gpioe10; led2---

    2023年04月18日
    浏览(41)
  • stm32按键控制LED灯亮灭(中断法)

    用按键控制STM32上的LED灯亮灭,可以采用轮询法和中断法。轮询法需要不断检测按键的状态,消耗MCU;而中断法只是在按下的那一刻触发中断,控制灯亮灭。轮询法相对于更常规,容易操作。因此我们这里讲的用中断法。关于中断的概述,这里不作介绍,只讲操作,分析代码

    2024年02月07日
    浏览(58)
  • ARM day9 (按键中断控制led亮灭)

     保存现场 异常的处理流程,保存现场会做哪些事情(四大步三小步) ----CPU自动完成 1.保存CPSR寄存器中的值,到SPSR_mode寄存器中 2.修改CPSR寄存器对应的位         1修改CPSR寄存器对应的状态位(T位)         2根据需要,禁止相应中断位(I位 / F位)         3修改CPSR寄存

    2024年02月13日
    浏览(48)
  • STM32——05-按键、时钟控制、中断复位 点亮LED灯

    如何点亮一颗LED灯   编程实现点灯 常用的 GPIO HAL 库函数: void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_TogglePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin );  结构体  GPIO_InitTypeDef  定义:

    2024年02月08日
    浏览(50)
  • 夜深人静学32系列10——GPIO中断/NVIC/EXTI/SYSCFG详解,外部中断控制LED

    上期我们学习了GPIO驱动数码管/蜂鸣器/LED和按键等外设,本期我们一起来学习STM32中断的相关内容 当CPU正在处理某个事件的时候,外界发生了紧急事件请求,CPU需要暂停当前的工作,转而去处理这个紧急事件,处理完之后,再次回到之前被中断的地方,继续执行原来的工作,

    2024年01月16日
    浏览(50)
  • 物联网|按键实验---学习I/O的输入及中断的编程|函数说明的格式|如何使用CMSIS的延时|读取通过外部中断实现按键捕获代码的实现及分析-学习笔记(14)

    1 代码的流程分析 2 代码的实现 库函数HAL_Init(void)分析: HAL_Delay()系统延时的步骤: 它的实现步骤如下: 1.用变量获得系统时钟源计数器的值 2.获得要延迟时间的参数值 3.比较两者大小,若时钟计数器的值大于要实现延迟的值,就会困在循环里;反之,跳出循环,延时完成。

    2024年02月14日
    浏览(51)
  • STM32矩形(矩阵)按键(键盘)输入控制LED灯 ——4*4矩阵按键源码解析

    本文基于标准函数库的工程实现stm32F103C8T6使用4*4的矩阵按键控制LED灯的亮灭及闪烁等功能。 程序源码:链接:https://pan.baidu.com/s/1_MPhvMduKCTP0MPG-Gtw3A?pwd=2syk  提取码:2syk 文章目录 一、矩形键盘介绍 1、硬件电路基本原理 2、两种识别方法介绍 3、硬件接线即使用 二、程序源码

    2024年02月04日
    浏览(47)
  • LED灯闪烁拓展实验——单按键控制LED灯不同闪烁方式

    实现平台:Vivado2018.3 1. 使用按键KEY0和KEY_1分别控制LED0和LED1两个LED灯的闪烁方式; 2. 当没有按键按下时,两个LED灯均不亮; 3. 当按键KEY0按下后,LED0灯闪烁,当按键KEY0再次按下后则LED1灯闪烁,如此循环往复; 4. 当按键KEY1按下后,LED0和LED1交替闪烁,当按键KEY1再次按下后则

    2024年01月23日
    浏览(40)
  • stm32单片机开关控制LED灯(中断方式)(proteus电路图)

      补充一点:拼多多上面LED额定电流20mA,额定电压2V,额定电阻100欧姆,后边这个是STM32 如果只是用面包板做实验,输入输出都不是很多,就直接用灌电流的方式把LED直接接到STM32了,即使是设计产品,如果能够直接接,那么肯定也是不会浪费钱去买额外的原件的,所以只有

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包