stm32 笔记 外部中断以及HAL库应用

STM32笔记—EXTI外部中断 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行;中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源;中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。(不用开启外设时钟:特殊)EXTI可以监测指定GPIO口的电平信号,当其指定的。 阅读详情

外部中断

由外部设备发起的中断请求,会使得设备暂停当前的主程序,保存标志位并把当前指令压入堆栈,转而去执行中断的子程序。执行完毕后再弹出执行堆栈,恢复标志位,继续执行主程序。

STM32 的外部中断线

STM32的每个IO都可以作为外部中断输入。

STM32的中断控制器支持19个外部中断/事件请求:

线0~15:对应外部IO口的输入中断 PAx~PIx。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

外部中断线与IO引脚对应关系

这时候想必读者可能要问了,STM32供IO使用的中断线只有16个,但是STM32F10x系列的IO口多达上百个,STM32F103ZET6(112),STM32F103RCT6(51),那么中断线怎么跟IO口对应上呢?下图就是STM32的外部中断线和IO口的对应关系:

对于每个中断线,我们可以设置相应的触发方式(上升沿触发,下降沿触发,边沿触发)以及使能。

中断向量与服务函数

是不是16个中断线就可以分配16个中断服务函数呢?

IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数


从表中可以看出,外部中断线5~9分配一个中断向量,共用一个服务函数。

外部中断线10~15分配一个中断向量,共用一个中断服务函数。

下面是中断服务函数列表:

EXTI0_IRQHandler

EXTI1_IRQHandler

EXTI2_IRQHandler

EXTI3_IRQHandler

EXTI4_IRQHandler

EXTI9_5_IRQHandler

EXTI15_10_IRQHandler

中断初始化配置

//中断初始化配置函数
void EXTI_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;
    
    __HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟
    
    GPIO_Initure.Pin=GPIO_PIN_0;                //PA0
    GPIO_Initure.Mode=GPIO_MODE_IT_RISING;      //上升沿触发
    GPIO_Initure.Pull=GPIO_PULLDOWN;            //下拉电阻
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
    
    //中断线0-PA0
    HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);       //抢占优先级为2,子优先级为0
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);             //使能中断线0;         //使能中断线13  
}

在 HAL 库中,中断处理初始化和 GPIO 初始化使用同一个结构体,如果想把他当作一个初始化中断结构体,只需为 GPIO_Initure.Mode= 赋值,HAL库即会把他当作一个中断来看待。在此时我们设置的是上升沿触发,也就是从低电平转到高电平时刻触发这个中断。

中断服务函数与服务回调

//中断服务函数
void EXTI0_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//调用中断处理公用函数
}

//中断服务回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//这里写中断程序
	switch(GPIO_Pin){
		case GPIO_PIN_0:
			//GPIO0的中断程序
		break;
		case GPIO_PIN_13:
			//GPIO13中断程序
		break;
	}
}

首先,当 EXTI0 有中断事件后,HAL 库会帮我们调用 EXTI0_IRQHandler() 这个函数,如果是 EXTIx 就以此类推。

之后我们需要在这个函数中调用 HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0),他会帮我们调用

void HAL_GPIO_EXTI_Callback() 这个函数,在这个函数中就可以写我们的中断子程序了。这个流程是较为规范的,请不要省略其中的步骤。

示例代码

#include "sys.h"
#include "delay.h"
#include "led.h"

//中断初始化配置函数
void EXTI_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;
    
    __HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟
    
    GPIO_Initure.Pin=GPIO_PIN_0;                //PA0
    GPIO_Initure.Mode=GPIO_MODE_IT_RISING;      //上升沿触发
    GPIO_Initure.Pull=GPIO_PULLDOWN;            //下拉电阻
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
    
    //中断线0-PA0
    HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);       //抢占优先级为2,子优先级为0
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);             //使能中断线0;         //使能中断线13  
}

//中断服务函数
void EXTI0_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//调用中断处理公用函数
}

