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

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决