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

news2024/11/25 2:52:53

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库配置外部中断大功告成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深耕文档型数据库12载,SequoiaDB再开源

1月15日,巨杉数据库举行SequoiaDB新特性及开源项目发布活动。本次活动回顾了巨杉数据库深耕JSON文档型数据库12年的发展历程与技术演进,全面解读了SequoiaDB包括在高可用、安全、实时、易用性四个方向的技术特性,宣布了2024年面向技术社区的开…

toolz,一个无敌的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个无敌的 Python 库 - toolz。 Github地址:https://github.com/pytoolz/toolz Python是一种多用途的编程语言,具备广泛的库和框架,以支持各种编程范式&#x…

SSD硬盘数据恢复工具哪个强?分享五款好用的SSD硬盘数据恢复软件

固态硬盘 (SSD) 是数据存储领域真正的奇迹。SSD 没有机械部件,具有类似激光的读写速度,在笔记本电脑、游戏机和超级计算机中非常受欢迎。 然而,数据删除问题仍然很突出。如果您不小心删除了 SSD 中的关键数据怎么办? 5 款最佳 SS…

Python 类变量和实例变量详解

更多资料获取 📚 个人网站:ipengtao.com 在Python中,变量分为类变量和实例变量两种类型,它们有着不同的作用范围和生命周期。理解这两种变量类型的区别对于面向对象编程非常重要。本文将详细介绍Python中的类变量和实例变量&…

SATA驱动中FIS命令处理(详细)流程附代码和协议解析

目录 一、简介二、命令处理详细流程2.1 总体过程总结2.2 内存布局2.2.1 具体内存分配规则2.2.2 具体命令填充2.2.3 命令触发流程2.2.4 其他注意事项 三、其他相关链接1、SATA模块之HBA卡开发总结(一)2、SATA信息传输FIS结构总结3、PCIe物理层总结-PCIE专…

Vue2移动端项目使用$router.go(-1)不生效问题记录

目录 1、this.$router.go(-1) 改成 this.$router.back() 2、存储 from.path,使用 this.$router.push 3、hash模式中使用h5新增的onhashchange事件做hack处理 4、this.$router.go(-1) 之前添加一个 replace 方法 问题背景 : 在 Vue2 的一个移动端开发…

快速入门:使用 Gemini Embeddings 和 Elasticsearch 进行向量搜索

Gemini 是 Google DeepMind 开发的多模态大语言模型家族,作为 LaMDA 和 PaLM 2 的后继者。由 Gemini Ultra、Gemini Pro 和 Gemini Nano 组成,于 2023 年 12 月 6 日发布,定位为 OpenAI 的竞争者 GPT-4。 本教程演示如何使用 Gemini API 创建…

万界星空科技免费MES/开源MES/功能齐全,支持低代码大屏

目前国内智能制造如火如荼,工厂信息化、数字化是大趋势。如果找到一个工厂,搞定一个老板,搞软件的朋友就能吃几年。 开源软件不失为一条路子,大量的服务商选择开源MES做出了低成本的项目,收入也还可以。 今天介绍Git…

Linux 驱动开发基础知识——认识LED驱动程序 (二)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

文件处理的重定义,dup2函数

目录 1.了解dup2函数的参数意义 2.举例子了解dup2函数 3.在模拟shell中加入> , >> , < 的指令 4.stdout和stderr的区别 1.了解dup2函数的参数意义 C中系统调用接口中的open-CSDN博客 可以在我上面的博客中了解到&#xff0c;文件其实是被进程以数组的形式存储…

空间解析几何在激光雷达的定位和测距中的应用

空间解析几何是一种数学工具&#xff0c;用于描述和分析空间中的几何关系。空间解析几何在激光雷达的定位和测距中起着重要的作用&#xff0c;在激光雷达的定位和测距中&#xff0c;空间解析几何可以帮助我们理解和计算激光雷达与目标物体之间的几何关系&#xff0c;通过描述和…

k8s的包管理工具helm

Helm是什么? 之前的这篇文章介绍了一开始接触k8s的时候接触到的几个命令工具 kubectl&kubelet&rancher&helm&kubeadm这几个命令行工具是什么关系&#xff1f;-CSDN博客 Helm 是一个用于管理和部署 Kubernetes 应用程序的包管理工具。它允许用户定义、安装和…

protobuf-Java使用.md

protobuf 环境配置 1、安装编译器 下载地址 直接解压缩。 2、配置环境变量 环境变量Path 中增加安装目录的路径 3、检查是否配置成功 protoc Usage: protoc [OPTION] PROTO_FILES Parse PROTO_FILES and generate output based on the options given:-IPATH, --proto_pa…

关于程序员的未来的这件事情,我是这么看的!

关于程序员的未来在哪里&#xff1f;很多想做程序员以及已经入坑的程序员都想知道&#xff0c;我作为一名工龄超过12年的资深大龄程序员&#xff0c;我其实也想知道&#xff0c;我也没办法确定程序员的未来在哪里。 或者我也不知道&#xff0c;为什么互联网当初招聘那么多的程…

10 Hadoop的安全模式及权限介绍

1、HDFS工作流程 启动NameNode&#xff0c;NameNode加载fsimage到内存&#xff0c;对内存数据执行edits log日志中的事务操作。文件系统元数据内存镜像加载完毕&#xff0c;进行fsimage和edits log日志的合并&#xff0c;并创建新的fsimage文件和一个空的edits log日志文件。N…

跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode 先把glfw3.h里的KeyCode的定义抄到咱这里来。 在YOTO下创建KeyCode.h: #pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的 #define YT_KEY_SPACE 32 #define YT_KEY_APOSTROPHE 39 /* */ #define YT_KEY_COMMA 44…

node.js项目express的初始化

目录 1.初始化项目2.配置跨域3.开始编写API3.1准备3.2路由处理函数router_make下的user.js3.3路由模块router下的user.js3.4入口文件app.js里面去新增这段代码3.5启动项目进行测试 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你…

如何在浏览器上设置 VPN 网络虚拟专用网络

如何在DT浏览器上设置 VPN 网络 虚拟专用网络&#xff08;VPN&#xff09;是一种用公用网络架设专用网络的技术。如何在DT浏览器上设置 VPN 呢&#xff0c;先下载DT浏览器&#xff0c;建议在官方网站下载最新版&#xff0c;安装&#xff0c;在DT浏览器首页点更多&#xff0c;网…

Excel·VBA合并工作簿2

其他合并工作簿的方法&#xff0c;见之前的文章《ExcelVBA合并工作簿》 目录 8&#xff0c;合并文件夹下所有工作簿中所有工作表&#xff0c;按表头汇总举例 8&#xff0c;合并文件夹下所有工作簿中所有工作表&#xff0c;按表头汇总 与之前的文章《ExcelVBA合并工作簿&#x…

3.postman动态参数、文件上传及断言

一、postman内置动态参数以及自定义的动态参数 postman内置动态参数&#xff1a; {{$timestamp}} 生成当前时间的时间戳 {{$randomint}} 生成0-1000之间的随机数 {{$guid}} 生成随机guid字符串 自定义动态参数&#xff1a; 在请求中pre-req页面下 //手动的获得时间戳 var…