STM32多个外部中断可能共享同一个中断向量

2024-05-15 16:36

本文主要是介绍STM32多个外部中断可能共享同一个中断向量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在STM32F4系列微控制器中,多个外部中断可能共享同一个中断向量(例如,EXTI9_5_IRQn),因此需要在中断服务例程(ISR)中区分是哪个中断线触发了中断。对于PB6和PB7,它们都连接到EXTI9_5_IRQn中断向量。为了区分这两个中断,可以在ISR中检查相应的EXTI线标志位。

以下是如何为STM32F406配置PB6和PB7以分别响应外部中断的示例代码:

#include "stm32f4xx_hal.h"// 使能GPIOB时钟
#define GPIOB_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()// 定义PB6和PB7对应的中断线
#define USER_BUTTON_PIN6 GPIO_PIN_6
#define USER_BUTTON_PIN7 GPIO_PIN_7
#define USER_BUTTON_GPIO_PORT GPIOB// 中断优先级配置
void SystemClock_Config(void);
void MX_NVIC_Init(void) {// 优先级分组设置,抢占优先级和子优先级HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
}// 初始化EXTI中断
void EXTI_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;EXTI_HandleTypeDef EXTI_Config;// 使能GPIOB时钟GPIOB_CLK_ENABLE();// 配置PB6和PB7为中断源GPIO_InitStructure.Pin = USER_BUTTON_PIN6 | USER_BUTTON_PIN7;GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; // 配置中断触发方式为下降沿触发GPIO_InitStructure.Pull = GPIO_NOPULL; // 不使用内部上拉或下拉GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(USER_BUTTON_GPIO_PORT, &GPIO_InitStructure);// 配置EXTI9_5_IRQn中断__HAL_RCC_SYSCFG_CLK_ENABLE();HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);// 初始化EXTI9_5_IRQn中断EXTI_Config.Line = EXTI_LINE_6 | EXTI_LINE_7; // 同时配置PB6和PB7EXTI_Config.Mode = EXTI_MODE_INTERRUPT;EXTI_Config.Trigger = EXTI_TRIGGER_FALLING;EXTI_Config.GPIOSel = GPIOB; // 选择GPIOB作为EXTI的端口HAL_EXTI_Init(&EXTI_Config);
}// EXTI9_5_IRQn中断服务例程
void EXTI9_5_IRQHandler(void) {if (__HAL_GPIO_EXTI_GET_IT(USER_BUTTON_PIN6) != RESET) { // 检查PB6是否触发中断__HAL_GPIO_EXTI_CLEAR_IT(USER_BUTTON_PIN6); // 清除中断标志位// PB6中断处理代码}if (__HAL_GPIO_EXTI_GET_IT(USER_BUTTON_PIN7) != RESET) { // 检查PB7是否触发中断__HAL_GPIO_EXTI_CLEAR_IT(USER_BUTTON_PIN7); // 清除中断标志位// PB7中断处理代码}
}int main(void) {// 初始化系统HAL_Init();SystemClock_Config();MX_NVIC_Init();EXTI_Config();// 主循环while (1) {// 其他任务}
}

在上述代码中,我们首先配置了PB6和PB7作为下降沿触发的外部中断源。接着,我们初始化了EXTI9_5_IRQn中断,并在中断服务例程EXTI9_5_IRQHandler中通过检查__HAL_GPIO_EXTI_GET_IT()宏来判断是PB6还是PB7触发了中断。一旦确定了触发中断的引脚,我们便清除中断标志位并执行相应的中断处理代码。

请注意,代码中的SystemClock_Config函数需要根据你的系统时钟配置进行实现,而MX_NVIC_Init函数用于初始化NVIC(嵌套向量中断控制器),设置中断优先级分组和中断优先级。

在实际应用中,您可能需要根据实际硬件连接和项目需求调整中断触发方式、中断服务函数的具体实现以及中断优先级设置。

这篇关于STM32多个外部中断可能共享同一个中断向量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992340

相关文章

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

Linux使用粘滞位 (t-bit)共享文件的方法教程

《Linux使用粘滞位(t-bit)共享文件的方法教程》在Linux系统中,共享文件是日常管理和协作中的常见任务,而粘滞位(StickyBit或t-bit)是实现共享目录安全性的重要工具之一,本文将... 目录文件共享的常见场景基础概念linux 文件权限粘滞位 (Sticky Bit)设置共享目录并配置粘

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类