//中断服务回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//这里写中断程序
	switch(GPIO_Pin){
		case GPIO_PIN_0:
			//GPIO0的中断程序
		break;
		case GPIO_PIN_13:
			//GPIO13中断程序
		break;
	}
}


int main(void)
{
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    delay_init(180);                //初始化延时函数
    LED_Init();                     //初始化LED 
    EXTI_Init();                    //外部中断初始化
	    while(1)
    {
        delay_ms(1000);             //务必始终循环延迟,否则执行完程序就不相应中断了
    }
}


STM32-矩阵键盘(中断) 原理 矩阵键盘 在其中3列加上低电平,第x列加上高电平,当检测到第y行出现低电平,说明x行y列有按键按下 执行上述步骤四次,就可以准确知道那个键位按下 中断原理 行的GPIO设置输入,上拉(不输入时默认高电平) 列的GPIO设置推挽输出,初始化低电平 行GPIO对应LINE5~8,使用中断服务函数EXTI9_5_IRQHandler 当中断产生,先判断是哪一根中断线,再开始逐列扫描 注意:不要把多个GPIO映射到同一个中断线上,但多条中断线可以对应一个中断服务函数 实现 GPIO. 阅读详情

相关推荐

用stm32F103串口完成通信中断

继续上个实验,学习stm32中断、DMA通信原理和编程方法。

qq_58804208的博客 2535

stm32 exti 5~9 中断源区分

void EXTI9_5_IRQHandler(void) {   u32 Temp = 0x00;    PEout(2) = ~PEout(2);   Temp = EXTI->PR;       //取读是那个引脚的中断   switch(Temp)   {     case Exti_From_Pin8:       EXTI_ClearITPendingBit(E

蚂蚁取经 2万+

基于STM32_HAL库的外部中断应用

基于STM32_HAL库的外部中断应用

weixin_54859557的博客 2611

STM32F429之外部中断

7个中断通道在NVRC中使用7个中断服务函数EXPORT  EXTI9_5_IRQHandler      22个中断线中断源为任意想要连接的GPIO,用那个连哪个SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);配置NVRC—配置GPIO(打开SYSCFG时钟)—连接中断源到GPIO—配置中断EXTI—编写中断服务函数具体如...

老鱼的故事 3796

STM32按键外部中断控制LED流水灯-HAL库

基于HAL库STM32按键外部中断控制

LiuYaLiu2的博客 7322

STM32F103 HAL库外部中断(三)

外部中断1、外部中断配置1.1、初始化中断I/O,设置触发条件1.2、配置中断优先级(NVIC),并使能中断。1.3、编写中断服务函数。1.4、编写中断处理回调函数 HAL_GPIO_EXTI_Callback HAL库基本使用系列的 全部博客是我重新学习HAL库的学习记录,仅作为学习记录。其中使用了正点原子Mini开发板和正点原子HAL库Demo,详细的资料请观看正点原子官网   本来计划写一下串口的使用,但是前面的博客里面已经介绍到了串口的文件夹以及串口的初始化以及基本使用,最多就是在加一个中断处理

青烨慕容 5215

野火STM32_HAL库版课程笔记-外部中断应用与回调函数

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

qq_67987896的博客 523

ADC电路项目1——10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8

包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。本设计采用 smic18mmrf CMOS 工艺,使用栅压自举电路的采样开关,Vcm-based 开关。电容开关控制电路,10 位 DFF,最后用 10 位理想 DAC 模块将数字码转换为 10 进制量进。时序上级板采样的 DAC 电容阵列,两级动态比较器,比较器异步时钟,SAR 动态逻辑,DAC。10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8。

qq_48407979的博客 815

【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)

前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且讲解HAL库的GPIO的各种函数,带你学习不一样的STM32 如果还没有配置过工程,请参看上一篇博客《STM32CubeMX教程二--基本使用(新建工程点亮LED灯)》 那么话不多说,我们开...

