【STM32HAL库】外部中断

news2025/1/16 1:07:26

目录

一、中断简介

二、NVIC

1.寄存器

2.工作原理

3.优先级

4.使用NVIC

三、EXTI

1.简介

2.AFIO:复用功能IO,主要用于重映射和外部中断映射配置​编辑

3. 中断使用

 4.HAL库配置使用


一、中断简介

中断的意义:高效处理紧急程序,不会一直占用CPU资源

 NVIC:嵌套向量中断控制器,属于内核,支持256个中断(16内核,240外部),支持256个优先级,允许裁剪为16个(ST的)

中断向量表:定义一块固定的内存,以四字节对齐,存放在各个中断服务函数程序的首地址,定义在启动文件中

二、NVIC

1.寄存器

2.工作原理

3.优先级

优先级:一般一个工程中只进行一次优先级分组就行,否则可能会导致优先级混乱,如果真的设置了多次,那就会以最后一次设置为准

注意:NVIC的函数都存放在cortex.c里面

4.使用NVIC

三、EXTI简介

EXTI:外部(扩展)中断事件控制器,F1包含20个产生事件/中断请求的边沿检测器,即F120EXTI线

中断:进NVIC,有服务函数,需要CPU处理

事件:不进NVIC,仅用于内部硬件自动控制的,如TIMDMAADC

2.AFIO:复用功能IO,主要用于重映射和外部中断映射配置

3. 中断使用流程

 4.HAL库配置使用步骤

四、HAL库实现

利用按键进行中断的实现,由图,按键是外部下拉了,所以配置下拉输入,然后中断触发方式可以配置为上升沿触发

与标准库不同的是,这个触发方式是直接可以用GPIO结构体直接配置

回调函数是已经被库弱定义了,我们直接再次定义一下就行,但是不用我们去声明

#ifndef __EXTI_H
#define __EXTI_H

#include "./SYSTEM/sys/sys.h"
void EXTI_Init(void);



#endif
#include "exti.h"

void EXTI_Init(void)
{
    //开启时钟
	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOC_CLK_ENABLE();
	__HAL_RCC_AFIO_CLK_ENABLE();
	
    //初始化结构体
	GPIO_InitTypeDef GPIO_Init;
	
	GPIO_Init.Pin = GPIO_PIN_0;
	GPIO_Init.Mode=GPIO_MODE_IT_RISING;//设置为上升沿触发中断
	GPIO_Init.Pull = GPIO_PULLDOWN;//外部下拉
	HAL_GPIO_Init(GPIOA,&GPIO_Init);
	GPIO_Init.Pin = GPIO_PIN_13;
	HAL_GPIO_Init(GPIOC,&GPIO_Init);

	HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//优先级分组
	
	HAL_NVIC_SetPriority(EXTI0_IRQn,0, 1);//配置优先级
	HAL_NVIC_SetPriority(EXTI15_10_IRQn,0, 2);
	
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);//使能中断
	HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}

void EXTI15_10_IRQHandler(void)//中断服务函数
{
	HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);//HAL库中断处理共用函数
}

void EXTI0_IRQHandler()//中断服务函数
{
	HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//HAL库中断处理共用函数
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//HAL库数据处理回调函数
{
	if(GPIO_Pin==GPIO_PIN_13)
	{
		if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==1)//如果按键按下
		{
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);//翻转电平
		}
	}
	if(GPIO_Pin==GPIO_PIN_0)
	{
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==1)
		{
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
		}
	}
}

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"



int main(void)
{
    HAL_Init();                              /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);      /* 设置时钟, 72Mhz */
    delay_init(72);                          /* 延时初始化 */
    LED_Init();                              /* LED初始化 */
    KEY_Init();
	EXTI_Init();
    while(1)
    { 

		
    }
}

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

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

相关文章

小程序 前端如何用wx.request获取 access_token接口调用凭据

在微信小程序中,获取access_token通常是通过wx.request方法来实现的。以下是一个简单的示例代码: 1.获取小程序的appID 与 secret(小程序密钥) 登录之后,请点击左侧的"开发管理">点击"开发设置" 就可以找…

【AI开发:音频】一、GPT-SoVITS整合工具包的部署问题解决(GPU版)

前言 目前GPT-SoVITS的合成效果比较不错,相比较其他厂商的产品要规整的多。众多厂家中也是国内使用最多的一款了,并且这个整合包里携带了,除背景音、切割、训练、微调、合成、低成本合成等一些列完整的工具,也可以作为API进行使用…

C++ | Leetcode C++题解之第38题外观数列

题目&#xff1a; 题解&#xff1a; class Solution { public:string countAndSay(int n) {string prev "1";for (int i 2; i < n; i) {string curr "";int start 0;int pos 0;while (pos < prev.size()) {while (pos < prev.size() &&…

iOS -- 工厂设计模式

iOS -- 工厂设计模式 设计模式概念设计模式七大准则简单工厂模式优点缺点主要作用示例 工厂方法模式优点缺点主要作用&#xff1a; 抽象工厂方法缺点主要作用&#xff1a;文件分类 设计模式概念 所谓设计模式&#xff08;Design pattern&#xff09; 是解决软件开发某些特定问…

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。

java CMS&#xff0c;G1垃圾收集器工作流程原理浅析 JVM内存空间基础知识点&#xff08;基于JDk1.8&#xff09; 1.方法区&#xff1a;逻辑概念&#xff0c;元空间&#xff0c;方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分&#xf…

