中断和事件

news/2024/7/23 10:00:05 标签: 单片机, 嵌入式硬件

目录

中断概述

什么是中断?

什么是EXTI?

EXTI初始化结构体:

 中断/事件线:

EXTI模式:

触发类型:

EXTI控制:

什么是优先级?

什么是优先级分组?

什么是NVIC?

什么是中断向量表?

按键点亮LED灯(中断法)


中断概述

什么是中断?

  中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的
程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

什么是EXTI

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

EXTI  可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不
同。
产生中断线路目的是把输入信号输入到  NVIC ,进一步会运行中断服务函数,实现功能,这样是软
件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传
输,属于硬件级的。

EXTI初始化结构体:

typedef struct
{
//中断/事件线
uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or
disabled.
This parameter can be any combination value
of @ref EXTI_Lines */
//EXTI 模式
EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines.
This parameter can be a value of @ref
EXTIMode_TypeDef */
//触发类型
EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for
the EXTI lines.
This parameter can be a value of @ref
EXTITrigger_TypeDef */
//EXTI 控制
FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI
lines.
This parameter can be set either to ENABLE or
DISABLE */
}EXTI_InitTypeDef;

 中断/事件线:

#define EXTI_Line0 ((uint32_t)0x00001) /*!< External interrupt line 0 */
#define EXTI_Line1 ((uint32_t)0x00002) /*!< External interrupt line 1 */
#define EXTI_Line2 ((uint32_t)0x00004) /*!< External interrupt line 2 */
#define EXTI_Line3 ((uint32_t)0x00008) /*!< External interrupt line 3 */
#define EXTI_Line4 ((uint32_t)0x00010) /*!< External interrupt line 4 */
#define EXTI_Line5 ((uint32_t)0x00020) /*!< External interrupt line 5 */
#define EXTI_Line6 ((uint32_t)0x00040) /*!< External interrupt line 6 */
#define EXTI_Line7 ((uint32_t)0x00080) /*!< External interrupt line 7 */
#define EXTI_Line8 ((uint32_t)0x00100) /*!< External interrupt line 8 */
#define EXTI_Line9 ((uint32_t)0x00200) /*!< External interrupt line 9 */
#define EXTI_Line10 ((uint32_t)0x00400) /*!< External interrupt line 10 */
#define EXTI_Line11 ((uint32_t)0x00800) /*!< External interrupt line 11 */
#define EXTI_Line12 ((uint32_t)0x01000) /*!< External interrupt line 12 */
#define EXTI_Line13 ((uint32_t)0x02000) /*!< External interrupt line 13 */
#define EXTI_Line14 ((uint32_t)0x04000) /*!< External interrupt line 14 */
#define EXTI_Line15 ((uint32_t)0x08000) /*!< External interrupt line 15 */
#define EXTI_Line16 ((uint32_t)0x10000) /*!< External interrupt line 16
Connected to the PVD Output */
#define EXTI_Line17 ((uint32_t)0x20000) /*!< External interrupt line 17
Connected to the RTC Alarm event */
#define EXTI_Line18 ((uint32_t)0x40000) /*!< External interrupt line 18
Connected to the USB OTG FS Wakeup from suspend event */
#define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19
Connected to the Ethernet Wakeup event */
#define EXTI_Line20 ((uint32_t)0x00100000) /*!< External interrupt line 20
Connected to the USB OTG HS (configured in FS) Wakeup event */
#define EXTI_Line21 ((uint32_t)0x00200000) /*!< External interrupt line 21
Connected to the RTC Tamper and Time Stamp events */
#define EXTI_Line22 ((uint32_t)0x00400000) /*!< External interrupt line 22
Connected to the RTC Wakeup event */

EXTI模式:

typedef enum
{
EXTI_Mode_Interrupt = 0x00, //产生中断
EXTI_Mode_Event = 0x04 //产生事件
}EXTIMode_TypeDef;

触发类型:

typedef enum
{
EXTI_Trigger_Rising = 0x08, //上升沿
EXTI_Trigger_Falling = 0x0C, //下降沿
EXTI_Trigger_Rising_Falling = 0x10 //上升沿和下降沿都触发
}EXTITrigger_TypeDef;

EXTI控制:

使能 EXTI ,一般都是使能, ENABLE

什么是优先级?

  抢占优先级和响应优先级的区别:

  • 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
  • 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
  • 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
  • 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行

什么是优先级分组?

 Cortex-M3 允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此 STM32