Z小旋 23万+

Altair HyperWorks 2022.3.0 Suite下载

Altair HyperWorks开发团队提供了新的一流技术,以设计和优化高性能、高效和创新的产品,并发布了HyperWorks 2021.2套件。与所有新版本一样,这个版本包含了新特性、增强功能,并修复了前一个版本中用户报告的各种问题,提供了总体上更稳定的体验。链接: https://pan.baidu.com/s/1rYietmQLQUboHiJzYoE9WQ?pwd=m9yh 提取码: m9yh 复制这段内容后打开百度网盘手机App,操作更方便哦。

weixin_48469365的博客 2129

Ubuntu双系统开机黑屏?3分钟搞定NVIDIA显卡驱动冲突(18.04/20.04实测有效)

本文详细解决Ubuntu双系统开机黑屏问题,特别是由NVIDIA显卡驱动冲突引起的故障。提供从临时进入系统到永久安装专有驱动的完整方案,适用于Ubuntu18.04/20.04用户,帮助快速恢复系统并优化显卡性能。

resnet7explorer的博客 310

STM32学习笔记-外部中断(HAL)

NVIC即嵌套向量中断控制器,全称它是内核的器件。M3内核都 是支持 256个中断,其中包含了16个系统中断和240个外部中断,并且具有256级的可编程中断设置。然而芯片厂商一般不会把内核的这些资源全部用完,如 STM32F103RCT6的系统中 断有 10个,外部中断有60个。下图是中断向量表-系统中断部分。

jihevivi的博客 1775

手把手教你用SIMCOM A7670C_FASL模组实现双路MQTT连接阿里云(附完整源码)

本文详细介绍了如何使用SIMCOM A7670C_FASL 4G模组实现双路MQTT连接阿里云,包括硬件配置、开发环境搭建、双路MQTT架构设计及实现细节。通过完整的源码示例和实战指南,帮助开发者快速掌握物联网设备开发中的多路MQTT连接技术,提升工业级应用的开发效率。

weixin_33696822的博客 227

【STM32】HAL库 STM32CubeMX系列学习教程

STM32CubeMX 简介 1、STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。 在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具...

Z小旋 52万+

C#操作MySQL从入门到精通(3)——新建数据库、新建表

我们要首先新建一个数据库,并且在数据库中新建一系列的表来管理数据库。

qq_34059233的博客 952

卷积神经网络中的自注意力机制(Self-Attention Mechanism)

卷积神经网络中的机制表现为操作,其实现过程与Seq2Seq模型的自注意力机制类似。标准的卷积层是一种局部滤波操作,其输出特征上的任意位置是由对应输入特征的一个邻域构造的,只能捕捉局部特征之间的关系。而自注意力机制通过计算任意两个位置之间的关系直接捕捉远程依赖,而不用局限于相邻点,相当于构造了一个的卷积核,从而可以捕捉更多信息。在卷积网络的自注意力机制中,首先构造输入特征x的键特征fx, 查询特征gx和值特征hx;

AI天才研究院 1501

【STM32】基于HAL库的中断详细学习

在处理器执行程序的过程中,被处理器内部或外部事件所打断,暂停当前程序的执行,转而去执行该事件对应的处理程序,这个处理过程称为中断。 在中断过程中,引发中断的事件称为中断源;当前正在执行的程序称为主程序;主程序被暂停的位置称为断点;事件所对应的处理程序称为中断服务程序(interrupt service routine,ISR)。

科昂的博客 1万+

ERROR conda.core.link:_execute(502): error occurred while installing conda-forge::setuptools 解决方案

本文主要介绍了ERROR conda.core.link:_execute(502): An error occurred while installing package mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge::setuptools-65.5.1-pyhd8ed1ab_0.FileNotFoundError(2, 系统找不到指定的文件。, None, 2) 解决方案,希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

STM32 HAL库 STM32CubeMx -- 外部中断