UE4_动画基础_根运动Root Motion

学习笔记&#xff0c;仅供参考&#xff01; 在游戏动画中&#xff0c;角色的碰撞胶囊体&#xff08;或其他形状&#xff09;通常由控制器驱动通过场景。然后来自该胶囊体的数据用于驱动动画。例如&#xff0c;如果胶囊体在向前移动&#xff0c;系统就会知道在角色上播放一个跑步…

C#语法知识之循环语句

5、循环语句 文章目录 1、while思考1 斐波那契数列思考2 判断一个数是否为质数思考3 找出100以内的质数 2、do...while3、for思考1 找水仙花数思考2 乘法表 1、while 1、作用 让代码重复去执行 2、语法相关 while(bool类型值){//当满足条件时&#xff0c;就会执行while语句…

深度学习每周学习总结P5(运动鞋识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入及处理部分2. 加载数据集3.模型构建部分3.1 模型构建3.2 公式推导 4. 设置超参…

深度强化学习开端——DQN算法求解车杆游戏

深度强化学习开端——DQN算法求解车杆游戏 DQN&#xff0c;即深度Q网络&#xff08;Deep Q-Network&#xff09;&#xff0c;是一种结合了深度学习和强化学习的算法&#xff0c;其主要用于解决序列决策问题&#xff0c;并且在许多复杂的决策任务中展现出了显著的效果。DQN算法…

C++:map和set的使用

一、关联式容器介绍 在学习map和set之前&#xff0c;我们接触到的容器有&#xff1a;vector、list、stack、queue、priority_queue、array&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 关联式容器也是用…

【JavaEE多线程】线程中断 interrupt()

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

用FRP配置toml文件搭建内网穿透

需求场景 1、一台外网可访问的有固定ip的云服务器&#xff0c;Ubuntu系统 2、一台外网无法访问的无固定ip的本地家用电脑&#xff0c;Ubuntu系统 需求&#xff1a;将云服务器搭建为一台内网穿透服务器&#xff0c;实现通过外网访问家用电脑&#xff08;网页&#xff09;的功能。…

Unity 中(提示框Tweet)

using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System; public class Message : MonoBehaviour {public float dropDuration 0.5f; // 掉落持续时间public float persisterDuration 1f; // 持续显示时间public float dorpHeight;public static Message…

AWS账号注册以及Claude 3 模型使用教程!

哈喽哈喽大家好呀&#xff0c;伙伴们&#xff01;你听说了吗&#xff1f;最近AWS托管了大热模型&#xff1a;Claude 3 Opus&#xff01;想要一探究竟吗&#xff1f;那就赶紧来注册AWS账号吧&#xff01;别担心&#xff0c;现在注册还免费呢&#xff01;而且在AWS上还有更多的大…

macos知名的清理软件 cleanmymac和腾讯柠檬哪个好 cleanmymacx有必要买吗

MacOS是一款优秀的操作系统&#xff0c;但是随着使用时间的增加&#xff0c;它也会产生一些不必要的垃圾文件&#xff0c;占用磁盘空间和内存资源&#xff0c;影响系统的性能和稳定性。为了保持MacOS的清洁和高效&#xff0c;我们需要使用一些专业的清理软件来定期扫描和清除这…

DePIN 赛道黑马,peaq network 如何打造全新 Web3 物联网?

当 Web2 公司仍对用户数据和资料进行“中心化”的收集与控制时&#xff0c;我们虽享受到了物联网技术的便利&#xff0c;却依旧没有逃脱个人数据和价值所有权的剥夺。由此&#xff0c;Web3 技术开始深入物联网世界&#xff0c;智能家居、智能汽车、智能手机都成为重要发力点&am…

三大层次学习企业架构框架TOGAF

前言 对于一名架构师来讲&#xff0c;如果说编程语言是知识库层次中的入门石&#xff0c;那么企业架构框架则相当于知识库层次中的金字塔尖。如果想成长为企业级的架构师&#xff0c;企业架构框架是必须要攀登的高塔。 目前国内绝大多数企业采用TOGAF标准&#xff0c;因此我们…

XSS漏洞---类型+实战案例+防止

文章目录 目录 文章目录 一.XSS漏洞简介 二.XSS漏洞类型 三.实战案例 反射型XSS 存储型XSS 四.防护措施 一.XSS漏洞简介 XSS漏洞&#xff08;Cross-Site Scripting&#xff09;是一种常见的Web应用程序安全漏洞&#xff0c;它允许攻击者在受害者的浏览器中注入恶意脚本。当受…

记录一下flume中因为taildir_position.json因位置不对导致数据无法从kafka被采到hdfs上的问题

【背景说明】 我需要用flume将kafka上的数据采集到hdfs上&#xff0c;发现数据怎么到不了hdfs。 【问题排查】 1.kafka上已有相应的数据 2.我的flume配置文档&#xff08;没问题&#xff09;&#xff0c; 3.时间拦截器&#xff08;没问题&#xff09;&#xff0c; 4.JSONObje…

IDEA开启自动导包,自动删包

找到file----------->Settings选项 找到Editor-------->General------------>Auto Import选项 勾选两个选项&#xff0c;在点击Apply,在点击ok 最后就ok了