Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断

2024-01-21 14:36

本文主要是介绍Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 工具准备

Keil uVision5
Cortex M3权威指南(中文)
Cortex M3与M4权威指南
stm32f407的HAL库工程
STM32F4xx中文参考手册

1 使用HAL库配置外部中断

前面我们已经熟悉了有关内核部分的寄存器配置,接下来我们结合stm32f407的GPIO外设,从实战角度进一步加深对这些寄存器的认识。

1.1 原理图分析

我们这里使用GPIO的
我们这里使用PA0作为输入引脚,可以看到SW1未按下时为低电平,按下时为高电平。我们我们想要在SW1按下时触发中断,只需要配置PA0端口为上升沿触发即可。

1.2 初始化PA0

/*** @brief 初始化SW1中断* */
void init_sw1_interrupt(void)
{GPIO_InitTypeDef GPIO_InitStructure;// 使能GPIOA时钟__GPIOA_CLK_ENABLE();GPIO_InitStructure.Pin = GPIO_PIN_0;// 配置上升沿触发GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;GPIO_InitStructure.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);// 设置中断优先级为(2,2)HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 2);// 清中断标志__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);// 使能中断HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

该函数操作步骤如下:
(1)使能GPIOA时钟
(2)设置PA0为浮空输入模式,上升沿触发
(3)初始化PA0
(4)设置中断优先级分组为2
(5)设置中断优先级为(2,2)
(6)清中断标志
(7)失能EXTI0中断请求(PA0的中断请求是映射到EXTI0上的)

1.3 编写中断服务函数

/*** @brief EXIT0中断服务函数* */
void EXTI0_IRQHandler(void)
{// 查看是否产生了有效中断if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET){printf("SW1 press down\r\n");// 清除中断标志位__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);}
}

进入中断服务函数的首要工作就是检查是否产生了符合预期的中断,如果是的话则执行相应的操作,最后清除中断标志。

1.4 中断测试

完成PA0的初始化后,我们手动按下KEY1,可以看到打印出了中断服务函数内的信息:
在这里插入图片描述
至此,使用HAL库配置外部中断大功告成。

这篇关于Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