STM32 HAL库 外部中断、STM32CubeMx配置外部中断、STM32 中断介绍、NVIC介绍、外部中断、外部中断代码分析

Dir_x的博客 8590

「深度学习之优化算法」笔记(二)优化算法的分类

但是由于生物的局限性,人们所创造出的算法也会有局限性:我们所熟知的生物都生存在三维空间,在这些环境中,影响生物生存的条件比较有限,反应到算法中就是这些算法在解决较低维度的问题时效果很好,当遇到超高维(维度>500)问题时,结果可能不容乐观,没做过实验,我也不敢乱说。当然,他们的目的不是在最佳狩猎位置集合,他们的目的是在过去的途中看是否能发现更加好的狩猎位置,去往已经到过的狩猎地点再次狩猎是没有意义的,因为每个位置获取食物的难易程度是固定的。如果他们的策略是“不跟随最优解”,那么他们的策略是什么呢?

quanzhan_King的博客 1371

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32 HAL库 CubeMX教程(四)按键外部中断

STM32 HAL库 CubeMX教程(四)外部中断实验内容NVIC(嵌套向量中断控制器)外部中断简介CubeMX配置中断回调函数编写 实验内容 利用按键控制LED的亮灭? 实现方法: 按键扫描 外部中断 第二种方法较为常用,思路:按键按下会产生一个上升沿或者下降沿的触发脉冲,利用单片机的IO口检测输入脉冲,触发外部中断,控制LED动作。 NVIC(嵌套向量中断控制器) NVIC 是嵌套...

带火星的小木条的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例)

STM32F1系列使用HAL库RTC时钟唤醒低功耗STOP和STANDBY模式 目录STM32F1系列使用HAL库RTC时钟唤醒低功耗STOP和STANDBY模式(一)低功耗模式介绍1、睡眠模式2、停止模式3、待机模式4、快速应用了解(二)RTC周期闹钟唤醒STOP模式 不会使用HAL库驱动RTC可以先看这里:https://blog.youkuaiyun.com/qq153471503/article/details/111660338 (一)低功耗模式介绍 STM32三种低功耗模式: 睡眠模式 停止模式 待机

^_^ 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【学习笔记】STM32hal库开发入门笔记

HAL库开发,零基础入门级,自学笔记(完善中)

qq_45498008的博客 1万+

【STM32HAL库】常用功能备忘

自用HAL库常用功能备忘,不定时更新(用到哪写哪)

m0_57585228的博客 7730

基于STM32 HAL库的外部中断开发详解

外部中断是STM32微控制器中一种重要的外设功能,它允许微控制器对外部信号的变化做出快速响应。与轮询方式相比,外部中断具有响应速度快、CPU占用率低等优势,特别适合处理突发性事件或实时性要求高的应用场景。在STM32中,外部中断(EXTI, External Interrupt/Event Controller)是一个独立的控制器,它负责管理所有GPIO引脚的中断和事件请求。EXTI控制器的主要特点包括:支持所有GPIO引脚作为中断源每个中断/事件都有独立的触发和屏蔽控制。

m0_75187370的博客 1732

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态

面向小白 实现目标:用按键控制led点亮和熄灭 按键输入捕获及外部中断检测按键状态需要掌握的知识 一、GPIO输入 接下来说说GPIO作为输入时和输入的不同: (1):首先需要了解按键是低电平有效还是高电平有效,因为此处需要配置GPIO口的输入模式。大家都知道GPIO口有四种输入模式,四种输出模式(具体请看我的第一篇笔记)。我使用的是STM32F407VE,按键S1和S2为低电平有效,故此处配置输出模式时应为上拉输入模式,即GPIO_Mode=GPIO_Mode_Input;GPIO Pull-u

qq_52528413的博客 4331
上一篇: stm32 笔记IO口点灯实验及HAL库使用
下一篇: stm32 笔记 UART发送及HAL库应用
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值