【STM32HAL库】外部中断

2024-04-19 15:28
文章标签 中断 stm32hal 外部

本文主要是介绍【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){ }
}

这篇关于【STM32HAL库】外部中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)

Function Calling是大模型连接外部世界的通道,目前出现的插件(Plugins )、OpenAI的Actions、各个大模型平台中出现的tools工具集,其实都是Function Calling的范畴。时下大火的OpenAI的GPTs,原理就是使用了Function Calling,例如联网检索、code interpreter。 本文带大家了解下Function calling,看

外部中断的边缘触发和电平触发

MCS-51单片机中的边缘触发是指当输入引脚电平由高到低发生跳变时,才引起中断。而电平触发是指只要外部引脚为低电平就引起中断。         在电平触发方式下,当外部引脚的低电平在中断服务返回前没有被拉高时(即撤除中断请求状态),会引起反复的不需要的中断,造成程序执行的错误。这类中断方式下,需要在中断服务程序中设置指令,清除外部中断的低电平状态,使之变为高电平。

【Java编程思想】线程的基本协作机制 与 线程的中断

wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表

首先借助STM32我们需要了解中断系统是如何构成的         会有一个中断源,也就是能够向CPU发出中断请求的设备或事件。中断源不分硬件和软件,也就是产生中断信号,就会执行中断服务函数         但是CPU是如何知道中断源产生后就找到对应的中断服务函数呢,这个时候就要引入中断向量表,它的主要功能是描述中断对应的中断服务函数,每个中断源都有一个唯一的中断号(也称向量号),

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器: Kunpeng-920 内存: 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysql数据集群 现象描述 环境描

从应用内跳转至外部浏览器 - 鸿蒙 HarmonyOS Next

从应用内跳转至外部浏览器,基于 Want 来实现,同时也可以通过其方式尝试跳转至其它系统模块,具体可参考如下 code : 方法调用 // 调用pushOutsideWeb(controller, url) 方法实现 import { common, contextConstant, Want } from '@kit.AbilityKit';import { HintMessage