【STM32HAL库】外部中断

目录

一、中断简介

二、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.mfbz.cn/a/573939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

树莓派学习笔记--串口通信(配置硬件串口进行通信)

树莓派串口知识点 树莓派4b的外设一共包含两个串口:硬件串口(/dev/ttyAMA0),mini串口(/dev/ttyS0) 硬件串口由硬件实现,有单独的波特率时钟源,性能高,可靠;而mini串口性能…

Java-AQS的原理

文章目录 基本概述1. 设计思想2. 基本实现 一些关键词语以及常用术语,主要如下: 信号量(Semaphore): 是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用,也是作系统用来解决并发中的互斥和同步问题…

数据挖掘 | Count数据去除批次效应后不是整数甚至还出现负值导致无法进行差异分析怎么办?

之前咱们介绍过数据挖掘 | 批次效应的鉴定与处理 | 附完整代码 注释 | 看完不会来揍我,但是很多小伙伴遇到了Count数据批次处理后不是整数甚至还出现负值的问题,这就导致无法使用某些包包进行差异分析(对差异分析感兴趣的小伙伴可以查看&…

MySQL中如何随机获取一条记录

点击上方蓝字关注我 随机获取一条记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一条记录,每种方法都有其适用的情况和性能特点。在本文中,我们将探讨几种…

word添加行号

打开页面设置,找到行号

2018-2023年上市公司富时罗素ESG评分数据

2018-2023年上市公司富时罗素ESG评分数据 1、时间:2018-2023年 2、来源:整理自WIND 3、指标:证券代码、简称、ESG评分 4、范围:上市公司 5、指标解释: 富时罗素将公司绿色收入的界定和计算作为公司ESG 评级打分结…

「白嫖」开源的后果就是供应链攻击么?| 编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 面对网络安全威胁日益严重的今天,软件供应链安全已经成为开发者领域无法避免的焦点…

OpenWRT设置自动获取IP,作为二级路由器

前言 上一期咱们讲了在OpenWRT设置PPPoE拨号的教程,在光猫桥接的模式下,OpenWRT如果不设置PPPoE拨号,就无法正常上网。 OpenWRT设置PPPoE拨号教程 但现在很多新装的宽带,宽带师傅为了方便都会把光猫设置为路由模式。如果你再外…

【A-024】基于SSH的房屋租赁管理系统(含论文)

【A-024】基于SSH的房屋租赁管理系统(含论文) 开发环境: Jdk7(8)Tomcat7(8)MySQLIntelliJ IDEA(Eclipse) 数据库: MySQL 技术: SpringStruts2HiberanteBootstrapJquery 适用于: 课程设计,毕…

半波整流220V转正5V负-5V100mA恒压WT5101A

半波整流220V转正5V负-5V100mA恒压WT5101A WT5101A 是一款专为 Buck 和 Buck-Boost 拓扑而设计的高效、具有成本优势的离线恒压稳压器,内嵌有500V MOSFET。在降低系统成本的同时,这款稳压器只需少量的外部元件就能输出默认的5V电压。在轻负载条件下&…

Sping源码(七)—context: component-scan标签如何扫描、加载Bean

序言 简单回顾一下。上一篇文章介绍了从xml文件context component-scan标签的加载流程到ConfigurationClassPostProcessor的创建流程。 本篇会深入了解context component-scan标签底层做了些什么。 component-scan 早期使用Spring进行开发时,很多时候都是注解 标…

智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法

智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法 目录 智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法效果一览基本介绍程序设计参考资料效果一览 基本介绍 Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法 融合自适应…

ds18b20温度传感器驱动程序

ds18b20驱动程序 有了之前延时的方法,那么实现一个单总线数据传输的传感器驱动程序就非常简单了。下面我们套用杂项驱动框架来编写ds18b20驱动程序。 实现需要明确的是:**ds18b20驱动的本质是通过2440的gpio,通过给定的时序对ds18b20的读写数…

【介绍下WebStorm开发插件】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

保护你的网站:了解5种常见网络攻击类型及其防御方法

随着互联网的迅猛发展,针对网站的各种类型的网络攻击随之增加,网络攻击事件层出不穷,由此,如何保护网站安全成为每个网站所有者的重要议题。在下面的内容中,我们将探讨5种常见网络攻击类型及其防御方法,以帮…

SNETCracker--超级弱口令检查工具简介

一、简介 SNETCracker 超级弱口令检查工具是一款Windows平台的弱口令审计工具,支持批量多线程检查,可快速发现弱密码、弱口令账号,密码支持和用户名结合进行检查,大大提高成功率,支持自定义服务端口和字典。 二、SNE…

常见内网系统网络结构及nginx代理配置

系统网络结构图及nginx配置 1.系统网络结构图2.Nginx网络配置2.1请求从互联网区访问到内网区2.2 请求从内网访问互联网 1.系统网络结构图 传统公司服务部署网络都会分区,应用都部署在内网区,请求通过dmz区转出内网与互联网发生交互。 结构图详解&#…

springCloud集成activiti5.22.0流程引擎

springCloud集成activiti5.22.0流程引擎 点关注不迷路,欢迎再访! 精简博客内容,尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 小编最近工作需要涉及到流程,由于网络上5.22版…

CHARLS轻松发二区,只用了COX回归模型 | CHARLS CLHLS CFPS 公共数据库周报(4.3)...

零基础CHARLS发论文,不容错过! 长期回放更新指导!适合零基础,毕业论文,赠送2011-2020年CHARLS清洗后的数据全套代码! CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retireme…

C++初阶学习第三弹——类与对象(上)——初始类与对象

前言: 在前面,我们已经初步学习了C的一些基本语法,比如内敛函数、函数重载、缺省参数、引用等等,接下来我们就将正式步入C的神圣殿堂,首先,先给你找个对象 目录 一、类与对象是什么? 二、类的各…