0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CUBEMX(11)--外部中断(EXTI)

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2022-11-14 16:39 次阅读

概述

外部中断和事件控制器 (EXTI) 管理外部和内部异步事件 / 中断,并生成相应的事件请求到CPU/ 中断控制器和到电源管理的唤醒请求。本例程主要讲解如何使用外部中断触发LED

硬件准备

首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:

在这里插入图片描述

选择芯片型号

使用STM32CUBEMX选择芯片stm32f030r8,如下所示:

在这里插入图片描述

配置时钟

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

在这里插入图片描述

配置时钟树

STM32F0的最高主频到48M,所以配置48即可:

在这里插入图片描述

中断口配置

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

所以需要配置中断口是上升沿触发或者下降沿触发。

在这里插入图片描述

查看向量表可以得知PC15应该开启EXIT4到15的中断。

在这里插入图片描述

在这里插入图片描述

GPIO配置

PA5为板上LED灯,配置PA5为输出口,当中断发生时候改变IO口极性。

在这里插入图片描述

在这里插入图片描述

生成工程设置

注意在生产工程设置中不能出现中文,不然会报错。

在这里插入图片描述

生成代码

在这里插入图片描述

配置keil

在这里插入图片描述

设置IO口模式,触发条件,设置 IO 口与中断线的映射关系

首先在mian.c的MX_GPIO_Init中,GPIO_Initure.Mode=GPIO_MODE_IT_RISING,这里设置为上升沿触发。Mode值为GPIO_MODE_IT_RISING(外部中断上升沿触发),GPIO_MODE_IT_FALLING(外部中断下降沿触发)或者GPIO_MODE_IT_RISING_FALLING(外部中断双边沿触发)。

GPIO_InitStruct.Pull=GPIO_NOPULL,这个为管脚悬空,没有上下拉。

在这里插入图片描述

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

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

HAL_NVIC_SetPriority的中间0表示抢占优先级为0,最右边的0表示子优先级为0。

  1. 抢占优先级比子优先级的优先权更高,这意味抢占优先级更高的中断会先执行,而不管子优先级的优先权,数值越低优先级越高。
  2. 同理,如果抢占优先级相同,那么就会比较子优先级,子优先级更高的中断将会先被执行,数值越低优先级越高。
  3. 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
    在这里插入图片描述

中断服务函数

配置完中断优先级之后,接着要做的就是编写中断服务函数。中断服务函数的名字是在 HAL 库中事先有定义的。STM32F0的IO口外部中断函数只有3个。

在这里插入图片描述

中断线 0-1每个中断线对应一个中断函数,中断线 2-3共用中断函数 ,中断线 4-15 共用中断函数。一般情况下,我们可以把中断控制逻辑直接编写在中断服务函数中,但是 HAL 库把中断处理过程进行了简单封装。

EXTI4_15_IRQHandler

在stm32f0xx_it.c中,程序开始执行EXTI4_15_IRQHandler函数,EXTI4_15_IRQHandler函数只是调用了另一个函数HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);

在这里插入图片描述

HAL_GPIO_EXTI_Callback

在stm32f0xx_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灯随着按键按下改变极性。

在这里插入图片描述

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 外部中断
    +关注

    关注

    1

    文章

    131

    浏览量

    15823
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14807
  • EXTI
    +关注

    关注

    0

    文章

    27

    浏览量

    3690