指定中断优先级的寄存器位减少到 4 位,这 4 个寄存器位的分组方式如下:
  • 0组:所有4位用于指定响应优先级
  • 1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
  • 2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
  • 3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
  • 4组:所有4位用于指定抢占式优先级

什么是NVIC

STM32 通过中断控制器 NVIC Nested Vectored Interrupt Controller )进行中断的管理 。
NVIC 是属于 Cortex 内核的器件,不可屏蔽中断( NMI )和外部中断都由它来处理,但是 SYSTICK
不是由 NVIC 控制的。
typedef struct
{
uint8_t NVIC_IRQChannel;
uint8_t NVIC_IRQChannelPreemptionPriority; //抢断优先级
uint8_t NVIC_IRQChannelSubPriority; //响应优先级
FunctionalState NVIC_IRQChannelCmd;
} NVIC_InitTypeDef;

什么是中断向量表?

   每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向
量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程
序入口的跳转指令构成一张表,称为中断向量跳转表。

按键点亮LED灯(中断法)

//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
//该代码的功能实现了按键点灯翻转操作
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	
	switch(GPIO_Pin){
		case GPIO_PIN_0:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET){
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
			}
			break;
		case GPIO_PIN_1:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==GPIO_PIN_RESET){
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
			}
			break;
	}
}


http://www.niftyadmin.cn/n/129886.html

相关文章

【基于STM32的多功能台灯控制】

基于STM32的多功能台灯控制 在之前一篇博文中已出过智能台灯相关的介绍&#xff0c;在这里对之前的模块以及功能上进行了优化和功能上的改进&#xff0c;需源码或实物可私【创作不易-拒绝白嫖】 功能说明 1、按键模式多功能台灯在设计上使用了4个按键分别做为 按键1模式的切换…

vim-gvim使用教程 常用配置

目录gvim和vim的区别常用的工作模式常用命令配置文件设置.vimrcgvim和vim的区别 和Word等富文本编辑器不同的是&#xff0c;vim编辑器的功能没有那么丰富&#xff0c;是贫文本编辑器&#xff0c;且一般应用于Linux环境下&#xff0c;但是由于做了一系列的优化和适配&#xff0…

【刷题】-- 基础 -- 二分查找

精于结构、敏于心智、熟于代码 方式&#xff1a;对于会的代码&#xff1a;学会以最快的速度构建&#xff0c;并以最快的速度书写&#xff1b;对于不会的代码&#xff1a;学会&#xff08;以最短的路径下&#xff09;看懂别人的代码。学会使用参考文档、熟悉每一个容器。 刷题位…

问一下ChatGPT:DIKW金字塔模型

经常看到这张DIKW金字塔模型图&#xff0c;还看到感觉有点过份解读的图&#xff0c;后面又加上了insight&#xff0c;impact等内容。 Data&#xff1a;是数据&#xff0c;零散的、无规则的呈现到人们眼前&#xff0c;如果你只看到这些数字&#xff0c;如果没有强大的知识背景&a…

TimescaleDB 超表

关于超表 超表&#xff08;hypertable&#xff09;是具有特殊功能的PostgreSQL表&#xff0c;可以很容易地处理时间序列数据。与它们交互就像与普通PostgreSQL表交互一样&#xff0c;但在幕后&#xff0c;超表会自动按时间将数据划分为块。 在TimescaleDB中&#xff0c;超表与…

选用温度传感器需要注意事项

在进行低温科学实验时&#xff0c;选择一支良好的温度传感器是实验能否成功的关键。由于温度传感器的种类众多&#xff0c;价格也是千差万别&#xff0c;因此选择一支适合自己使用的温度计显得极其重要。 注意事项 1、被测对象的温度是否需记录、报警和自动控制&#xff0c;是…

Anaconda老版本Python虚拟环境更新Spyder软件失败的多种解决方法

本文介绍在Anaconda中&#xff0c;为一个具有老版本Python的虚拟环境更新Spyder软件版本的多种方法。 首先看一下本文所需实现的需求。按照文章Anaconda为虚拟环境安装第三方库与Spyder等软件的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/12833…

Python 的IDE——PyCharm

IDE介绍与安装 介绍 集成开发环境&#xff08;IDE&#xff09; 集成开发环境(IDE,integrated Development Environment) —— 集成开发软件需要的所有工具&#xff0c;一般包括以下工具&#xff1a; 图形用户界面 代码编辑器(支持代码补全、自动缩进) 编译器/解释器 调试器…