STM32CUBEIDE(14)----外部中断EXTI

发布者:rockstar6最新更新时间:2024-09-29 来源: elecfans关键字:STM32CUBEIDE  外部中断  EXTI 手机看文章 扫描二维码
随时随地手机看文章

概述

外部中断和事件控制器 (EXTI) 管理外部和内部异步事件 / 中断,并生成相应的事件请求到CPU/ 中断控制器和到电源管理的唤醒请求。本例程主要讲解如何使用外部中断触发LED。 最近在弄ST和GD的课程,需要GD样片的可以加群申请:6_15061293 。

视频教学

https://www.bilibili.com/video/BV1dd4y1v7Pe/


csdn课程

课程更加详细。 https://download.csdn.net/course/detail/35611

生成例程

使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板
在这里插入图片描述
查看原理图,PC13为按键管脚。
在这里插入图片描述
LED管脚为PA5。

在这里插入图片描述

配置时钟树

配置时钟为64M。
在这里插入图片描述

中断口配置

开发板上的PC13为蓝色按钮,故配置此端口为中断口。

在这里插入图片描述在这里插入图片描述

GPIO 口连接到 16 个外部中断 / 事件线如下图 。可以看到PC13应该是在EXTI13上。
在这里插入图片描述

外部中断/事件控制器用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。
在这里插入图片描述

所以需要配置中断口是上升沿触发或者下降沿触发。
在这里插入图片描述

中断服务函数

配置完中断优先级之后,接着要做的就是编写中断服务函数。中断服务函数的名字是在 HAL 库中事先有定义的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

中断线 10-15 共用中断函数。一般情况下,我们可以把中断控制逻辑直接编写在中断服务函数中,但是 HAL 库把中断处理过程进行了简单封装。
在这里插入图片描述

GPIO配置

PA5为板上LED灯,配置PA5为输出口,当中断发生时候改变IO口极性。
在这里插入图片描述

在这里插入图片描述

配置中断优先级(NVIC),并使能中断

同样的,在mian.c的MX_GPIO_Init中,设置好中断线和 GPIO 映射关系,然后又设置好了中断的触发模式等初始化参数。既然是外部中断,涉及到中断我们当然还要设置 NVIC 中断优先级。 HAL_NVIC_SetPriority的中间0表示抢占优先级为0,最右边的0表示子优先级为0。

  1. 抢占优先级比子优先级的优先权更高,这意味抢占优先级更高的中断会先执行,而不管子优先级的优先权,数值越低优先级越高。

  2. 同理,如果抢占优先级相同,那么就会比较子优先级,子优先级更高的中断将会先被执行,数值越低优先级越高。

  3. 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

  4. 在这里插入图片描述

EXTI4_15_IRQHandler

在stm32f0xx_it.c中,程序开始执行EXTI4_15_IRQHandler函数,EXTI4_15_IRQHandler函数只是调用了另一个函数HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
在这里插入图片描述

HAL_GPIO_EXTI_Callback

在stm32f1xx_hal_gpio.c中,HAL_GPIO_EXTI_IRQHandler该函数实现的作用非常简单,就是清除中断标志位,然后调用回调函数HAL_GPIO_EXTI_Callback()实现控制逻辑。根据函数名Callback也能看出来这里才是真正执行具体功能的函数,该函数需要在mian.c文件中重写,通过判断中断是来自哪个IO口编写相应的中断服务控制逻辑。

在这里插入图片描述

代码

在main.c中,重写HAL_GPIO_EXTI_Callback。

/* USER CODE BEGIN 4 */

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

    if(GPIO_Pin == GPIO_PIN_13){/* KEY */  

        /* 翻转LED */

        HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);

    } 

}

/* USER CODE END 4 */


演示效果

LED灯随着按键按下改变极性。
在这里插入图片描述


关键字:STM32CUBEIDE  外部中断  EXTI 引用地址:STM32CUBEIDE(14)----外部中断EXTI

上一篇:STM32 CAN接收/发送错误寄存器如何清零?
下一篇:stm32g与stm32h的区别

推荐阅读最新更新时间:2024-11-09 13:57