收藏 人收藏

    评论

    相关推荐

    STM32CubeMx外部中断基本使用方法

    第一步:现在STM32CubeMx 中配置所需要IO口外部中断模式。
    发表于 05-31 15:32 4211次阅读
    <b class='flag-5'>STM32CubeMx</b><b class='flag-5'>外部</b><b class='flag-5'>中断</b>基本使用方法

    STM32CUBEMX(11)--外部中断(EXTI)

    首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 选择芯片型号 使用STM32CUBEMX选择芯片stm32f030r8,如下所示: 配置时钟源 HSE与LSE分别为外部
    发表于 09-10 15:44

    STM32CUBEMX的BUG:NVIC里找不到EXTI中断

    建立STM32F373CCT6,把PA1设置为外部中断,NVIC里找不到EXTI中断stm32cube
    发表于 12-07 08:51

    STM32CubeMx外部中断基本使用方法

    `STM32CubeMx外部中断基本使用方法第一步:现在STM32CubeMx 中配置所需要IO口外部
    发表于 01-14 10:02

    STM32CubeMx配置外部中断简介

    for STM32F0 Series)本文内容:STM32CubeMx 配置外部中断外部中断
    发表于 08-13 08:07

    STM32CubeMX外部中断的使用

    前言  今天我们来学习STM32CubeMX外部中断的使用,实现按下KEY0 KEY1 KEY2中断-->IO-->按键映射:  EXTI
    发表于 08-18 08:12

    基于STM32CubeMx外部中断设计步骤

    功能(其中包括中断源、抢占优先级、响应优先级、中断的使能与失能基于STM32CubeMx外部中断设计步骤:在
    发表于 01-14 07:04

    STM32CubeMX配置

    一、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)思路:使用外部中断方式控制LED,当按下不同的按键触中断
    发表于 02-11 06:44

    第二节: 外部中断学习(用CubeMX学习STM32)

    STM32CubeMX配置, 使用HAL库,学习STM32外部中断,hal和CubeMX学习分享
    发表于 12-05 13:06 4次下载
    第二节: <b class='flag-5'>外部</b><b class='flag-5'>中断</b>学习(用<b class='flag-5'>CubeMX</b>学习<b class='flag-5'>STM32</b>)

    STM32CubeMX学习笔记(3)——EXTI(外部中断)接口使用

    一、新建工程1. 打开 STM32CubeMX 软件,点击“新建工程”2. 选择 MCU 和封装3. 配置时钟RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic
    发表于 12-05 16:36 9次下载
    <b class='flag-5'>STM32CubeMX</b>学习笔记(3)——<b class='flag-5'>EXTI</b>(<b class='flag-5'>外部</b><b class='flag-5'>中断</b>)接口使用

    STM32CubeMX_UART_printf_接收中断_DMA空闲中断_LPUART

    文章目录前言STM32CubeMX新建F767工程UART配置生成代码串口发送printf支持串口接收中断DMA空闲中断工程代码微信公众号前言STM32CubeMX_环境搭建_GPIO
    发表于 12-06 18:36 6次下载
    <b class='flag-5'>STM32CubeMX</b>_UART_printf_接收<b class='flag-5'>中断</b>_DMA空闲<b class='flag-5'>中断</b>_LPUART

    STM32CubeMX系列教程2:外部中断EXIT

    中断的形式,通过一个按键改变LED灯的工作状态。工程可以在前一章的GPIO输入与输出的基础上修改。复制GPIO_InOut的工程,修改文件夹名为EXIT。配置工程新建工程,可参考 STM32CubeMX系列教程0:创建工程安装环境,可参考
    发表于 01-14 15:38 0次下载
    <b class='flag-5'>STM32CubeMX</b>系列教程2:<b class='flag-5'>外部</b><b class='flag-5'>中断</b>EXIT

    STM32外部中断控制器EXTI详解

    什么是外部中断控制器,外部中断控制器在STM32芯片中处于什么位置,它的作用是什么,EXTI与G
    的头像 发表于 04-20 11:44 2681次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中断</b>控制器<b class='flag-5'>EXTI</b>详解

    STM32的IO外部中断EXTI的使用

    的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EXTI的结构,接着介绍外部中断的相关概念
    的头像 发表于 06-22 10:21 2039次阅读
    <b class='flag-5'>STM32</b>的IO<b class='flag-5'>外部</b><b class='flag-5'>中断</b><b class='flag-5'>EXTI</b>的使用

    STM32CUBEMX开发GD32F303(15)----外部中断EXTI

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 使用外部中断EXTI进行驱
    的头像 发表于 07-26 15:53 1343次阅读
    <b class='flag-5'>STM32CUBEMX</b>开发GD32F303(15)----<b class='flag-5'>外部</b><b class='flag-5'>中断</b><b class='flag-5'>EXTI</b>