【STM32】3-外部中断实验(EXTI)步骤及解析
一、外部中断介绍 1.1 EXTI 简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事件/中断请求的边沿检测器。EXTI的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发),还可独立地被屏蔽。 1.2 EXTI 结构框图 1.3 外部中断/事件线映射 STM32F10x的EXTI具有20个中断/事件线,如下: 二、外部中断配置步骤 要使用外部中断我们就需要先配置它,通常都需经过这几步:(EXTI相关库函数在stm32f10x_exti.c和stm32f10x_exti.h文件中) (1)使能IO口时钟,配置IO口模式为输入 (2)
[单片机]
【STM32】3-<font color='red'>外部中断</font>实验(<font color='red'>EXTI</font>)步骤及解析
STM32学习笔记(2)外部中断
一、中断 1.什么是中断 操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这种速度鸿沟,提高CPU的效率。 为此我们引入了中断机制,让外设在需要操作系统处理外设相关事件的时候,能够主动通知操作系统,即当CPU收到中断或者异常的事件时,打断操作系统和应用的正常执行,暂停执行当前的程序或任务,让操作系统完成外设的相关处理,在完成对这个事件的处理后,再恢复操作系统和应用的正常执行。 举个栗子,当你在读文章时忽然来了一个电话,你会先去接电话,等电话挂断后你又接着回来读文章,接电话这一过程就是执行中断。 正是由于中断机制,计算机系统才能有条不紊地“同时”完成多个任务,中断机制实质上帮助提高了并
[单片机]
STM32学习笔记(2)<font color='red'>外部中断</font>
stm32 HAL库开发-EXTI外部中断编程
1 编写流程 如下图所示,作用于外部IO口的信号,实际上经过三个部分进入NVIC控制器:GPIO、EXTI控制器、NVIC控制器。 我们在程序配置中也需要对这三个部分依次设置。 2 外部中断实验 实验设计 Nuelco-F091RC开发板的PA10引脚配置上拉电阻并配置下降沿中断,PA10外接一按键用于接地触发中断。 开发板PB3引脚配置为推挽输出并外接LED灯泡,外部中断服务函数将PB3引脚电平翻转从而控制LED亮灭。 实验程序 宏定义LED和按键的引脚和端口 声明并定义两个部分的初始化函数 一定要记得开时钟,这是Stm32与AVR非常不一样的地方, KEY_EXTI_Init()函数中最后要配置NVIC
[单片机]
应用笔记 | 建立基于STM32CubeIDE的ClassB工程
01 前言 大家都知道ST的ClassB功能安全软件设计包是免费的,也有众多客户基于STM32CubeIDE免费的IDE进行开发,本文档将展示如何轻松地实现ClassB在STM32CubeIDE上的移植。 02 准备 硬件:NUCLEO-G070 软件:X-CUBE-CLASSB version 2.3.0 03 创建CubeMX工程 在CubeMX中创建闪灯和串口打印的基础工程,并在实验板上验证工程的正确性。 然后继续配置IWDG、WWDG、CRC外设。为了避免程序在移植和调试时产生复位,可以在CubeMX中配置为不调用。 将X-CUBE-CLASSB V2.3.0中整个Middleware
[单片机]
应用笔记 | 建立基于<font color='red'>STM32CubeIDE</font>的ClassB工程
STM32的IO外部中断EXTI的使用
一、前言 在之前针对 STM32 的G PI O相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读 信号 引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取 检测 操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EX TI 的结构,接着介绍外部中断的相关概念,对STM32的IO外部中断EXTI有个初步的了解,在此基础上重点围绕IO外部中断EXTI的使用展开分析。 图1 外部中断设计 二、EXTI结构 EXTI(Ex te rnal interrupt/event controller)—外部中断/事件 控制器 ,管理了控制器的
[单片机]
STM32的IO<font color='red'>外部中断</font><font color='red'>EXTI</font>的使用
【STM32】HAL库-外部中断
外部中断框图 产生中断 硬件触发外部中断 配置中断屏蔽寄存器中的屏蔽位,允许该外部中断请求 通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟 选择外部中断的触发边沿,上升沿/下降沿/两者都检测 在NVIC中设置外部中断的优先级,并使能该中断 在中断发生后,在中断服务函数中,清除请求挂起寄存器中的对应位(写1清除) STM32参考手册中的描述:要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写’1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置’1’。在挂起寄存器的对应位
[单片机]
【STM32】HAL库-<font color='red'>外部中断</font>
STM32F4 EXTI外部中断(二)
一. 外部中断结构体 1. EXTI_InitTypeDef 结构体 2. 中断线标号 2. 例 配置PB14为外部中断 void exti_init(void) { //配置GPIOB_14引脚为输入 //使能GPIO时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //定义GPIO_InitTypeDef 结构体 GPIO_InitTypeDef GPIO_InitStructure; //选择引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //配置工作模式为
[单片机]
STM32F4 <font color='red'>EXTI</font><font color='red'>外部中断</font>(二)
STM32F1外部中断实例
使用外部中断的基本步骤如下: 1. 设置好相应的时钟; 2. 设置相应的中断; 3. IO口初始化; 4. 把相应的IO口设置为中断线路(要在设置外部中断之前)并初始化; 5. 在选择的中断通道的响应函数中中断函数。 1、开启时钟 void RCC_Config(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE)| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); } 设置相应的时钟所需要的RCC函数在stm32f10x
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved